/*
    69a__studenti.c
    Uvodimo polja struktura i pokazivace na strukturu.
    -----
    Velicina varijable tipa struct=zbroj velicina svih njezinih elemenata.
    
    (kod unosa neka se 1. student ne zove Mirko i neka nema 5 iz C-a)
*/
 
#include <stdio.h>
#include <string.h>
 
struct __student {
    char ime[20], prezime[20], jmbag[14];
    int ocjena_iz_c_a;
};
 
/* Naredba typedef sluzi za definiciju novog tipa. Obicno ju koristimo
   kako bismo uveli pokratu za neki slozeni tip podatka.
   Sintaksa: typedef slozeni_tip pokrata
   U nasem slucaju: slozeni_tip=struct __student
                    pokrata=student    
*/
typedef struct __student student;
 
double prosjek (student polje[], int broj_studenata)
{
    double rez=0;
    int i;
 
    for (i=0; i<broj_studenata; i++)
        rez+=polje[i].ocjena_iz_c_a;
 
    return rez/broj_studenata;      
}
 
void preimenuj (student *stud, char *novo_ime, int nova_ocjena)
{
    /* ova funkcija mora promijeniti podatke o studentu -> mora kao
       parametar imati pokazivac (tj. moramo joj poslati adresu) */
 
    (*stud).ocjena_iz_c_a=nova_ocjena;
    /* operator * (dereferenciranje) ima manji prioritet od operatora .
       (uzimanje elementa strukture), pa je nuzno navesti zagrade.
       Alternativni (i kraci zapis):
            stud->ocjena_iz_c_a=nova_ocjena; */
 
    strcpy (stud->ime, novo_ime);
}
 
int main ( void )
{
    student polje[10];
    int broj_studenata, i;
 
    /* ispisimo koliko memorije zauzimaju pojedina struktura i cijelo polje */
    printf ("[sizeof(student)=%d sizeof(polje[0])=%d sizeof(polje)=%d]\n\n", 
             sizeof(student), sizeof(polje[0]), sizeof(polje));
 
    /* ucitavamo redom podatke o studentima */
    printf ("Koliko ce biti studenata (<10): ");
     scanf ("%d", &broj_studenata);
 
    for (i=0; i<broj_studenata; i++)
    {
        printf ("--- %d. student ---\n", i
+1);
         scanf ("%s", polje[i].ime);
 
        scanf ("%s", polje[i].prezime);
 
        scanf ("%s", polje[i].jmbag);
 
        scanf ("%d", &polje[i].ocjena_iz_c_a);
    }
 
    /* kloniramo prvog studenta i promjenimo mu ime u Mirko i ocjenu u 5 */
    /* ova operacija ce iskopirati bit po bit sve iz polje[0] u 
       polje[broj_studenata] */
    polje[broj_studenata]=polje[0];
    preimenuj (&polje[broj_studenata], "Mirko", 5);
 
    /* ispisemo podatke o svim studentima */
    for (i=0; i<=broj_studenata; i++)
        printf ("%d. %s %s: JMBAG=%s, ocjena iz c-a=%d\n",
                 i+1, polje[i].ime, polje[i].prezime,
                polje[i].jmbag, polje[i].ocjena_iz_c_a);
 
    /* izracunamo prosjek ocjena iz C-a */
    printf ("\nProsjek ocjena iz C-a: %f\n", prosjek
(polje, broj_studenata
+1));
  
    return 0;   
}