Advertisement
michciu

Untitled

Dec 4th, 2019
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.69 KB | None | 0 0
  1. lab4zad1
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define MAX 20 // maksymalna liczba studentow
  7. #define LICZBA_ZADAN 6 // liczba ocenianych zadan
  8. #define BUF_SIZE 256 // wielkosc bufora znakowego
  9.  
  10. // char* dane[MAX]; // tablica przechowujaca imiona i nazwiska studentow (czyli wskazniki do tablic znakowych)
  11. char* dane[MAX][2];
  12. float oceny[MAX][LICZBA_ZADAN]; // tablica przechowujaca oceny
  13.  
  14. int indeks=0; // indeks pierwszej wolnej pozycji w dzienniku
  15.  
  16. // Funkcja dodajaca nowa osobe do dziennika
  17. int dodaj(char* nowe_imie, char* nowe_nazwisko, float* nowe_oceny)
  18. {
  19.     char* kopia;
  20.     int i;
  21.  
  22.     if(indeks<MAX-1) // sprawdzanie, czy jest jeszcze miejsce w tablicy
  23.     {
  24.         kopia=malloc((strlen(nowe_imie)+1)*sizeof(char)); // rezerwacja pamieci, adres zarezerwowanego obszaru wpisywany do wskaznika 'kopia'
  25.         strcpy(kopia, nowe_imie); // kopiowanie ciagu znakowego 'nowe_imie_nazwisko' pod adres w 'kopia'
  26.         dane[indeks][0]=kopia; // element dane[indeks] wskazuje teraz na to samo co 'kopia'
  27.  
  28.         kopia=malloc((strlen(nowe_nazwisko)+1)*sizeof(char)); // rezerwacja pamieci, adres zarezerwowanego obszaru wpisywany do wskaznika 'kopia'
  29.         strcpy(kopia, nowe_nazwisko); // kopiowanie ciagu znakowego 'nowe_imie_nazwisko' pod adres w 'kopia'
  30.         dane[indeks][1]=kopia; // element dane[indeks] wskazuje teraz na to samo co 'kopia'
  31.  
  32.         for(i=0; i<LICZBA_ZADAN; i++)
  33.             oceny[indeks][i]=nowe_oceny[i]; // przepisanie ocen
  34.  
  35.         return indeks++; // zwraca numer studenta
  36.     }
  37.     else
  38.         return -1; // nie ma juz miejsca w tablicy
  39.  
  40. }
  41.  
  42. void wypisz_srednia_kazdego()
  43. {
  44.     if(indeks==0)
  45.     {
  46.         printf("Brak danych!\n");
  47.         return;
  48.     }
  49.  
  50.     int i, j;
  51.     float srednia=0;
  52.  
  53.     for(i=0; i<indeks; i++)
  54.     {
  55.         printf("%s %-30s", dane[i][0], dane[i][1]); // wypisanie imienia i nazwiska
  56.         for(j=0; j<LICZBA_ZADAN; j++)
  57.         {
  58.             srednia+=oceny[i][j];
  59.         }
  60.        
  61.     srednia/=LICZBA_ZADAN;
  62.     printf("\nSrednia: %f\n\n", srednia);
  63.        
  64.     }
  65. }
  66.  
  67. void wypisz_srednia()
  68. {
  69.     if(indeks==0)
  70.     {
  71.         printf("Brak danych!\n");
  72.         return;
  73.     }
  74.  
  75.     int i, j;
  76.     float srednia=0;
  77.  
  78.     for(i=0; i<indeks; i++)
  79.         for(j=0; j<LICZBA_ZADAN; j++)
  80.         {
  81.             srednia+=oceny[i][j];
  82.         }
  83.     srednia/=(indeks*LICZBA_ZADAN);
  84.  
  85.     printf("\nSrednia: %f\n\n", srednia);
  86. }
  87.  
  88. // Funkcja wypisujaca oceny z zadan
  89. void wypisz_oceny()
  90. {
  91.     if(indeks==0)
  92.     {
  93.         printf("Brak danych!\n");
  94.         return;
  95.     }
  96.  
  97.     int i, j;
  98.  
  99.     printf("\n");
  100.  
  101.     for(i=0; i<indeks; i++)
  102.     {
  103.         printf("%s %-30s", dane[i][0], dane[i][1]); // wypisanie imienia i nazwiska
  104.  
  105.         for(j=0;j<LICZBA_ZADAN; j++)
  106.             printf("%1.1f ", oceny[i][j]); // wypisanie oceny
  107.  
  108.         printf("\n");
  109.     }
  110.  
  111.     printf("\n");
  112. }
  113.  
  114.  
  115. // Funkcja zwalniajaca pamiec zaalokowana w 'dodaj'
  116. void zwolnij()
  117. {
  118.     while(--indeks>=0)
  119.         free(dane[indeks][0]); // zwalnianie pamieci zaalokowanej w funkcji dodaj
  120.         free(dane[indeks][1]);
  121. }
  122.  
  123.  
  124. int main()
  125. {
  126.     char nazwisko[BUF_SIZE];
  127.     char imie[BUF_SIZE];
  128.     float oceny[LICZBA_ZADAN];
  129.     int i;
  130.  
  131.     int opcja, koniec=0;
  132.  
  133.     while(!koniec)
  134.     {
  135.         printf("[1] Wprowadzenie danych nowego studenta\n");
  136.         printf("[2] Wypisanie ocen\n");
  137.         printf("[3] Obliczenie sredniej\n");
  138.         printf("[4] Obliczenie sredniej dla każdego studenta\n");
  139.         printf("[0] Zakonczenie programu\n");
  140.  
  141.         printf("Wybierz opcje: ");
  142.         scanf("%d", &opcja);
  143.  
  144.         while(getchar()!='\n'); // czyszczenie bufora wejsciowego
  145.  
  146.         switch(opcja)
  147.         {
  148.             case 1:
  149.                 printf("Wprowadz imie studenta: ");
  150.  
  151.                 gets(imie); // wczytanie pojedynczej linii
  152.                
  153.                 printf("Wprowadz nazwisko studenta: ");
  154.  
  155.                 gets(nazwisko); // wczytanie pojedynczej linii
  156.  
  157.                 for(i=0; i<LICZBA_ZADAN; i++)
  158.                 {
  159.                     printf("Ocena z zadania %d: ", i+1);
  160.                     scanf("%f", &oceny[i]);
  161.                 }
  162.  
  163.                 dodaj(imie, nazwisko, oceny);
  164.                 break;
  165.  
  166.             case 2:
  167.                 wypisz_oceny();
  168.                 break;
  169.  
  170.             case 3:
  171.                 wypisz_srednia();
  172.                 break;
  173.                
  174.             case 4:
  175.                 wypisz_srednia_kazdego();
  176.                 break;
  177.  
  178.             case 0:
  179.             default:
  180.                 koniec=1;
  181.                 break;
  182.         }
  183.  
  184.     }
  185.  
  186.     zwolnij(); //zwolnienie pamiecie zaalokowanej podczas pracy programu
  187.  
  188.     return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement