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