#include #include /*Zadanie si snad pamatate: V skratke nacitavam znamky studentov, ktore su zadane v tvare A 2 A 2 B 1 B 3 q q alebo A ukoncuje zadavanie pOtom program sa opyta na meno ziaka a vypise jeho priemer a pocet znamok*/ #define MAX 20 //Funkcia pre vynulovanie pola void inicializujPole(int * pole){ for (int i = 0; i < MAX; i++) pole[i] = 0; return; } //funkcia pre vynulovanie pola pre znaky void initMena(char * pole){ for (int i = 0; i < MAX; i++) pole[i] = '0'; return; } /* Funkcia vrati index v poli pole, v ktorom sa nachadza dany znak; Ak sa ten znak v poli nenchadza tak vrati -1 */ int dajPoziciu(char znak, char * pole){ int pozicia = -1; for (int i = 0; i < MAX; i++){ if (pole[i]== znak) { pozicia = i; return i; } } return pozicia; } /* Funkcia vypise info o ziakovy s menom 'meno' Dalsie parametre su pole mien, pole suctu znamok, pole poctu znamok */ void vypisZiaka(char meno, char *mena, int *znamky, int *pocetZnamok){ int pozicia = dajPoziciu(meno, mena); if (pozicia < 0){ printf("Ziak '%c' sa nenachadza v databazi\n", meno); } else { //+0.0 jr ysm preto aby sa znamky[pozicka pretypovali na realne cislo //namiesto otho by mohlo byt aj (float) znamky[pozicia], pripane *1.0 printf("Ziak '%c': priemer: %.2f, pocet znamok: %d\n", mena[pozicia], (znamky[pozicia] + 0.0) / pocetZnamok[pozicia], pocetZnamok[pozicia]); } return; } int main(){ //definicia poli mien, suctu znamok a poctu znamok pre jednotliveho ziaka. // rovnako aj ich inicializacia na nulove hodnoty char mena[MAX]; initMena(mena); int znamky[MAX]; int pocetZnamok[MAX]; inicializujPole(znamky); inicializujPole(pocetZnamok); puts("Zadavaj znamky studentov v tvare meno(jedno pismenko) medzera znamka. Vstup ukonci znakom 'Q' alebo 'q'. Mena musia byt velkym pismenom."); char meno = '0'; int index = 0; do { scanf(" %c", &meno); //Ak je zadane male q alebo velke Q cyklus koncime a neporacujeme if (meno == 'q' || meno =='Q') break; int lok_index = dajPoziciu(meno, mena); //Zistime, ci uz ziak v poli mien je. //Ak je hodnota mensia ako 0, tak nie je, a musime ho tam pridat a zvacsime max. index. if (lok_index < 0) { lok_index = index; index++; } //toto by stacilo len v podmienke vyssie, lebo ak v danom indexe je, tak uz prepisujeme ten isty znak tym istym. ('A' prepiseme na 'A') mena[lok_index] = meno; int znamka; //Nacitame cislo znamku predaneho ciaka scanf(" %d",&znamka); //Ak bola znamka chybna, tak nepridavame tuto znamku if (znamka <1 || znamka > 5){ printf("Ziak '%c' ma nespravnu znamku '%d'. IGNORUJEM.", meno, znamka); } else { //Znamku cislo pripocitame k znamkam studenta znamky[lok_index] += znamka; //zvacsime pocet znamok, ktore mal student zadane pocetZnamok[lok_index]++; } } while (meno != 'q' && meno !='Q'); do { puts("Zadaj meno ziaka. Vstup ukonci znakom 'Q' alebo 'q'."); char volba; //Nacitame meno ziaka scanf(" %c", &volba); if (volba == 'q' || volba =='Q') break; //vypiseme info o tomto ziakovi, funkcia vypisuje pocet znamok a jeho priemer vypisZiaka(volba, mena, znamky, pocetZnamok); } while (1); puts("Koniec"); return 0; }