#include <stdio.h>
#define SIZE 30
#define MAX_PLAYERS 1000
// The struct that stores either a boss or a clerk.
struct bbplayer {
char name[SIZE];
char pos[2];
double pwrrank;
};
// Reads the information from the file pointed to by ifp into list
// and returns the number of records found in the file, which must be 1000
// or less.
int readfile(FILE *ifp, struct bbplayer list[]);
// Swaps bbplayers in list in indexes index1 and index2.
void swap(struct bbplayer list[], int index1, int index2);
// Sorts the array list that stores length employees based on
// their power ranking.
void sort(struct bbplayer list[], int length);
// Writes out the information in workers to the file pointed to by ofp
// in the order the records are stored in workers. length must be the
// total number of records stored.
void writefile(FILE *ofp, struct bbplayer list[], int length);
// Assumes that list is sorted by decreasing order of power rankings.
// Prints out to the screen the num best players that have the position
// pos.
void printbest(struct bbplayer list[], char pos[], int num);
int main(void) {
FILE *ifp, *ofp;
char infile[SIZE], outfile[SIZE];
struct bbplayer NBA[MAX_PLAYERS];
int len, i;
// Get the input filename.
printf("Please enter the input file with player data.\n");
// File not found.
if (ifp == NULL)
printf("Sorry, the file does not exist.\n");
// Open and read from the file.
else {
len = readfile(ifp, NBA);
sort(NBA, len); // Sort the employees in order.
// Get the file to write the output to.
printf("Please enter the name of the file you want to store the sorted player data.\n"); ofp
= fopen(outfile
,"w");
writefile(ofp, NBA, len); // Write the output file.
printf("Your outputfile has successfully been stored.\n");
// Write out all-star team.
printf("Here is your All-Star team:\n\n"); printbest(NBA, "C", 1);
printbest(NBA, "F", 2);
printbest(NBA, "G", 2);
}
return 0;
}
// Reads the information from the file pointed to by ifp into list
// and returns the number of records found in the file, which must be 1000
// or less.
int readfile(FILE *ifp, struct bbplayer list[]) {
int num, index;
int pts, reb, ast, stl, blk;
// Read in the number of records.
// Read in each record one by one.
for (index=0; index<num; index++) {
// Read in the player's name and position.
fscanf(ifp
, "%s", list
[index
].
name); fscanf(ifp
, "%s", list
[index
].
pos);
list[index].pwrrank = (pts+2*reb+3*ast+5*stl+5*blk)/100.0;
}
return num; // Returns the number of records stored.
}
// Swaps bbplayers in list in indexes index1 and index2.
void swap(struct bbplayer list[], int index1, int index2) {
struct bbplayer temp;
// Copy the employee in index1 into temp.
strcpy(temp.
name, list
[index1
].
name); strcpy(temp.
pos, list
[index1
].
pos); temp.pwrrank = list[index1].pwrrank;
// Copy the bbplayer in index2 into index1.
strcpy(list
[index1
].
name, list
[index2
].
name); strcpy(list
[index1
].
pos, list
[index2
].
pos); list[index1].pwrrank = list[index2].pwrrank;
// Copy the original bbplayer in index1 into index2.
strcpy(list
[index2
].
name, temp.
name); strcpy(list
[index2
].
pos, temp.
pos); list[index2].pwrrank = temp.pwrrank;
}
// Sorts the array list that stores length employees based on
// their power ranking.
void sort(struct bbplayer list[], int length) {
int i,j;
// Run a bubble sort.
// Run length-1 iterations.
for (i=0; i<length-1; i++) {
// For each iteration, swap successive elements if they are out of
// order. At the end of each iteration, the value in the index
// length-1-i will be the maximum of the remaining candidates.
for (j=0; j<length-1-i; j++) {
// Only swap employees if they are out of place.
if (list[j].pwrrank < list[j+1].pwrrank) {
swap(list, j, j+1);
} // end if
} // end for j
} // end for i
}
// Writes out the information in workers to the file pointed to by ofp
// in the order the records are stored in workers. length must be the
// total number of records stored.
void writefile(FILE *ofp, struct bbplayer list[], int length) {
int index;
// Print out the number of lines in the file.
// Loop through each employee.
for (index=0; index<length; index++) {
// Print out the employee's name.
fprintf(ofp
,"%s %s %.2lf\n", list
[index
].
name, list
[index
].
pos, list[index].pwrrank);
}
}
// Assumes that list is sorted by decreasing order of power rankings.
// Also assumes that there are num or more players of position pos in
// list.
// Prints out to the screen the num best players that have the position
// pos.
void printbest(struct bbplayer list[], char pos[], int num) {
int cnt = 0, index=0;
while (cnt < num) {
if (strcmp(list
[index
].
pos,pos
) == 0) { printf("%s %s %.2lf\n",pos
, list
[index
].
name, list
[index
].
pwrrank); cnt++;
}
index++;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgMzAKI2RlZmluZSBNQVhfUExBWUVSUyAxMDAwCgovLyBUaGUgc3RydWN0IHRoYXQgc3RvcmVzIGVpdGhlciBhIGJvc3Mgb3IgYSBjbGVyay4Kc3RydWN0IGJicGxheWVyIHsKICBjaGFyIG5hbWVbU0laRV07CiAgY2hhciBwb3NbMl07CiAgZG91YmxlIHB3cnJhbms7Cn07CgoKLy8gUmVhZHMgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUgcG9pbnRlZCB0byBieSBpZnAgaW50byBsaXN0Ci8vIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBmb3VuZCBpbiB0aGUgZmlsZSwgd2hpY2ggbXVzdCBiZSAxMDAwCi8vIG9yIGxlc3MuCmludCByZWFkZmlsZShGSUxFICppZnAsIHN0cnVjdCBiYnBsYXllciBsaXN0W10pOwoKLy8gU3dhcHMgYmJwbGF5ZXJzIGluIGxpc3QgaW4gaW5kZXhlcyBpbmRleDEgYW5kIGluZGV4Mi4Kdm9pZCBzd2FwKHN0cnVjdCBiYnBsYXllciBsaXN0W10sIGludCBpbmRleDEsIGludCBpbmRleDIpOwoKLy8gU29ydHMgdGhlIGFycmF5IGxpc3QgdGhhdCBzdG9yZXMgbGVuZ3RoIGVtcGxveWVlcyBiYXNlZCBvbiAKLy8gdGhlaXIgcG93ZXIgcmFua2luZy4Kdm9pZCBzb3J0KHN0cnVjdCBiYnBsYXllciBsaXN0W10sIGludCBsZW5ndGgpOwoKLy8gV3JpdGVzIG91dCB0aGUgaW5mb3JtYXRpb24gaW4gd29ya2VycyB0byB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IG9mcAovLyBpbiB0aGUgb3JkZXIgdGhlIHJlY29yZHMgYXJlIHN0b3JlZCBpbiB3b3JrZXJzLiBsZW5ndGggbXVzdCBiZSB0aGUKLy8gdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgc3RvcmVkLgp2b2lkIHdyaXRlZmlsZShGSUxFICpvZnAsIHN0cnVjdCBiYnBsYXllciBsaXN0W10sIGludCBsZW5ndGgpOwoKLy8gQXNzdW1lcyB0aGF0IGxpc3QgaXMgc29ydGVkIGJ5IGRlY3JlYXNpbmcgb3JkZXIgb2YgcG93ZXIgcmFua2luZ3MuCi8vIFByaW50cyBvdXQgdG8gdGhlIHNjcmVlbiB0aGUgbnVtIGJlc3QgcGxheWVycyB0aGF0IGhhdmUgdGhlIHBvc2l0aW9uCi8vIHBvcy4Kdm9pZCBwcmludGJlc3Qoc3RydWN0IGJicGxheWVyIGxpc3RbXSwgY2hhciBwb3NbXSwgaW50IG51bSk7CgppbnQgbWFpbih2b2lkKSB7CiAKICBGSUxFICppZnAsICpvZnA7CiAgY2hhciBpbmZpbGVbU0laRV0sIG91dGZpbGVbU0laRV07CiAgc3RydWN0IGJicGxheWVyIE5CQVtNQVhfUExBWUVSU107CiAgaW50IGxlbiwgaTsKCiAgLy8gR2V0IHRoZSBpbnB1dCBmaWxlbmFtZS4KICBwcmludGYoIlBsZWFzZSBlbnRlciB0aGUgaW5wdXQgZmlsZSB3aXRoIHBsYXllciBkYXRhLlxuIik7CiAgc2NhbmYoIiVzIiwgaW5maWxlKTsKICBpZnAgPSBmb3BlbihpbmZpbGUsInIiKTsKCiAgLy8gRmlsZSBub3QgZm91bmQuCiAgaWYgKGlmcCA9PSBOVUxMKQogICAgcHJpbnRmKCJTb3JyeSwgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4iKTsKCiAgLy8gT3BlbiBhbmQgcmVhZCBmcm9tIHRoZSBmaWxlLgogIGVsc2UgeyAKICAgIGxlbiA9IHJlYWRmaWxlKGlmcCwgTkJBKTsKICAgIGZjbG9zZShpZnApOwoKICAgIHNvcnQoTkJBLCBsZW4pOyAvLyBTb3J0IHRoZSBlbXBsb3llZXMgaW4gb3JkZXIuCgogICAgLy8gR2V0IHRoZSBmaWxlIHRvIHdyaXRlIHRoZSBvdXRwdXQgdG8uCiAgICBwcmludGYoIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBzdG9yZSB0aGUgc29ydGVkIHBsYXllciBkYXRhLlxuIik7CiAgICBzY2FuZigiJXMiLCBvdXRmaWxlKTsKICAgIG9mcCA9IGZvcGVuKG91dGZpbGUsInciKTsKIAogICAgd3JpdGVmaWxlKG9mcCwgTkJBLCBsZW4pOyAvLyBXcml0ZSB0aGUgb3V0cHV0IGZpbGUuCiAgICBmY2xvc2Uob2ZwKTsKICAgIHByaW50ZigiWW91ciBvdXRwdXRmaWxlIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBzdG9yZWQuXG4iKTsKCiAgICAvLyBXcml0ZSBvdXQgYWxsLXN0YXIgdGVhbS4KICAgIHByaW50ZigiSGVyZSBpcyB5b3VyIEFsbC1TdGFyIHRlYW06XG5cbiIpOwogICAgcHJpbnRiZXN0KE5CQSwgIkMiLCAxKTsKICAgIHByaW50YmVzdChOQkEsICJGIiwgMik7CiAgICBwcmludGJlc3QoTkJBLCAiRyIsIDIpOwoKICB9CgogIHJldHVybiAwOwp9CgovLyBSZWFkcyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IGlmcCBpbnRvIGxpc3QKLy8gYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNvcmRzIGZvdW5kIGluIHRoZSBmaWxlLCB3aGljaCBtdXN0IGJlIDEwMDAKLy8gb3IgbGVzcy4KaW50IHJlYWRmaWxlKEZJTEUgKmlmcCwgc3RydWN0IGJicGxheWVyIGxpc3RbXSkgewoKICBpbnQgbnVtLCBpbmRleDsKICBpbnQgcHRzLCByZWIsIGFzdCwgc3RsLCBibGs7CgogIC8vIFJlYWQgaW4gdGhlIG51bWJlciBvZiByZWNvcmRzLgogIGZzY2FuZihpZnAsICIlZCIsICZudW0pOwogIAogIC8vIFJlYWQgaW4gZWFjaCByZWNvcmQgb25lIGJ5IG9uZS4KICBmb3IgKGluZGV4PTA7IGluZGV4PG51bTsgaW5kZXgrKykgewoKICAgIC8vIFJlYWQgaW4gdGhlIHBsYXllcidzIG5hbWUgYW5kIHBvc2l0aW9uLgogICAgZnNjYW5mKGlmcCwgIiVzIiwgbGlzdFtpbmRleF0ubmFtZSk7CiAgICBmc2NhbmYoaWZwLCAiJXMiLCBsaXN0W2luZGV4XS5wb3MpOwoKICAgIGZzY2FuZihpZnAsICIlZCIsICZwdHMpOwogICAgZnNjYW5mKGlmcCwgIiVkIiwgJnJlYik7CiAgICBmc2NhbmYoaWZwLCAiJWQiLCAmYXN0KTsKICAgIGZzY2FuZihpZnAsICIlZCIsICZzdGwpOwogICAgZnNjYW5mKGlmcCwgIiVkIiwgJmJsayk7CgogICAgbGlzdFtpbmRleF0ucHdycmFuayA9IChwdHMrMipyZWIrMyphc3QrNSpzdGwrNSpibGspLzEwMC4wOwogIH0KCiAgcmV0dXJuIG51bTsgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY29yZHMgc3RvcmVkLgp9CgovLyBTd2FwcyBiYnBsYXllcnMgaW4gbGlzdCBpbiBpbmRleGVzIGluZGV4MSBhbmQgaW5kZXgyLgp2b2lkIHN3YXAoc3RydWN0IGJicGxheWVyIGxpc3RbXSwgaW50IGluZGV4MSwgaW50IGluZGV4MikgewoKICBzdHJ1Y3QgYmJwbGF5ZXIgdGVtcDsKCiAgLy8gQ29weSB0aGUgZW1wbG95ZWUgaW4gaW5kZXgxIGludG8gdGVtcC4KICBzdHJjcHkodGVtcC5uYW1lLCBsaXN0W2luZGV4MV0ubmFtZSk7CiAgc3RyY3B5KHRlbXAucG9zLCBsaXN0W2luZGV4MV0ucG9zKTsKICB0ZW1wLnB3cnJhbmsgPSBsaXN0W2luZGV4MV0ucHdycmFuazsKCiAgLy8gQ29weSB0aGUgYmJwbGF5ZXIgaW4gaW5kZXgyIGludG8gaW5kZXgxLgogIHN0cmNweShsaXN0W2luZGV4MV0ubmFtZSwgbGlzdFtpbmRleDJdLm5hbWUpOwogIHN0cmNweShsaXN0W2luZGV4MV0ucG9zLCBsaXN0W2luZGV4Ml0ucG9zKTsKICBsaXN0W2luZGV4MV0ucHdycmFuayA9IGxpc3RbaW5kZXgyXS5wd3JyYW5rOwoKICAvLyBDb3B5IHRoZSBvcmlnaW5hbCBiYnBsYXllciBpbiBpbmRleDEgaW50byBpbmRleDIuCiAgc3RyY3B5KGxpc3RbaW5kZXgyXS5uYW1lLCB0ZW1wLm5hbWUpOwogIHN0cmNweShsaXN0W2luZGV4Ml0ucG9zLCB0ZW1wLnBvcyk7CiAgbGlzdFtpbmRleDJdLnB3cnJhbmsgPSB0ZW1wLnB3cnJhbms7Cgp9CgoKLy8gU29ydHMgdGhlIGFycmF5IGxpc3QgdGhhdCBzdG9yZXMgbGVuZ3RoIGVtcGxveWVlcyBiYXNlZCBvbiAKLy8gdGhlaXIgcG93ZXIgcmFua2luZy4Kdm9pZCBzb3J0KHN0cnVjdCBiYnBsYXllciBsaXN0W10sIGludCBsZW5ndGgpIHsKCiAgaW50IGksajsKCiAgLy8gUnVuIGEgYnViYmxlIHNvcnQuCgogIC8vIFJ1biBsZW5ndGgtMSBpdGVyYXRpb25zLgogIGZvciAoaT0wOyBpPGxlbmd0aC0xOyBpKyspIHsKCiAgICAvLyBGb3IgZWFjaCBpdGVyYXRpb24sIHN3YXAgc3VjY2Vzc2l2ZSBlbGVtZW50cyBpZiB0aGV5IGFyZSBvdXQgb2YKICAgIC8vIG9yZGVyLiBBdCB0aGUgZW5kIG9mIGVhY2ggaXRlcmF0aW9uLCB0aGUgdmFsdWUgaW4gdGhlIGluZGV4CiAgICAvLyBsZW5ndGgtMS1pIHdpbGwgYmUgdGhlIG1heGltdW0gb2YgdGhlIHJlbWFpbmluZyBjYW5kaWRhdGVzLgogICAgZm9yIChqPTA7IGo8bGVuZ3RoLTEtaTsgaisrKSB7CgogICAgICAvLyBPbmx5IHN3YXAgZW1wbG95ZWVzIGlmIHRoZXkgYXJlIG91dCBvZiBwbGFjZS4KICAgICAgaWYgKGxpc3Rbal0ucHdycmFuayA8IGxpc3RbaisxXS5wd3JyYW5rKSB7CiAgICAgICAgc3dhcChsaXN0LCBqLCBqKzEpOwogICAgICB9IC8vIGVuZCBpZgoKICAgIH0gLy8gZW5kIGZvciBqCiAgfSAvLyBlbmQgZm9yIGkKfQoKLy8gV3JpdGVzIG91dCB0aGUgaW5mb3JtYXRpb24gaW4gd29ya2VycyB0byB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IG9mcAovLyBpbiB0aGUgb3JkZXIgdGhlIHJlY29yZHMgYXJlIHN0b3JlZCBpbiB3b3JrZXJzLiBsZW5ndGggbXVzdCBiZSB0aGUKLy8gdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgc3RvcmVkLgp2b2lkIHdyaXRlZmlsZShGSUxFICpvZnAsIHN0cnVjdCBiYnBsYXllciBsaXN0W10sIGludCBsZW5ndGgpIHsKCiAgaW50IGluZGV4OwoKICAvLyBQcmludCBvdXQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZS4KICBmcHJpbnRmKG9mcCwgIiVkXG4iLCBsZW5ndGgpOwogIAogIC8vIExvb3AgdGhyb3VnaCBlYWNoIGVtcGxveWVlLgogIGZvciAoaW5kZXg9MDsgaW5kZXg8bGVuZ3RoOyBpbmRleCsrKSB7CiAgIAogICAgLy8gUHJpbnQgb3V0IHRoZSBlbXBsb3llZSdzIG5hbWUuCiAgICBmcHJpbnRmKG9mcCwiJXMgJXMgJS4ybGZcbiIsIGxpc3RbaW5kZXhdLm5hbWUsIGxpc3RbaW5kZXhdLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RbaW5kZXhdLnB3cnJhbmspOwogIH0KfQoKCi8vIEFzc3VtZXMgdGhhdCBsaXN0IGlzIHNvcnRlZCBieSBkZWNyZWFzaW5nIG9yZGVyIG9mIHBvd2VyIHJhbmtpbmdzLgovLyBBbHNvIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbnVtIG9yIG1vcmUgcGxheWVycyBvZiBwb3NpdGlvbiBwb3MgaW4KLy8gbGlzdC4KLy8gUHJpbnRzIG91dCB0byB0aGUgc2NyZWVuIHRoZSBudW0gYmVzdCBwbGF5ZXJzIHRoYXQgaGF2ZSB0aGUgcG9zaXRpb24KLy8gcG9zLgp2b2lkIHByaW50YmVzdChzdHJ1Y3QgYmJwbGF5ZXIgbGlzdFtdLCBjaGFyIHBvc1tdLCBpbnQgbnVtKSB7CgogIGludCBjbnQgPSAwLCBpbmRleD0wOwoKICB3aGlsZSAoY250IDwgbnVtKSB7CgogICAgaWYgKHN0cmNtcChsaXN0W2luZGV4XS5wb3MscG9zKSA9PSAwKSB7CiAgICAgIHByaW50ZigiJXMgJXMgJS4ybGZcbiIscG9zLCBsaXN0W2luZGV4XS5uYW1lLCBsaXN0W2luZGV4XS5wd3JyYW5rKTsKICAgICAgY250Kys7CiAgICB9CiAgICBpbmRleCsrOwogIH0KCn0K