From 2cc7eca6ddd7500e6f134394b1bef4a0bfb41d60 Mon Sep 17 00:00:00 2001 From: cdez Date: Tue, 12 Sep 2023 16:25:56 -0700 Subject: [PATCH] Fixed the GUR and Leverington Issues +- PA02_Main +- StateUtilities.c +- outDebug (precompiled for UNIX) --- PA02-0913/PA02_Main | Bin 33216 -> 33200 bytes PA02-0913/StateUtilities.c | 86 +++++++++++++++------------------ PA02-0913/build/Debug/outDebug | Bin 90096 -> 90376 bytes 3 files changed, 39 insertions(+), 47 deletions(-) diff --git a/PA02-0913/PA02_Main b/PA02-0913/PA02_Main index 1de69088537fef3d0ee2f577b237f0b788bd3a89..226f7e253a237cfc8f783bfa5582704f26d87104 100755 GIT binary patch delta 7515 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

UxyqgX|R!|pY4PAr$mW=aFY$c^b zHc%eqdsGFkR^WDu%MfoNcPc``#W~Vn$o=j)*EqZggYKIw6o^H~wH0e9|%;LcYR3FM( zc^3xyj_#87bbv=@c;50nM%y;D>=Q)mr1w7G9MZG^UWSmbP>jihJpD`0mJ zD>fKicn{;xcon1JWVP{-NL4CBJD0tNpMe6`7J_i#z=T4 zMvPMlWm}^716kJ_cCYm}_6_S-hH%KFn6(!6DJ@!SFh0nCFyIlxml}ml7S*gZu#c!| zt;JY8O|@C9g7lTJsiTXC&={}M`9kZ9`-FFE3+YQN#?y%^Z5P^Gh4wDWE0V69OE4de z3yb&g!x+^!o0>}R!B51?r54SFDKu`~9OLgrT9mUKR!4-(GOAf;&|IBO`_|2-tLq{i z9b!j#41=+kc@Vh$b<{2zsV;V}ERh5gqls^KMJe*%0k+6-3P6fE98 zRC|YHFsYn!jb)twr>~OEio$XIlxy4K3oi;RCwJl_;#`9a|B;QiyknP z?&n&K?&g0x3GK7Ot7KR!hr#m+JSDQpg#Bq@?-mp8S(*GzjF08Dwlfcm9r@gd-!k2j zc}sF^1v$0_bC=lL{5H+-Y0KPF$k+yY=3$H8K0*!X!O3(H>=rC1{&;XI#cZ``TLs%n zd0W%85^}6O)U-8i@FMhFh~0E?tAj11qH2qF1Ag7{X9G1=r%^+7FfOKx)fRn+NTmlE z#cZ=^Js0v(%G)*kV%%CDO0uHE%Xcj1=Ly@U1+f4=HqGKp3SXSadNHIH5 z=zq)0$y08-o2I+j(t0UNv=Z6O+c}n|wU}i?Qb)->k)gBC`+e`=;P0I8_nZIozR&;i z-Y?%byXsYK^{STG$j(SfezFyiq^H-7`Lm`oRLOR(J8KJNW0VXVLy>H3PIb7F^`jIa z)PP|8V&^OQ*d+t8SEb}FRL2Z@i?Ff?D+_IB$Mw0>6`Ot}x2iDV|BL7q5xt}tR2i*( zctp$7Ct{0UPw(x$`S!=()UNETq^3cZn4yTt@Z*(}q&is+rH(KjO#>1|aM%??_{ z_R!Tq2I>rIVMbc6p1D3amiDS0Y!|1Q1(bo(g7@kQ3!PP!C0SX8RaGU$OUvoI;P+fX zl1kz~6$;|NAn6D~i;j_^oz5^xQcI@uM^V1wxf z*c6R6?4bZQgiP^oXr-`;5;Rl*Q>*!Xkt% z(1v)zAq+kCZ1NFr& zp65;X8$2`6Am?`dqac*JjpizNO5S?3q2AudJoazuy)4V#r)zRyAG~bDNR*7^Bhl`i zjNVqP3t-*S@gd*I3mo)LY%DE`PiI7%<6jC^<^hc}O|g8&H<$X4iW==d*VgDKn5 zsCGM-Qdc{K!*ie4WACM_hPc#D2Rq?V_MnO$pAWlvXnjo|(=|LRJN5D15Vnquj^^2n z(nky(439(H`^^z?G{l?|%YIRctGD+uzP)&)EPJo6X$(DLp6ZHDkQ<@Y|E{aB>0N!HD341Z`=i)7+l`fe31n?JO#bf5pTKUtN&Gc&13K6%E4Z_SHI!C%Di-B zMDiWw11+@N0)az#57MXcqg>&_pnpoB;JWS>)C^@ex>v4sxL;a@1FY2H2}-ocw7oaI zt=+y6Y3#!G*ZA}bQ%)pq$g|fm#~SS~*Vep@iId8EvDv@DZL==}hbqy7q8 z+oo%{gr1bo@F(MV>)O4?yZK~8jDp@$M{=}02Gwe>7qovBD|5x&+i36hrlHf^_Fl20 zU)J)C!8?rfi8ojr=|&f;e*K@I7^po*Yv%jCX0qDh~b&%^aGNWM*kJFUcA+ z#SIyL5Q>sx`;`ktfvO`=VUxIh+!%e5oD_a+NI+fAuTPm2(u&tP-EQ?x z%1%iPc>x(*ji09_DH$w>UQfx4O!!vr6-*6}-OGC;g1S?t;4)`PO=JsbR%$KVLdR2Q zvA}U*Y%;x>9?!;8NBXPm8FG%B68qpkdE2hk)_A4rIJt$ryoK4cf7}Aqg|AwN zk2kZp_9+PIQMUmG?2!>5U#EvBq$fD>w$1%CU&;G`9OExv-byptF(H>}>B@w0ERRNJ zOyyHA!^rCBnT%vr*?C%?I*c9}9Zn}R)~gnsp=*}b)-hod~ zv>1+k5x79GwetFOO`_;btLoSna>yM?8Y; zSAhAzcYv=P_xa`l8&3FqM}eyU_W8Pjai@Jg?I1~72uuO~4ww(@0agH0KlAyTfK|Yq zz|rU65Bv$(4J^VKYH>==!nmdcNiL}fiF^<%fEB=Pz$W0gz@5O+od^K@43oB-=P}i_ zI9#U#Q-IaLe4zd!{DF4@n}AOOcLKiz9tE!Y2L8ZipcdD_{lJu9mn03rV$2880IUFh z4Qv8FfHl7pxC?j`xB**PH}Eu2i#`5+>|iOt_ksC9HTKC0;5c9tun@QtxE6R6_$II$ zsKzd=#eHunFooY4BQ7HVFcnw z;1OU2P=i}j6L2DMC-7b1QQ!kOqq>2A0%|dDuL3htkofIS2mrhStN`A54FQ0wfjfbx zfk%PU|Ahd+S80wtDQ?oIKK{}sNx6ghtyvm{-vs=M{^9c#(M$G`=^H=s`D7JWIGHN%wP z``qVS!lT*4Bc4-D4+|bt%Cv(+Bp&rB_QuZpbOL9Wt0YATbb-#iYqM zvEyWgjHW!u3FL(Q4Y?s#(ssyasRQy7bwL)A=00A!74m(`gH(|day7Xj(O$?S)B(w; z3-W%_%rY@gt990aaHId*Uak1X$NQB(M<{E)Nq;R%$>Gi+Ke6PT&%4t--^Pk)AJWt4 z?0lO(wo=if_vNRTj0;S9FCSGrSbXwhp}Yn6voo}5frmd+O0jQ%f>ejEOR$!*#wp_qS|%PJnsSRds)W-#8ErWpAf z^a-*|ij;2B^2c68k*vgq;?qkEM*qiOf6z*}Fez4wrQ#9;7Qs^`h3q1oEwQOaTPd`3 zEPI}^N@udgR99-iplm8FG=@x9oUu>J&qwHpNYv{j>B|hpy@?9DMQASw?NQ2swrRXV zXA7+XyEXUCqvg;Jzb$gE(B4N|%L-8kR&Frvz&(vWBNdSTBy1*7dbxpJqr7t4(3^aV zz_UpKsZ-b_B+>fvu~s90AII~w0+Jam;gztCPzZTFBKa$&FEOlN7-BR}R}}shPZbW! zDPf_F-K04S4aV2`3kM$2d}*VwDWeBk32}j7-FL2<>E{t)+*dm2Ruya-sbjZCzwAwq+_#4-4P*LVJ!*F0!#1#GD4> z2CJgsZ=Cb&ng2ZwWUNb7rY< zYooWJJt4GFHif<{v=`~Zr6@VZCvn?(n07JQkA6LedgYQ756pA%kB zh+*KLxA?O~@cWaLe2fCpo7^k!L!o`dqR?XJl+FrX68s~=>yqF%r7Oe>g1^qAsl#!v zP^L-(9b95Crt&=cak<#BX9(+wbQNXK7TQ0G$tmWQ#6SLVuRPHNr|?=O_%5+X^9BC` z%~@)2Zs%H+_SXMSLi?8RT7O$9{4T^t#dq7z{H3rrPErE+=hH8OKh}D3>9E1E1OEog zo|&IFZF=Fjv6-#kuT-(tU!KSu)SCKq3BwV-?iriDC|C*R$7ysD>>n`w_~XZkq+e~* zoDu99%3GbOv7p2GVFaXf0p&q$<;2LeRFDT)K(KgEj4NS7QCqO$B(n=WQ|SV zDSFqBk)&T^)A&zR?8<9qvRqmR&VK;qQpcK1O`~0j)<_yxrpEtYTrB0eGAY}YM!Q@Q nnp^*3cDOS8Pv6)=#naoWuf3b828Ghxx`~>Ls}y!9dcgE=>~+l- diff --git a/PA02-0913/StateUtilities.c b/PA02-0913/StateUtilities.c index b26c386..0ed35a7 100644 --- a/PA02-0913/StateUtilities.c +++ b/PA02-0913/StateUtilities.c @@ -9,6 +9,7 @@ const int ITEM_BLOCK_SIZE = 6; const int MAJORITY_BLOCK_SIZE = 10; const char EQUALS = '='; const char PLUS = '+'; +const int TITLE_LENGTH = 38; // functions @@ -105,7 +106,8 @@ Dependencies: as needed void copyArray( StateDataType *dest, const StateDataType *src, int srcSize ) { int currentSize; - // use a for loop to iterate through source array (start at zero, go to srcSize) + // use a for loop to iterate through source array + // (start at zero, go to srcSize) for(currentSize = 0; currentSize < srcSize; currentSize++) { // copy each element from the array to the new array. @@ -243,20 +245,25 @@ void displayData( const StateDataType *array, int size, const char *subTitle ) // print PIPE character printCharacter(PIPE); // print state name justified left - printStringJustified(array[countStates].name, NAME_BLOCK_SIZE, "LEFT"); + printStringJustified(array[countStates].name, + NAME_BLOCK_SIZE, "LEFT"); // print PIPE character printCharacter(PIPE); // print population justified right - printIntegerJustified(array[countStates].population, POPULATION_BLOCK_SIZE, "RIGHT"); + printIntegerJustified(array[countStates].population, + POPULATION_BLOCK_SIZE, "RIGHT"); // print PIPE character printCharacter(PIPE); - // print growth justified right, need a % sign too. (requires some math trickery to make work) - printDoubleJustified(array[countStates].growth * 100.00, PRECISION_2, GROWTH_BLOCK_SIZE - 2, "RIGHT"); + // print growth justified right, need a % sign too. + //(requires some math trickery to make work) + printDoubleJustified(array[countStates].growth * 100.00, + PRECISION_2, GROWTH_BLOCK_SIZE - 2, "RIGHT"); printCharacter('%'); printCharacter(SPACE); // print PIPE character printCharacter(PIPE); - // print majority justified center, also requires some math trickery to make work + // print majority justified center, + // also requires some math trickery to make work printCharacters((MAJORITY_BLOCK_SIZE - 1) / 2, SPACE); printCharacter(SPACE); printCharacter(array[countStates].majority); @@ -357,7 +364,7 @@ bool removeStateByName( StateDataType *removedElement, { bool stateNameFound; int removeCount; - int stateNameFoundFlag = 0; + bool stateNameFoundFlag = false; // use the findStateByName to search stateNameFound = findStateByName(removedElement, array, *size, searchVal); // iterate through array @@ -366,11 +373,13 @@ bool removeStateByName( StateDataType *removedElement, // for(removeCount = 0; removeCount < *size; removeCount++) { - if(strcmp(array[removeCount].name, removedElement->name) == 0 || stateNameFoundFlag == 1) + if(strcmp(array[removeCount].name, removedElement->name) == 0 || + stateNameFoundFlag == 1) { // set the flag to signify found value - stateNameFoundFlag = 1; - // remove the element by copying the next element into last slot until end + stateNameFoundFlag = true; + // remove the element by copying + // the next element into last slot until end deepCopy(&array[removeCount], array[removeCount + 1]); } } @@ -495,7 +504,7 @@ void showTitle() // print endline printEndline(); // use console io utilities to display 38 '=' - printCharacters(38, '='); + printCharacters(TITLE_LENGTH, EQUALS); // print an endline printEndline(); // no return, void @@ -515,13 +524,13 @@ Dependencies: as needed void swapElements( StateDataType *array, int leftIndex, int rightIndex ) { // create StateDataType temp to store swapped element - StateDataType *storeElement; + StateDataType storeElement; // use deepCopy to copy out swapped element - deepCopy(storeElement, array[leftIndex]); + deepCopy(&storeElement, array[leftIndex]); // use deepCopy to move the other element, deepCopy(&array[leftIndex], array[rightIndex]); // use deepCopy to copy the temp element to the other element - deepCopy(&array[rightIndex], *storeElement); + deepCopy(&array[rightIndex], storeElement); // updated the array // no return, void } @@ -544,63 +553,46 @@ Dependencies: as needed int uploadStateData( StateDataType *StateDataArray, int capacity, const char *fileName ) { - //printf("\nUploading Data?\n"); // setup a counter and other variables int stateCount = 0; - StateDataType *stateUpload; + StateDataType stateUpload; bool fileOpenCheck; char currentString[STD_STR_LEN]; - int populationUpload; - double growthUpload; - char majorityUpload; + // int populationUpload; + // double growthUpload; + // char majorityUpload; setEmptyElementData(&stateUpload); // open file fileOpenCheck = openInputFile(fileName); - //printf("\nOPENS FILE\n"); if(fileOpenCheck) { - //printf("\nCHECKED FILE\n"); - // read in the four strings/starting line (use readStringToLineEndFromFile) + // read in the four strings/starting line + // (use readStringToLineEndFromFile) readStringToLineEndFromFile(currentString); - // readStringToDelimiterFromFile(COMMA, currentString); - // readStringToDelimiterFromFile(COMMA, currentString); - // readStringToDelimiterFromFile(COMMA, currentString); - // readStringToDelimiterFromFile(COMMA, currentString); while(!checkForEndOfInputFile()) { - //printf("\nIN WHILE\n"); // repeat these steps: (use readStringToDelimiterFromFile) // read in the state name, store - //printf("\nReadingString\n"); readStringToDelimiterFromFile(COMMA, currentString); - //printf("\nReadString\n"); - //printf("\nCopy String\n"); - strcpy(stateUpload->name, currentString); - //printf("\nCopied String\n"); + strcpy(stateUpload.name, currentString); // read in the population, store (cast from string to int) - readStringToDelimiterFromFile(COMMA, currentString); - // find a way to cast string to int, sscanf might work best. - sscanf(currentString, "%d", &populationUpload); - stateUpload->population = populationUpload; + stateUpload.population = readIntegerFromFile(); + readCharacterFromFile(); // read in the growth, store (cast from string to double) - readStringToDelimiterFromFile(COMMA, currentString); - // find a way to cast string to double, using sscanf. - sscanf(currentString, "%lf", &growthUpload); - stateUpload->growth = growthUpload; + stateUpload.growth = readDoubleFromFile(); // read in the majority, store - readStringToDelimiterFromFile(COMMA, currentString); - // get the first character of currentString - majorityUpload = currentString[0]; - stateUpload->majority = majorityUpload; - // use the addElementFromData function to add the data to array - addElementFromData(StateDataArray, &stateCount, capacity, stateUpload->name, stateUpload->population, stateUpload->growth, stateUpload->majority); + readCharacterFromFile(); + stateUpload.majority = readCharacterFromFile(); + // use the addElementFromElement function to add the data to array + addElementFromElement(StateDataArray, &stateCount, + capacity, stateUpload); // do until end of the file is reached. } } else { // error out - printf("\nThe file you referenced either does not exist, or inadequate file permissions to access.\n"); + printf("\nThe file you referenced does not exist.\n"); } // return counter return stateCount; diff --git a/PA02-0913/build/Debug/outDebug b/PA02-0913/build/Debug/outDebug index bcf7d1c6b8fa4f84e4baad0dc49e5dd43211c454..0db706fa7dc7c370d095ee70844883583e4a08d5 100755 GIT binary patch delta 12062 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 delta 12061 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 Vf|ZwQ5&Dl))%t@(xp*%b@c$>A1