fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 21
  5. #define MAX_ELEM 8
  6. #define SCORE 12
  7. #define NUM_SKATER 4
  8. #define BASE 3.1
  9.  
  10. typedef struct{
  11. char name[MAX];
  12. int elements;
  13. float baseval[MAX_ELEM];
  14. int score[MAX_ELEM][SCORE];
  15. float total_base;
  16. float tech_score;
  17. float total_score;
  18. }SKATER;
  19.  
  20. int getData(SKATER skater[NUM_SKATER]);
  21. void calcData(SKATER skater[NUM_SKATER]);
  22. void insertSort(SKATER skater[NUM_SKATER], int num);
  23. void printData(SKATER skater[]);
  24.  
  25. int main (void)
  26. {
  27. // Global Declarations
  28. SKATER skater[NUM_SKATER];
  29. int num;
  30.  
  31. // Funtion calls
  32. num = getData(skater);
  33. calcData(skater);
  34. insertSort(skater, NUM_SKATER);
  35. printData(skater);
  36. return 0;
  37. }
  38.  
  39. /********************************* getData ************************************
  40. Pre:
  41. Post:
  42. */
  43. int getData(SKATER skater[NUM_SKATER])
  44. {
  45. // LOcal Declarations
  46. FILE* fpIn;
  47. int i = 0;
  48. int k;
  49. int j;
  50. char buffer[256];
  51.  
  52. // Statements
  53. if((fpIn = fopen("lab6data.txt","r"))==NULL)
  54. {
  55. printf("File opening error");
  56. system("PAUSE");
  57. exit(100);
  58. }
  59.  
  60. while(i < NUM_SKATER && fgets(buffer, sizeof(buffer) - 1, fpIn))
  61. {
  62. sscanf(buffer,"%*c%19[^0123456789]", skater[i].name);
  63. for(k = 0; k < MAX_ELEM; k++)
  64. {
  65. if(fgets(buffer, sizeof(buffer)-1, fpIn) != NULL)
  66. {
  67. sscanf(buffer,"%d %f", &skater[i].elements, &skater[i].baseval[k]);
  68. for(j = 0; j < SCORE; j++)
  69. {
  70. sscanf(buffer,"%d", &skater[i].score[k][j]);
  71. }
  72. }
  73. }
  74.  
  75. i++;
  76. }
  77.  
  78. system("PAUSE");
  79. fclose(fpIn);
  80.  
  81. return i;
  82. }
  83.  
  84. /* ****************************** calcData *******************************
  85. Pre:
  86. Post:
  87. */
  88. void calcData(SKATER skater[NUM_SKATER])
  89. {
  90. //Local Declaration
  91. int i,j,k;
  92. int smallest, largest;
  93. int temp = 0;
  94. float temp_baseval = 0;
  95. float temp_score = 0;
  96. float total;
  97.  
  98. //Statements
  99. for(i=0; i< NUM_SKATER; i++)
  100. {
  101. for(j=0; j< MAX_ELEM; j++)
  102. {
  103. smallest = skater[i].score[j][0];
  104. largest = skater[i].score[j][SCORE-1];
  105.  
  106. for(k=0; k< SCORE; k++)
  107. {
  108. temp += skater[i].score[j][k]; //adds total scores
  109.  
  110. if(smallest > skater[i].score[j][k])
  111. smallest = skater[i].score[j][k];
  112. else if(largest < skater[i].score[j][k])
  113. largest = skater[i].score[j][k];
  114. }
  115.  
  116. //total scores minus largest and smallest
  117. total = (float)(temp - (largest+smallest)) / (float)SCORE;
  118. temp = 0;
  119.  
  120. //calculates result on the basis of baseval <= or > than 3.1
  121. if(skater[i].baseval[j] <= BASE)
  122. skater[i].total_score = (float)(.5 * total) + skater[i].baseval[j];
  123. else
  124. skater[i].total_score = total + skater[i].baseval[j];
  125.  
  126. temp_baseval += skater[i].baseval[j]; //sums up baseval
  127. temp_score += skater[i].total_score; //sums up technical score
  128. }
  129.  
  130. skater[i].tech_score = temp_score;
  131. skater[i].total_base = temp_baseval;
  132.  
  133. temp_baseval=0;
  134. temp_score=0;
  135. }
  136.  
  137.  
  138. return;
  139. }
  140.  
  141. /* ==================== insertSort ====================
  142. Sorts list using Insertion Sort. Thes list is divided into sorted
  143. and unsorted list. With each pass the first elemnt in unsorted list
  144. is inserted in sortedlist.
  145.  
  146. Pre SKATER skater is a structure
  147. Post returns sorted structure based on highest technical score
  148. */
  149.  
  150. void insertSort(SKATER skater[NUM_SKATER], int num)
  151. {
  152.  
  153. //Local Declaration
  154. int loc;
  155. SKATER temp;
  156. SKATER *pCurr;
  157. SKATER *pWalk;
  158. SKATER *pLast;
  159.  
  160. //Statements
  161. for(pCurr = skater + 1, pLast = skater + num-1;
  162. pCurr <= pLast;
  163. pCurr++)
  164. {
  165. loc = 0;
  166. temp = *pCurr;
  167.  
  168. for(pWalk = pCurr -1;
  169. pWalk >= skater && !loc;)
  170.  
  171. //compares the tech scores of swimmers
  172. if(temp.tech_score > pWalk->tech_score)
  173. {
  174. *(pWalk+1) = *pWalk;
  175. pWalk--;
  176. }
  177. else
  178. loc = 1;
  179. *(pWalk+1) = temp;
  180. }
  181.  
  182. return;
  183. }
  184.  
  185. /* ****************************** printData *******************************8
  186. Pre:
  187. Post:
  188. */
  189. void printData(SKATER skater[])
  190. {
  191. //Local Declaration
  192. FILE*fpOut;
  193. int i,j,k;
  194.  
  195. //Statements
  196. if(!(fpOut=fopen("output.txt", "w")))
  197. printf("CANT OPENT output.txt");
  198.  
  199. printf("Calculating.....\n");
  200. printf("DONE see output.txt\n"); //checks to see if output.txt opens
  201.  
  202. fprintf(fpOut,"NAME: LAB#6 EMAIL: \n\n");
  203. fprintf(fpOut,"EVENT: MEN SHORT PROGRAM\n");
  204. fprintf(fpOut,"CHIEF ACCOUNTANT: \n\n");
  205.  
  206.  
  207. for(i=0; i<NUM_SKATER; i++)
  208. {
  209. fprintf(fpOut,"SKATER: %s\n\n", skater[i].name);
  210. fprintf(fpOut,"[BASE] [SCORE] [TOTAL]\n");
  211. fprintf(fpOut,"---------------------------------------------------------------\n");
  212. for(j=0; j<MAX_ELEM; j++)
  213. {
  214. fprintf(fpOut,"%5.2f ", skater[i].baseval[j]);
  215. for(k=0; k<SCORE; k++)
  216. {
  217. fprintf(fpOut,"%3d ", skater[i].score[j][k]);
  218. }
  219. fprintf(fpOut," %5.2f", skater[i].total_score);
  220. fprintf(fpOut,"\n");
  221. }
  222.  
  223. fprintf(fpOut,"---------------------------------------------------------------\n");
  224. fprintf(fpOut,"Total Base: %5.2f Total Technical Score: %5.2f",
  225. skater[i].total_base, skater[i].tech_score);
  226.  
  227. fprintf(fpOut,"\n\n\n");
  228. }
  229.  
  230. return;
  231. }
  232.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty