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