Annotation of capa/capa51/Historic/capa_stats.c, revision 1.1
1.1 ! albertel 1: #include <stdio.h>
! 2: #include <string.h>
! 3: #include <math.h>
! 4: #include <ctype.h>
! 5: #ifdef __sun
! 6: #include <unistd.h>
! 7: #endif
! 8: #ifdef NeXT
! 9: #include <sys/file.h>
! 10: #endif
! 11: #include <stdlib.h>
! 12:
! 13: /*--------------------------------------------------------------*/
! 14: /* Constant Values for "hgr*.out". */
! 15: /*--------------------------------------------------------------*/
! 16: #define MAX_SECTION_NUMBER 3 /* maximum number of char for section number */
! 17: #define MAX_STUDENT_NUMBER 9 /* maximum number of char for student number */
! 18: #define MAX_STUDENT_NAME 30 /* maximum number of char for student name */
! 19: #define MAX_PROBLEM_NUMBER 150 /* maximum number of problems in a set */
! 20: #define FILE_NAME_LENGTH 256 /* maximum length of file name */
! 21: #define MAX_CLASS_SIZE 1024 /* maximum number of students in a class */
! 22:
! 23:
! 24: /*--------------------------------------------------------------*/
! 25: /* Constant Values for "set*.db". */
! 26: /*--------------------------------------------------------------*/
! 27: #define MAX_TRIES 100 /* tries 0..99 */
! 28:
! 29:
! 30: /*--------------------------------------------------------------*/
! 31: /* One line of record in "hgr*.out". */
! 32: /*--------------------------------------------------------------*/
! 33: typedef struct{
! 34: char section[MAX_SECTION_NUMBER+1];
! 35: char s_number[MAX_STUDENT_NUMBER+1];
! 36: char s_name[MAX_STUDENT_NAME+1];
! 37: char problem_number[MAX_PROBLEM_NUMBER];
! 38: char problem_score[MAX_PROBLEM_NUMBER];
! 39: } HGR_record;
! 40:
! 41: int GradedProblems=0; /* The number of problems in a HG'd record */
! 42: int NumberOfUpdates=0; /* The number of records need updated in hgr*.db */
! 43: int NumberOfProblems=0;
! 44: char *progname;
! 45: HGR_record hgr_record[MAX_CLASS_SIZE];
! 46:
! 47:
! 48: /*--------------------------------------------------------------*/
! 49: /* One line of record in "set*.out". */
! 50: /*--------------------------------------------------------------*/
! 51: typedef struct{
! 52: int valid; /* if a registered student */
! 53: char s_number[MAX_STUDENT_NUMBER+1]; /* student number */
! 54: char answer[MAX_PROBLEM_NUMBER]; /* a string of answers */
! 55: char tries[3*MAX_PROBLEM_NUMBER];
! 56: } SET_record;
! 57:
! 58: char line1[512],line2[512],line3[512]; /* The first three lines in set*.db */
! 59: int NumberOfStudents=0; /* Number of students in set*.db */
! 60: int ValidStudents=0; /* No. of Valid students in set*.db */
! 61: SET_record set_record[MAX_CLASS_SIZE];
! 62:
! 63:
! 64: /*--------------------------------------------------------------*/
! 65: /* */
! 66: /* Statistics for the number of tries in "set*.db". */
! 67: /* */
! 68: /*--------------------------------------------------------------*/
! 69: int s[MAX_PROBLEM_NUMBER][MAX_TRIES];
! 70: int t[MAX_CLASS_SIZE][MAX_PROBLEM_NUMBER];
! 71: int YesCnt[MAX_PROBLEM_NUMBER];
! 72: int yesCnt[MAX_PROBLEM_NUMBER];
! 73: int correct[MAX_PROBLEM_NUMBER];
! 74: int Weight[MAX_PROBLEM_NUMBER];
! 75: int TotalTries[MAX_PROBLEM_NUMBER];
! 76:
! 77: typedef struct{
! 78: int total;
! 79: int score[MAX_PROBLEM_NUMBER];
! 80: }Student;
! 81:
! 82: int GuyNumberOfStudents;
! 83: Student student[MAX_CLASS_SIZE];
! 84: #define PARTIAL 0
! 85: #define NOPARTIAL 1
! 86: /*--------------------------------------------------------------*/
! 87: /* */
! 88: /* */
! 89: /*--------------------------------------------------------------*/
! 90: void usage()
! 91: {
! 92: printf("USAGE: %s [-s set] [-t LargeTry] [-n NumberLargeTry]\n", progname);
! 93: }
! 94:
! 95:
! 96:
! 97: /*--------------------------------------------------------------*/
! 98: /* */
! 99: /* Return the maximum score of a problem. */
! 100: /* */
! 101: /*--------------------------------------------------------------*/
! 102: int Problem_Score(score_ptr,problem_number)
! 103: char *score_ptr;
! 104: char problem_number;
! 105: {
! 106: char *tmp_ptr;
! 107: char score;
! 108:
! 109: tmp_ptr=strchr(score_ptr,problem_number);
! 110: tmp_ptr=tmp_ptr+2;
! 111: sscanf(tmp_ptr, "%c", &score);
! 112: return(score-'0');
! 113: }
! 114:
! 115:
! 116: /*--------------------------------------------------------------*/
! 117: /* */
! 118: /* Check if the list of scores is valid */
! 119: /* */
! 120: /*--------------------------------------------------------------*/
! 121: int Valid_Score(scorelist,score_ptr)
! 122: char *scorelist;
! 123: char *score_ptr;
! 124: {
! 125: char *problem;
! 126: int score=-1;
! 127: int value=1;
! 128:
! 129: GradedProblems=0;
! 130: problem = scorelist;
! 131: while (*problem == '('){
! 132: GradedProblems++;
! 133: problem++;
! 134: score=Problem_Score(score_ptr,*problem);
! 135: problem=problem+2;
! 136: if (*problem != '*'&&((*problem-'0')>score)){
! 137: value=0;
! 138: }
! 139: problem=problem+3;
! 140: }
! 141: return(value);
! 142: }
! 143:
! 144: /*--------------------------------------------------------------*/
! 145: /* */
! 146: /* Open the hand graded file "./record/set`set`.out", */
! 147: /* and return the file pointer. */
! 148: /* */
! 149: /*--------------------------------------------------------------*/
! 150: FILE *Open_Read(filename)
! 151: char filename[FILE_NAME_LENGTH];
! 152: {
! 153: FILE *fp;
! 154:
! 155: if ((fp=fopen(filename,"r"))==NULL) {
! 156: printf("Error: can't open %s\n",filename);
! 157: exit(1);
! 158: }
! 159: return(fp);
! 160: }
! 161:
! 162: /*--------------------------------------------------------------*/
! 163: /* */
! 164: /* Open the hand graded file "./record/set`set`.out", */
! 165: /* and return the file pointer. */
! 166: /* */
! 167: /*--------------------------------------------------------------*/
! 168: FILE *Open_Write(filename)
! 169: char filename[FILE_NAME_LENGTH];
! 170: {
! 171: FILE *fp;
! 172:
! 173: if ((fp=fopen(filename,"w"))==NULL) {
! 174: printf("Error: can't open %s\n",filename);
! 175: exit(1);
! 176: }
! 177: return(fp);
! 178: }
! 179:
! 180:
! 181: int studentCompare(const void *a,const void *b)
! 182: {
! 183: Student *voida,*voidb;
! 184: voida=(Student *)a;
! 185: voidb=(Student *)b;
! 186: if (voida->total < voidb->total)
! 187: return 1;
! 188: if (voida->total > voidb->total)
! 189: return -1;
! 190: return 0;
! 191: }
! 192:
! 193: /*--------------------------------------------------------------*/
! 194: /* */
! 195: /* */
! 196: /*--------------------------------------------------------------*/
! 197: void Read_Record(fp_set)
! 198: FILE *fp_set;
! 199: {
! 200: int count,i,j;
! 201: int done,len;
! 202: int problem;
! 203: int problem_cnt;
! 204: char fmtbuf[128];
! 205: char nextline[512];
! 206: char temp;
! 207:
! 208: fgets(line1,511,fp_set);
! 209: sscanf(line1,"%d",&problem_cnt);
! 210:
! 211: fgets(line2,511,fp_set);
! 212: len=strlen(line2); /* weight line */
! 213: for(i=0;i<problem_cnt;i++) {
! 214: Weight[i] = line2[i] - '0'; /* put weight into a global array */
! 215: }
! 216:
! 217: fgets(line3,511,fp_set); /* get rid of hand grading line */
! 218: /* here problem_cnt should be the same as NumberOfProblems */
! 219: NumberOfProblems=strlen(line2)-1;
! 220: sprintf(fmtbuf,"%%%dc %%%dc%%%dc",
! 221: MAX_STUDENT_NUMBER, NumberOfProblems+1, 3*NumberOfProblems);
! 222:
! 223: done=0;
! 224: count=0;
! 225: while (!done){
! 226: done=!fgets(nextline,511,fp_set);
! 227: len=strlen(nextline);
! 228: if (!done){
! 229: count++;
! 230: sscanf(nextline, fmtbuf,
! 231: set_record[count].s_number,
! 232: set_record[count].answer,
! 233: set_record[count].tries);
! 234: /* printf("(%s) (%s) (%s)\n",
! 235: set_record[count].s_number,
! 236: set_record[count].answer,
! 237: set_record[count].tries); */
! 238: set_record[count].valid=0;
! 239: for (i=0;i<NumberOfProblems;i++){
! 240: if (set_record[count].answer[i]!='-')
! 241: set_record[count].valid=1;
! 242: }
! 243: }
! 244: }
! 245: NumberOfStudents=count;
! 246: printf("%d",NumberOfStudents);
! 247: fclose(fp_set);
! 248:
! 249: for(j=0,i=0;i<NumberOfStudents;j++,i++)
! 250: {
! 251: for(problem=0;problem<NumberOfProblems;problem++)
! 252: {
! 253: temp=set_record[i].answer[problem];
! 254: switch (temp)
! 255: {
! 256: case 'y':
! 257: case 'Y':
! 258: student[j].score[problem]=Weight[problem];
! 259: student[j].total+=Weight[problem];
! 260: break;
! 261: case 'n':
! 262: case 'N':
! 263: student[j].score[problem]=0;
! 264: break;
! 265: default:
! 266: if (isdigit(temp))
! 267: {
! 268: student[j].score[problem]=temp-'0';
! 269: student[j].total+=student[j].score[problem];
! 270: }
! 271: else
! 272: {
! 273: student[j].score[problem]=0;
! 274: student[j].total+=student[j].score[problem];
! 275: fprintf(stderr,"Invalid score for student ");
! 276: fprintf(stderr,"%s, problem",set_record[i].s_number);
! 277: fprintf(stderr,"%d, score == ",problem);
! 278: fprintf(stderr,"%c skipping them\n",temp);
! 279: j--;
! 280: goto skip_student;
! 281: }
! 282: }
! 283: }
! 284: skip_student: j=j;
! 285: }
! 286: GuyNumberOfStudents=j;
! 287: qsort((char *)student,GuyNumberOfStudents,sizeof(Student),studentCompare);
! 288: }
! 289:
! 290:
! 291:
! 292: /*--------------------------------------------------------------*/
! 293: /* */
! 294: /* t[i][j]: the number of tries for the `i`th student, the */
! 295: /* `j`th problem in set*.db file. */
! 296: /* t[i][*]=set_record[i].tries */
! 297: /* s[i][j]: the number of students who work on the `i`th */
! 298: /* problem for `j` tries. */
! 299: /* */
! 300: /*--------------------------------------------------------------*/
! 301: void Sort_By_Tries()
! 302: {
! 303: int i,j,try;
! 304: char *tmp;
! 305:
! 306: /* initialization */
! 307: for (i=0;i<MAX_PROBLEM_NUMBER;i++){
! 308: YesCnt[i] = 0;
! 309: yesCnt[i] = 0;
! 310: correct[i] = 0;
! 311: TotalTries[i]=0;
! 312: for (j=0; j<MAX_TRIES; j++){
! 313: s[i][j]=0;
! 314: }
! 315: for (j=0;j<MAX_CLASS_SIZE;j++){
! 316: t[j][i]=0;
! 317: }
! 318: }
! 319:
! 320: for (i=0;i<NumberOfStudents;i++){
! 321: tmp=set_record[i].tries;
! 322: for (j=0; j<NumberOfProblems; j++){
! 323: sscanf(tmp+3*j,"%d,",&try);
! 324: if ((try>=0) && (try <=99)){
! 325: s[j][try]++;
! 326: t[i][j]=try;
! 327: TotalTries[j]=TotalTries[j]+try;
! 328: }
! 329: }
! 330: }
! 331:
! 332: }
! 333:
! 334:
! 335: double GetDegreeOfDiscrim(int problem,int mode)
! 336: {
! 337: int i,numTopRight=0,numBottomRight=0,twentySevenPercent;
! 338: double dd;
! 339:
! 340: twentySevenPercent=(int)ceil(.27*(double)GuyNumberOfStudents);
! 341: for(i=0;i<twentySevenPercent;i++)
! 342: {
! 343: switch (mode)
! 344: {
! 345: case PARTIAL:
! 346: if (student[i].score[problem] > 0) { numTopRight++; }
! 347: if (student[GuyNumberOfStudents-i].score[problem]>0){numBottomRight++;}
! 348: break;
! 349: case NOPARTIAL:
! 350: if (student[i].score[problem] == Weight[problem]) { numTopRight++; }
! 351: if (student[GuyNumberOfStudents-i].score[problem] == Weight[problem])
! 352: { numBottomRight++; }
! 353: break;
! 354: }
! 355: }
! 356: dd=(((((double)numTopRight)/((double)twentySevenPercent))-
! 357: (((double)numBottomRight)/((double)twentySevenPercent))));
! 358: return 100.0*dd;
! 359: }
! 360:
! 361: double GetDifficulty(int problem, int mode)
! 362: {
! 363: int i,numWrong=0;
! 364: for(i=0;i<GuyNumberOfStudents;i++)
! 365: {
! 366: switch(mode)
! 367: {
! 368: case PARTIAL:
! 369: if (student[i].score[problem] == 0) { numWrong++; }
! 370: break;
! 371: case NOPARTIAL:
! 372: if (student[i].score[problem] < Weight[problem]) { numWrong++; }
! 373: break;
! 374: }
! 375: }
! 376: return (100.0*((double)numWrong/(double)GuyNumberOfStudents));
! 377: }
! 378:
! 379: #define MAXSCORE 58
! 380: void doScoreHistogram(void)
! 381: {
! 382: int hist[MAXSCORE],i,numGoneBy=0;
! 383: for(i=0;i<MAXSCORE;i++)
! 384: hist[i]=0;
! 385: for(i=0;i<GuyNumberOfStudents;i++)
! 386: {
! 387: hist[student[i].total]++;
! 388: }
! 389: printf("Scr Num Tot\n");
! 390: for(i=0;i<MAXSCORE;i++)
! 391: {
! 392: numGoneBy+=hist[i];
! 393: printf("%3d %3d %3d\n",i,hist[i],numGoneBy);
! 394: }
! 395: }
! 396:
! 397: /*--------------------------------------------------------------*/
! 398: /* */
! 399: /* This is only used to print out the statistics in s[][], */
! 400: /* which stores the number of occurences in a form of */
! 401: /* s[problem_number-1][tries]. This is not normally used. */
! 402: /* For a global view only. */
! 403: /* */
! 404: /*--------------------------------------------------------------*/
! 405: void Print_moment(avg,sd,sd3,m,students)
! 406: float avg[MAX_PROBLEM_NUMBER];
! 407: float sd[MAX_PROBLEM_NUMBER];
! 408: float sd3[MAX_PROBLEM_NUMBER];
! 409: int m[MAX_PROBLEM_NUMBER];
! 410: int students[MAX_PROBLEM_NUMBER];
! 411: {
! 412: int i;
! 413: float dod,disP,disNP,difP,difNP;
! 414:
! 415: printf("\nThis is the statistics for each problem:\n");
! 416: printf("Prob# MxTries avg. s.d. s.k. #Stdnts ");
! 417: printf(" #Yes #yes Tries DoDiff Dis(P) Dif(P) Dis(NP) Dif(NP)\n");
! 418: for (i=0;i<NumberOfProblems;i++){
! 419: dod=1.0-((float)(YesCnt[i]+yesCnt[i]+correct[i])/(float)TotalTries[i]);
! 420: disP=GetDegreeOfDiscrim(i,PARTIAL);
! 421: difP=GetDifficulty(i,PARTIAL);
! 422: disNP=GetDegreeOfDiscrim(i,NOPARTIAL);
! 423: difNP=GetDifficulty(i,NOPARTIAL);
! 424: printf("P %2d:",i+1);
! 425: printf("%7d %8.2f %7.2f %6.2f %5d %5d %5d %5d %5.2f %5.2f %5.2f %6.2f %6.2f",
! 426: m[i],avg[i],sd[i],sd3[i],students[i],YesCnt[i],yesCnt[i],
! 427: TotalTries[i],dod,disP,difP,disNP,difNP);
! 428: printf("\n");
! 429: }
! 430: doScoreHistogram();
! 431: }
! 432:
! 433:
! 434: /*--------------------------------------------------------------*/
! 435: /* */
! 436: /* This is only used to print out the statistics in s[][], */
! 437: /* which stores the number of occurences in a form of */
! 438: /* s[problem_number-1][tries]. This is not normally used. */
! 439: /* For a global view only. */
! 440: /* */
! 441: /*--------------------------------------------------------------*/
! 442: void Print_Tries()
! 443: {
! 444: int i,j;
! 445:
! 446: printf("\nThis is the sumary of tries:\n");
! 447: for (i=0;i<NumberOfProblems;i++){
! 448: printf("P %d:",i+1);
! 449: for (j=0; j<MAX_TRIES; j++)
! 450: if (s[i][j]!=0)
! 451: printf("%d( %d) ",j,s[i][j]);
! 452: printf("\n");
! 453: }
! 454: }
! 455:
! 456: /*--------------------------------------------------------------*/
! 457: /* */
! 458: /* This is only used to print out the statistics in s[][], */
! 459: /* which stores the number of occurences in a form of */
! 460: /* s[problem_number-1][tries]. This is not normally used. */
! 461: /* For a global view only. */
! 462: /* */
! 463: /*--------------------------------------------------------------*/
! 464:
! 465: void Average_Tries()
! 466: {
! 467: float avg[MAX_PROBLEM_NUMBER];
! 468: float sd[MAX_PROBLEM_NUMBER];
! 469: float sd3[MAX_PROBLEM_NUMBER];
! 470: int students[MAX_PROBLEM_NUMBER];
! 471: int m[MAX_PROBLEM_NUMBER];
! 472: int i,j;
! 473: float tmp1,tmp2;
! 474: float sum;
! 475:
! 476: /* max tries for each problem */
! 477: for (i=0;i<NumberOfProblems;i++){
! 478: m[i]=0;
! 479: for (j=0;j<NumberOfStudents;j++){
! 480: if (t[j][i]>m[i]){
! 481: m[i]=t[j][i];
! 482: }
! 483: }
! 484: }
! 485: for (i=0;i<NumberOfStudents;i++){
! 486: if (set_record[j].valid){
! 487: ValidStudents++;
! 488: }
! 489: }
! 490:
! 491: /* first moment */
! 492: for (i=0;i<NumberOfProblems;i++){
! 493: avg[i]=0.0; /* initialization */
! 494: students[i]=0;
! 495: for (j=1;j<NumberOfStudents;j++){
! 496: if (set_record[j].valid){
! 497: avg[i]=avg[i]+t[j][i]; /* sumation actually */
! 498: students[i]=students[i]+1;
! 499: }
! 500: }
! 501: avg[i]=avg[i]/students[i]; /* real average */
! 502: }
! 503:
! 504: /* second moment */
! 505: for (i=0;i<NumberOfProblems;i++){
! 506: sd[i]=0.0;
! 507: sum=0.0;
! 508: for (j=0;j<NumberOfStudents;j++){
! 509: if (set_record[j].valid){
! 510: tmp1=(float)t[j][i];
! 511: tmp2=(tmp1-avg[i])*(tmp1-avg[i]);
! 512: sum=sum+tmp2;
! 513: }
! 514: sd[i]=sum/(float)(students[i]-1);
! 515: sd[i]=sqrt((double) sd[i]);
! 516: }
! 517: }
! 518:
! 519: /* third moment, skewness */
! 520: for (i=0;i<NumberOfProblems;i++){
! 521: sd3[i]=0.0;
! 522: sum=0.0;
! 523: for (j=0;j<NumberOfStudents;j++){
! 524: if (set_record[j].valid){
! 525: tmp1=(float)t[j][i];
! 526: tmp2=(tmp1-avg[i])*(tmp1-avg[i])*(tmp1-avg[i]);
! 527: sum=sum+tmp2;
! 528: }
! 529: sd3[i]=sum/(float)(students[i]);
! 530: sd3[i]=sd3[i]/(sd[i]*sd[i]*sd[i]);
! 531: }
! 532: }
! 533: Print_moment(avg,sd,sd3,m,students); /* print mean, sd, skewness */
! 534: }
! 535:
! 536: /*--------------------------------------------------------------*/
! 537: /* */
! 538: /* */
! 539: /*--------------------------------------------------------------*/
! 540: void Percentage_Scores(set)
! 541: int set;
! 542: {
! 543: int i,j;
! 544: int total_weight = 0,
! 545: total_scores=0;
! 546: float percentage;
! 547:
! 548: for (i=0;i<NumberOfStudents;i++){
! 549: if (set_record[i].valid){
! 550: for (j=0;j<NumberOfProblems;j++){
! 551: total_weight = total_weight+Weight[j];
! 552: switch (set_record[i].answer[j]){
! 553: case 'Y': YesCnt[j] = YesCnt[j]+1;
! 554: total_scores = total_scores + Weight[j];
! 555: break;
! 556: case 'y': yesCnt[j] = yesCnt[j]+1;
! 557: total_scores = total_scores + Weight[j];
! 558: break;
! 559: default : if (set_record[i].answer[j] >= '0' &&
! 560: set_record[i].answer[j] <= '9' ) {
! 561: correct[i]=correct[i]+1;
! 562: total_scores=total_scores+(set_record[i].answer[j]-'0');
! 563: }
! 564: break;
! 565: }
! 566: }
! 567: }
! 568: }
! 569:
! 570: percentage = (float)total_scores / (float)total_weight;
! 571: percentage = percentage * 100.0;
! 572: printf("\nThe percentage score for set%d.db is %7.2f%%\n",set,percentage);
! 573: /*printf("Total Number of Students in set%d.db is %d\n",set,ValidStudents);*/
! 574:
! 575: }
! 576:
! 577: /*--------------------------------------------------------------*/
! 578: /* */
! 579: /* */
! 580: /*--------------------------------------------------------------*/
! 581: void Large_Tries(LargeTry, NumberLargeTry)
! 582: int LargeTry, NumberLargeTry;
! 583: {
! 584: int i,j;
! 585: int count;
! 586: int credit; /* Number of credits should be taken off */
! 587:
! 588:
! 589: printf("\nHere is a list of students who have %d tries more than %d times: \n\n", LargeTry, NumberLargeTry);
! 590:
! 591: for (i=0;i<NumberOfStudents;i++){
! 592: count=0;
! 593: credit=0;
! 594: for (j=0;j<NumberOfProblems;j++){
! 595: if (t[i][j]>=LargeTry){
! 596: count++;
! 597: if (set_record[i].answer[j]=='Y' ||
! 598: set_record[i].answer[j]=='y')
! 599: credit ++;
! 600: }
! 601: }
! 602: if (count >= NumberLargeTry){
! 603: printf("(%d) %s \n",credit, set_record[i].s_number);
! 604: printf("%s %s \n", set_record[i].answer, set_record[i].tries);
! 605: }
! 606: }
! 607:
! 608: }
! 609:
! 610: /*--------------------------------------------------------------*/
! 611: /* */
! 612: /* */
! 613: /*--------------------------------------------------------------*/
! 614: int main(argc,argv)
! 615: int argc;
! 616: char *argv[];
! 617:
! 618: {
! 619:
! 620: int set=1;
! 621: int inputNotOK=1;
! 622: int LargeTry=0,NumberLargeTry=0;
! 623: FILE *fp_set;
! 624: char set_file[FILE_NAME_LENGTH];
! 625: char path[FILE_NAME_LENGTH];
! 626: char filename[FILE_NAME_LENGTH];
! 627:
! 628: for( progname = *argv++; --argc; argv++) {
! 629: if ( argv[0][0] == '-' ) {
! 630: switch(argv[0][1]) {
! 631: case 's': set = atoi(argv[1]); break;
! 632: case 't': LargeTry = atoi(argv[1]); break;
! 633: case 'n': NumberLargeTry = atoi(argv[1]); break;
! 634: default: usage(); break;
! 635: }
! 636: }
! 637: }
! 638:
! 639: while ( inputNotOK ) {
! 640: puts("Enter the ABSOLUTE path of class");
! 641: scanf("%s", path);
! 642: if( access(path, F_OK) == -1 ) {
! 643: } else {
! 644: sprintf(filename,"%s/records",path);
! 645: if( access(filename, F_OK) == -1 ) {
! 646: puts("There isn't a records dir in this CLASS directory");
! 647: puts("Please Specify another calss");
! 648: } else {
! 649: inputNotOK = 0;
! 650: }
! 651: }
! 652: }
! 653: chdir(path);
! 654: sprintf(set_file, "records/set%d.db",set);
! 655: /* sprintf(out_file, "records/set%d.out",set); */
! 656: fp_set=Open_Read(set_file);
! 657: /* fp_out=Open_Write(out_file); */
! 658:
! 659: Read_Record(fp_set);
! 660:
! 661: Sort_By_Tries();
! 662: /* Print_Tries(); */
! 663: Percentage_Scores(set);
! 664: Average_Tries();
! 665:
! 666: Large_Tries(LargeTry, NumberLargeTry);
! 667: return 0;
! 668: }
! 669:
! 670:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>