#include <stdio.h>
#include <stdlib.h>
#define MAX 21
#define MAX_ELEM 8
#define SCORE 12
#define NUM_SKATER 4
#define BASE 3.1
typedef struct{
char name[MAX];
int elements;
float baseval[MAX_ELEM];
int score[MAX_ELEM][SCORE];
float total_base;
float tech_score;
float total_score;
}SKATER;
int getData(SKATER skater[NUM_SKATER]);
void calcData(SKATER skater[NUM_SKATER]);
void insertSort(SKATER skater[NUM_SKATER], int num);
void printData(SKATER skater[]);
int main (void)
{
// Global Declarations
SKATER skater[NUM_SKATER];
int num;
// Funtion calls
num = getData(skater);
calcData(skater);
insertSort(skater, NUM_SKATER);
printData(skater);
return 0;
}
/********************************* getData ************************************
Pre:
Post:
*/
int getData(SKATER skater[NUM_SKATER])
{
// LOcal Declarations
FILE* fpIn;
int i = 0;
int k;
int j;
char buffer[256];
// Statements
if((fpIn
= fopen("lab6data.txt","r"))==NULL
) {
}
while(i
< NUM_SKATER
&& fgets(buffer
, sizeof(buffer
) - 1, fpIn
)) {
sscanf(buffer
,"%*c%19[^0123456789]", skater
[i
].
name); for(k = 0; k < MAX_ELEM; k++)
{
if(fgets(buffer
, sizeof(buffer
)-1, fpIn
) != NULL
) {
sscanf(buffer
,"%d %f", &skater
[i
].
elements, &skater
[i
].
baseval[k
]); for(j = 0; j < SCORE; j++)
{
sscanf(buffer
,"%d", &skater
[i
].
score[k
][j
]); }
}
}
i++;
}
return i;
}
/* ****************************** calcData *******************************
Pre:
Post:
*/
void calcData(SKATER skater[NUM_SKATER])
{
//Local Declaration
int i,j,k;
int smallest, largest;
int temp = 0;
float temp_baseval = 0;
float temp_score = 0;
float total;
//Statements
for(i=0; i< NUM_SKATER; i++)
{
for(j=0; j< MAX_ELEM; j++)
{
smallest = skater[i].score[j][0];
largest = skater[i].score[j][SCORE-1];
for(k=0; k< SCORE; k++)
{
temp += skater[i].score[j][k]; //adds total scores
if(smallest > skater[i].score[j][k])
smallest = skater[i].score[j][k];
else if(largest < skater[i].score[j][k])
largest = skater[i].score[j][k];
}
//total scores minus largest and smallest
total = (float)(temp - (largest+smallest)) / (float)SCORE;
temp = 0;
//calculates result on the basis of baseval <= or > than 3.1
if(skater[i].baseval[j] <= BASE)
skater[i].total_score = (float)(.5 * total) + skater[i].baseval[j];
else
skater[i].total_score = total + skater[i].baseval[j];
temp_baseval += skater[i].baseval[j]; //sums up baseval
temp_score += skater[i].total_score; //sums up technical score
}
skater[i].tech_score = temp_score;
skater[i].total_base = temp_baseval;
temp_baseval=0;
temp_score=0;
}
return;
}
/* ==================== insertSort ====================
Sorts list using Insertion Sort. Thes list is divided into sorted
and unsorted list. With each pass the first elemnt in unsorted list
is inserted in sortedlist.
Pre SKATER skater is a structure
Post returns sorted structure based on highest technical score
*/
void insertSort(SKATER skater[NUM_SKATER], int num)
{
//Local Declaration
int loc;
SKATER temp;
SKATER *pCurr;
SKATER *pWalk;
SKATER *pLast;
//Statements
for(pCurr = skater + 1, pLast = skater + num-1;
pCurr <= pLast;
pCurr++)
{
loc = 0;
temp = *pCurr;
for(pWalk = pCurr -1;
pWalk >= skater && !loc;)
//compares the tech scores of swimmers
if(temp.tech_score > pWalk->tech_score)
{
*(pWalk+1) = *pWalk;
pWalk--;
}
else
loc = 1;
*(pWalk+1) = temp;
}
return;
}
/* ****************************** printData *******************************8
Pre:
Post:
*/
void printData(SKATER skater[])
{
//Local Declaration
FILE*fpOut;
int i,j,k;
//Statements
if(!(fpOut
=fopen("output.txt", "w"))) printf("CANT OPENT output.txt");
printf("DONE see output.txt\n"); //checks to see if output.txt opens
fprintf(fpOut
,"NAME: LAB#6 EMAIL: \n\n"); fprintf(fpOut
,"EVENT: MEN SHORT PROGRAM\n"); fprintf(fpOut
,"CHIEF ACCOUNTANT: \n\n");
for(i=0; i<NUM_SKATER; i++)
{
fprintf(fpOut
,"SKATER: %s\n\n", skater
[i
].
name); fprintf(fpOut
,"[BASE] [SCORE] [TOTAL]\n"); fprintf(fpOut
,"---------------------------------------------------------------\n"); for(j=0; j<MAX_ELEM; j++)
{
fprintf(fpOut
,"%5.2f ", skater
[i
].
baseval[j
]); for(k=0; k<SCORE; k++)
{
fprintf(fpOut
,"%3d ", skater
[i
].
score[j
][k
]); }
fprintf(fpOut
," %5.2f", skater
[i
].
total_score); }
fprintf(fpOut
,"---------------------------------------------------------------\n"); fprintf(fpOut
,"Total Base: %5.2f Total Technical Score: %5.2f", skater[i].total_base, skater[i].tech_score);
}
return;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgTUFYIDIxCiNkZWZpbmUgTUFYX0VMRU0gOAojZGVmaW5lIFNDT1JFIDEyCiNkZWZpbmUgTlVNX1NLQVRFUiA0CiNkZWZpbmUgQkFTRSAzLjEKCnR5cGVkZWYgc3RydWN0ewogICAgICAgICAgICAgICAgY2hhciAgbmFtZVtNQVhdOwoJCWludCAgIGVsZW1lbnRzOwogICAgICAgICAgICAgICAgZmxvYXQgYmFzZXZhbFtNQVhfRUxFTV07CiAgICAgICAgICAgICAgICBpbnQgc2NvcmVbTUFYX0VMRU1dW1NDT1JFXTsKCSAgICAgICAgZmxvYXQgdG90YWxfYmFzZTsKCQlmbG9hdCB0ZWNoX3Njb3JlOwoJCWZsb2F0IHRvdGFsX3Njb3JlOwogICAgICAgICAgICAgIH1TS0FURVI7CgppbnQgIGdldERhdGEoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSk7CnZvaWQgY2FsY0RhdGEoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSk7CnZvaWQgaW5zZXJ0U29ydChTS0FURVIgc2thdGVyW05VTV9TS0FURVJdLCBpbnQgbnVtKTsKdm9pZCBwcmludERhdGEoU0tBVEVSIHNrYXRlcltdKTsKCmludCBtYWluICh2b2lkKQp7CgkvLyBHbG9iYWwgRGVjbGFyYXRpb25zCglTS0FURVIgc2thdGVyW05VTV9TS0FURVJdOwoJaW50IG51bTsKCgkvLyBGdW50aW9uIGNhbGxzCgludW0gPSBnZXREYXRhKHNrYXRlcik7CgljYWxjRGF0YShza2F0ZXIpOwoJaW5zZXJ0U29ydChza2F0ZXIsIE5VTV9TS0FURVIpOwoJcHJpbnREYXRhKHNrYXRlcik7CglyZXR1cm4gMDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBnZXREYXRhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpQcmU6ClBvc3Q6CiovCmludCBnZXREYXRhKFNLQVRFUiBza2F0ZXJbTlVNX1NLQVRFUl0pCnsKCS8vIExPY2FsIERlY2xhcmF0aW9ucwoJRklMRSogZnBJbjsKCWludCAgIGkgPSAwOyAgCglpbnQJICBrOwoJaW50ICAgajsKCWNoYXIgIGJ1ZmZlclsyNTZdOyAKCgkvLyBTdGF0ZW1lbnRzCglpZigoZnBJbiA9IGZvcGVuKCJsYWI2ZGF0YS50eHQiLCJyIikpPT1OVUxMKQoJewoJCXByaW50ZigiRmlsZSBvcGVuaW5nIGVycm9yIik7CgkJc3lzdGVtKCJQQVVTRSIpOwoJCWV4aXQoMTAwKTsKCX0KICAgICAKCXdoaWxlKGkgPCBOVU1fU0tBVEVSICYmIGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBmcEluKSkKCXsJCQoJCXNzY2FuZihidWZmZXIsIiUqYyUxOVteMDEyMzQ1Njc4OV0iLCBza2F0ZXJbaV0ubmFtZSk7CQkJCgkJZm9yKGsgPSAwOyBrIDwgTUFYX0VMRU07IGsrKykKCQl7CQkJCgkJCWlmKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSwgZnBJbikgIT0gTlVMTCkKCQkgICAgewkJCSAKCQkJCXNzY2FuZihidWZmZXIsIiVkICVmIiwgJnNrYXRlcltpXS5lbGVtZW50cywgJnNrYXRlcltpXS5iYXNldmFsW2tdKTsKCQkJCWZvcihqID0gMDsgaiA8IFNDT1JFOyBqKyspCgkJCQl7CgkJCQkJc3NjYW5mKGJ1ZmZlciwiJWQiLCAmc2thdGVyW2ldLnNjb3JlW2tdW2pdKTsKCQkJCX0KCQkJfQoJCX0gCgkgICAgCgkJaSsrOwkJCgl9CgoJc3lzdGVtKCJQQVVTRSIpOwoJZmNsb3NlKGZwSW4pOwoKCXJldHVybiBpOwp9CgovKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogY2FsY0RhdGEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpQcmU6ClBvc3Q6CiovCnZvaWQgY2FsY0RhdGEoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSkKewoJLy9Mb2NhbCBEZWNsYXJhdGlvbiAKCWludCBpLGosazsKCWludCBzbWFsbGVzdCwgbGFyZ2VzdDsKCWludCB0ZW1wID0gMDsKCWZsb2F0IHRlbXBfYmFzZXZhbCA9IDA7CglmbG9hdCB0ZW1wX3Njb3JlID0gMDsKCWZsb2F0IHRvdGFsOwoKLy9TdGF0ZW1lbnRzCglmb3IoaT0wOyBpPCBOVU1fU0tBVEVSOyBpKyspCgl7CQoJCWZvcihqPTA7IGo8IE1BWF9FTEVNOyBqKyspCgkJewkKCQkJc21hbGxlc3QgPSBza2F0ZXJbaV0uc2NvcmVbal1bMF07CgkJCWxhcmdlc3QgPSBza2F0ZXJbaV0uc2NvcmVbal1bU0NPUkUtMV07CgoJCQlmb3Ioaz0wOyBrPCBTQ09SRTsgaysrKQoJCQl7CgkJCQl0ZW1wICs9IHNrYXRlcltpXS5zY29yZVtqXVtrXTsgLy9hZGRzIHRvdGFsIHNjb3JlcwoKCQkJCWlmKHNtYWxsZXN0ID4gc2thdGVyW2ldLnNjb3JlW2pdW2tdKQoJCQkJCXNtYWxsZXN0ID0gc2thdGVyW2ldLnNjb3JlW2pdW2tdOwoJCQkJZWxzZSBpZihsYXJnZXN0IDwgc2thdGVyW2ldLnNjb3JlW2pdW2tdKQoJCQkJCWxhcmdlc3QgPSBza2F0ZXJbaV0uc2NvcmVbal1ba107CgkJCX0KCgkJCS8vdG90YWwgc2NvcmVzIG1pbnVzIGxhcmdlc3QgYW5kIHNtYWxsZXN0CgkJCXRvdGFsID0gKGZsb2F0KSh0ZW1wIC0gKGxhcmdlc3Qrc21hbGxlc3QpKSAvIChmbG9hdClTQ09SRTsgCgkJCXRlbXAgPSAwOwoJCQkKCQkJLy9jYWxjdWxhdGVzIHJlc3VsdCBvbiB0aGUgYmFzaXMgb2YgYmFzZXZhbCA8PSBvciA+IHRoYW4gMy4xCgkJCWlmKHNrYXRlcltpXS5iYXNldmFsW2pdIDw9IEJBU0UpCgkJCSAgIHNrYXRlcltpXS50b3RhbF9zY29yZSA9IChmbG9hdCkoLjUgKiB0b3RhbCkgKyBza2F0ZXJbaV0uYmFzZXZhbFtqXTsKCQkJZWxzZQoJCQkgICBza2F0ZXJbaV0udG90YWxfc2NvcmUgPSB0b3RhbCArIHNrYXRlcltpXS5iYXNldmFsW2pdOwoJCQkKCQkJdGVtcF9iYXNldmFsICs9IHNrYXRlcltpXS5iYXNldmFsW2pdOyAvL3N1bXMgdXAgYmFzZXZhbAoJCQl0ZW1wX3Njb3JlICs9IHNrYXRlcltpXS50b3RhbF9zY29yZTsgLy9zdW1zIHVwIHRlY2huaWNhbCBzY29yZQoJCX0KCQkKCQlza2F0ZXJbaV0udGVjaF9zY29yZSA9IHRlbXBfc2NvcmU7CgkJc2thdGVyW2ldLnRvdGFsX2Jhc2UgPSB0ZW1wX2Jhc2V2YWw7CgoJCXRlbXBfYmFzZXZhbD0wOwoJCXRlbXBfc2NvcmU9MDsKCX0KCgoJcmV0dXJuOwp9CgovKgk9PT09PT09PT09PT09PT09PT09PSBpbnNlcnRTb3J0ID09PT09PT09PT09PT09PT09PT09CglTb3J0cyBsaXN0IHVzaW5nIEluc2VydGlvbiBTb3J0LiBUaGVzIGxpc3QgaXMgZGl2aWRlZCBpbnRvIHNvcnRlZCAKCWFuZCB1bnNvcnRlZCBsaXN0LiBXaXRoIGVhY2ggcGFzcyB0aGUgZmlyc3QgZWxlbW50IGluIHVuc29ydGVkIGxpc3QKCWlzIGluc2VydGVkIGluIHNvcnRlZGxpc3QuCgoJICAgUHJlCSAJU0tBVEVSIHNrYXRlciBpcyBhIHN0cnVjdHVyZQoJICAgUG9zdAkJcmV0dXJucyBzb3J0ZWQgc3RydWN0dXJlIGJhc2VkIG9uIGhpZ2hlc3QgdGVjaG5pY2FsIHNjb3JlCiovCgp2b2lkIGluc2VydFNvcnQoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSwgaW50IG51bSkKewoKLy9Mb2NhbCBEZWNsYXJhdGlvbiAKCWludCBsb2M7CglTS0FURVIgdGVtcDsKCVNLQVRFUiAqcEN1cnI7CglTS0FURVIgKnBXYWxrOwoJU0tBVEVSICpwTGFzdDsKCi8vU3RhdGVtZW50cwoJZm9yKHBDdXJyID0gc2thdGVyICsgMSwgcExhc3QgPSBza2F0ZXIgKyBudW0tMTsgCgkJcEN1cnIgPD0gcExhc3Q7CgkJcEN1cnIrKykKCXsKCSBsb2MgPSAwOwoJIHRlbXAgPSAqcEN1cnI7CgoJIGZvcihwV2FsayA9IHBDdXJyIC0xOyAKCQkgcFdhbGsgPj0gc2thdGVyICYmICFsb2M7KQoKCSAvL2NvbXBhcmVzIHRoZSB0ZWNoIHNjb3JlcyBvZiBzd2ltbWVycwoJIGlmKHRlbXAudGVjaF9zY29yZSA+IHBXYWxrLT50ZWNoX3Njb3JlKSAKCQkgewoJCQkgKihwV2FsaysxKSA9ICpwV2FsazsKCQkJIHBXYWxrLS07CgkJIH0KCSBlbHNlCgkJIGxvYyA9IDE7CgkgKihwV2FsaysxKSA9IHRlbXA7Cgl9CgogIHJldHVybjsKfQoKLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHByaW50RGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqOApQcmU6ClBvc3Q6CiovCnZvaWQgcHJpbnREYXRhKFNLQVRFUiBza2F0ZXJbXSkKewoJLy9Mb2NhbCBEZWNsYXJhdGlvbiAKCUZJTEUqZnBPdXQ7CglpbnQgaSxqLGs7CgoJLy9TdGF0ZW1lbnRzCglpZighKGZwT3V0PWZvcGVuKCJvdXRwdXQudHh0IiwgInciKSkpCgkJcHJpbnRmKCJDQU5UIE9QRU5UIG91dHB1dC50eHQiKTsKCglwcmludGYoIkNhbGN1bGF0aW5nLi4uLi5cbiIpOwoJcHJpbnRmKCJET05FIHNlZSBvdXRwdXQudHh0XG4iKTsgLy9jaGVja3MgdG8gc2VlIGlmIG91dHB1dC50eHQgb3BlbnMKCglmcHJpbnRmKGZwT3V0LCJOQU1FOiAgICAgIExBQiM2ICAgICAgRU1BSUw6IFxuXG4iKTsKCWZwcmludGYoZnBPdXQsIkVWRU5UOiBNRU4gU0hPUlQgUFJPR1JBTVxuIik7CglmcHJpbnRmKGZwT3V0LCJDSElFRiBBQ0NPVU5UQU5UOiBcblxuIik7CgkKCglmb3IoaT0wOyBpPE5VTV9TS0FURVI7IGkrKykKCSAgIHsJCgkJZnByaW50ZihmcE91dCwiU0tBVEVSOiAlc1xuXG4iLCBza2F0ZXJbaV0ubmFtZSk7CgkJZnByaW50ZihmcE91dCwiW0JBU0VdICAgICAgICAgICAgICAgICAgIFtTQ09SRV0gICAgICAgICAgICAgICAgICAgICAgICBbVE9UQUxdXG4iKTsKCQlmcHJpbnRmKGZwT3V0LCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwoJCWZvcihqPTA7IGo8TUFYX0VMRU07IGorKykKCQkJIHsKCQkJCSBmcHJpbnRmKGZwT3V0LCIlNS4yZiAgICIsIHNrYXRlcltpXS5iYXNldmFsW2pdKTsKCQkJCSAgZm9yKGs9MDsgazxTQ09SRTsgaysrKQoJCQkJCSAgewoJCQkJCSAgIGZwcmludGYoZnBPdXQsIiUzZCAiLCBza2F0ZXJbaV0uc2NvcmVbal1ba10pOwoJCQkJCSAgfQoJCQkgICAgIGZwcmludGYoZnBPdXQsIiAgJTUuMmYiLCBza2F0ZXJbaV0udG90YWxfc2NvcmUpOwoJCQkJIGZwcmludGYoZnBPdXQsIlxuIik7CgkJICAgICB9CgkJCgkJZnByaW50ZihmcE91dCwiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKCQlmcHJpbnRmKGZwT3V0LCJUb3RhbCBCYXNlOiAlNS4yZiAgICAgICAgICAgICAgICAgIFRvdGFsIFRlY2huaWNhbCBTY29yZTogJTUuMmYiLCAKCQkJCXNrYXRlcltpXS50b3RhbF9iYXNlLCBza2F0ZXJbaV0udGVjaF9zY29yZSk7CgkJCQkgIAoJICAgZnByaW50ZihmcE91dCwiXG5cblxuIik7CgkgICB9CgkKCXJldHVybjsKfQo=