Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_NAME 20
- #define NOTEN_ANZAHL 5
- typedef struct Student
- {
- char name[MAX_NAME];
- int matrikelnummer;
- int *noten;
- float mittelnote;
- } Student;
- void mittelnote_berechnen(Student* s)
- {
- float sume = 0;
- for(int i = 0; i < NOTEN_ANZAHL; i++)
- sume += s->noten[i];
- s->mittelnote = sume / NOTEN_ANZAHL ;
- }
- void print_student(Student s) {
- printf("%s ", s.name);
- for(int i = 0; i < NOTEN_ANZAHL; i++) {
- printf("%d ", s.noten[i]);
- }
- printf("%d ", s.matrikelnummer);
- printf("%f\n", s.mittelnote);
- }
- void print_student_infile(Student s, FILE* file) {
- if(file == NULL) {
- puts("bad file pointer");
- return;
- }
- fprintf(file, "%s ", s.name);
- for(int i = 0; i < NOTEN_ANZAHL; i++) {
- fprintf(file, "%d ", s.noten[i]);
- }
- fprintf(file, "%d ", s.matrikelnummer);
- fprintf(file, "%f\n", s.mittelnote);
- }
- int cmp_by_avg(const void* p1, const void* p2) {
- Student* studentA = (Student*) p1;
- Student* studnetB = (Student*) p2;
- return studentA->mittelnote >= studnetB->mittelnote ? 1 : -1;
- }
- void solve_3(Student* studenten, int studenten_anzahl) {
- qsort(studenten, studenten_anzahl, sizeof(Student), cmp_by_avg);
- FILE* new_file = fopen("sorted_by_avg.txt", "w+");
- for(int i = 0; i < studenten_anzahl; i++) {
- print_student_infile(studenten[i], new_file);
- }
- }
- int cmp_by_name(const void* p1, const void* p2) {
- Student* studentA = (Student*) p1;
- Student* studnetB = (Student*) p2;
- return strcmp(studentA->name, studnetB->name);
- }
- void solve_4(Student* studenten, int studenten_anzahl) {
- qsort(studenten, studenten_anzahl, sizeof(Student), cmp_by_name);
- FILE* new_file = fopen("sorted_by_name.txt", "w+");
- for(int i = 0; i < studenten_anzahl; i++) {
- print_student_infile(studenten[i], new_file);
- }
- // b
- fseek(new_file, 0, SEEK_END);
- int bytes = ftell(new_file);
- printf("Number of bytes of sorted_by_name.txt is: %d\n", bytes);
- }
- int main()
- {
- int i,n;
- FILE *f;
- f = fopen("dat_Student.txt", "r");
- if(f == NULL) {
- printf("Man kann nicht aus dat_student.txt lesen\n");
- return -1;
- }
- int studenten_anzahl;
- fscanf(f, "%d", &studenten_anzahl);
- Student* studenten = (Student*) malloc(sizeof(Student) * n);
- // citim toti studentii
- for(int i = 0; i < studenten_anzahl; i++) {
- studenten[i].noten = (int*) malloc(sizeof(int) * NOTEN_ANZAHL);
- fscanf(f, "%s", studenten[i].name);
- for(int j = 0; j < NOTEN_ANZAHL; j++) {
- fscanf(f, "%d", &studenten[i].noten[j]);
- }
- fscanf(f, "%d", &studenten[i].matrikelnummer);
- mittelnote_berechnen(&studenten[i]);
- }
- //task 2
- for(int i = 0; i < studenten_anzahl; i++) {
- print_student(studenten[i]);
- }
- //task 3
- solve_3(studenten, studenten_anzahl);
- //task 4
- // a
- solve_4(studenten, studenten_anzahl);
- // delocam memoria folosita
- for(int i = 0; i < studenten_anzahl; i++) {
- free(studenten[i].noten);
- }
- free(studenten);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement