Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_NAME 20
  6. #define NOTEN_ANZAHL 5
  7.  
  8. typedef struct Student
  9. {
  10.     char name[MAX_NAME];
  11.     int matrikelnummer;
  12.     int *noten;
  13.     float mittelnote;
  14. } Student;
  15.  
  16. void mittelnote_berechnen(Student* s)
  17. {
  18.     float sume = 0;
  19.     for(int i = 0; i < NOTEN_ANZAHL; i++)
  20.         sume += s->noten[i];
  21.  
  22.     s->mittelnote = sume / NOTEN_ANZAHL ;
  23. }
  24.  
  25. void print_student(Student s) {
  26.     printf("%s ", s.name);
  27.     for(int i = 0; i < NOTEN_ANZAHL; i++) {
  28.         printf("%d ", s.noten[i]);
  29.     }
  30.     printf("%d ", s.matrikelnummer);
  31.     printf("%f\n", s.mittelnote);
  32. }
  33.  
  34. void print_student_infile(Student s, FILE* file) {
  35.     if(file == NULL) {
  36.         puts("bad file pointer");
  37.         return;
  38.     }
  39.     fprintf(file, "%s ", s.name);
  40.     for(int i = 0; i < NOTEN_ANZAHL; i++) {
  41.         fprintf(file, "%d ", s.noten[i]);
  42.     }
  43.     fprintf(file, "%d ", s.matrikelnummer);
  44.     fprintf(file, "%f\n", s.mittelnote);
  45. }
  46.  
  47. int cmp_by_avg(const void* p1, const void* p2) {
  48.     Student* studentA = (Student*) p1;
  49.     Student* studnetB = (Student*) p2;
  50.  
  51.     return studentA->mittelnote >= studnetB->mittelnote ? 1 : -1;
  52. }
  53.  
  54. void solve_3(Student* studenten, int studenten_anzahl) {
  55.     qsort(studenten, studenten_anzahl, sizeof(Student), cmp_by_avg);
  56.    
  57.     FILE* new_file = fopen("sorted_by_avg.txt", "w+");
  58.     for(int i = 0; i < studenten_anzahl; i++) {
  59.         print_student_infile(studenten[i], new_file);
  60.     }
  61. }
  62.  
  63. int cmp_by_name(const void* p1, const void* p2) {
  64.     Student* studentA = (Student*) p1;
  65.     Student* studnetB = (Student*) p2;
  66.  
  67.     return strcmp(studentA->name, studnetB->name);
  68. }
  69.  
  70. void solve_4(Student* studenten, int studenten_anzahl) {
  71.     qsort(studenten, studenten_anzahl, sizeof(Student), cmp_by_name);
  72.    
  73.     FILE* new_file = fopen("sorted_by_name.txt", "w+");
  74.     for(int i = 0; i < studenten_anzahl; i++) {
  75.         print_student_infile(studenten[i], new_file);
  76.     }
  77.     // b
  78.     fseek(new_file, 0, SEEK_END);
  79.     int bytes = ftell(new_file);
  80.     printf("Number of bytes of sorted_by_name.txt is: %d\n", bytes);
  81. }
  82.  
  83. int main()
  84. {
  85.     int i,n;
  86.     FILE *f;
  87.     f = fopen("dat_Student.txt", "r");
  88.     if(f == NULL) {
  89.         printf("Man kann nicht aus dat_student.txt lesen\n");
  90.         return -1;
  91.     }
  92.  
  93.     int studenten_anzahl;
  94.     fscanf(f, "%d", &studenten_anzahl);
  95.     Student* studenten = (Student*) malloc(sizeof(Student) * n);
  96.  
  97.     // citim toti studentii
  98.     for(int i = 0; i < studenten_anzahl; i++) {
  99.         studenten[i].noten = (int*) malloc(sizeof(int) * NOTEN_ANZAHL);
  100.         fscanf(f, "%s", studenten[i].name);
  101.         for(int j = 0; j < NOTEN_ANZAHL; j++) {
  102.             fscanf(f, "%d", &studenten[i].noten[j]);
  103.         }
  104.         fscanf(f, "%d", &studenten[i].matrikelnummer);
  105.         mittelnote_berechnen(&studenten[i]);
  106.     }
  107.  
  108.     //task 2
  109.     for(int i = 0; i < studenten_anzahl; i++) {
  110.         print_student(studenten[i]);
  111.     }
  112.  
  113.     //task 3
  114.     solve_3(studenten, studenten_anzahl);
  115.    
  116.     //task 4
  117.     // a
  118.     solve_4(studenten, studenten_anzahl);
  119.  
  120.     // delocam memoria folosita
  121.     for(int i = 0; i < studenten_anzahl; i++) {
  122.         free(studenten[i].noten);
  123.     }
  124.     free(studenten);
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement