Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct utakmica{
- char domacin[100];
- char gost[100];
- int goloviDomacin;
- int goloviGost;
- struct utakmica *sledeci;
- } utakmica;
- utakmica* napraviUtakmicu(char domacin[], char gost[], int goloviDomacin, int goloviGost) {
- utakmica * novi = (utakmica *)malloc(sizeof (utakmica));
- strcpy(novi->domacin,domacin);
- strcpy(novi->gost,gost);
- novi->goloviDomacin=goloviDomacin;
- novi->goloviGost=goloviGost;
- novi->sledeci = NULL;
- return novi;
- }
- utakmica * ubaciNaKraj(utakmica *pocetak, utakmica *novi) {
- if (pocetak == NULL)
- return novi;
- utakmica * tmp = pocetak;
- while (tmp->sledeci != NULL) {
- tmp = tmp->sledeci;
- }
- tmp->sledeci = novi;
- return pocetak;
- }
- void ispisNeresenihUtakmica(utakmica *pocetak) {
- utakmica *tmp=pocetak;
- while (tmp!=NULL) {
- if (tmp->goloviDomacin==tmp->goloviGost) ispisUtakmice(tmp);
- tmp=tmp->sledeci;
- }
- }
- //vraca pokazivac na pocetni element liste
- utakmica* izbrisiGosta(utakmica *pocetak, char *imeTima) {
- if (pocetak==NULL) { //slucaj da je lista prazna
- printf("Prazna lista\n");
- return pocetak;
- }
- utakmica *tmp;
- tmp=pocetak;
- while (tmp->sledeci != NULL) {
- if (strcmp(tmp->sledeci->gost,imeTima) == 0) {
- utakmica * zaBrisanje = tmp->sledeci; //utakmica koju brisem je tmp->sledeci
- tmp->sledeci = zaBrisanje->sledeci; //tmp mi je utakmica pre one koju brisem, potrebno mi je da prespojim, da mi temp sada pokazuje na sledecu utakmice koju brisem
- free(zaBrisanje); //oslobadjam utakmicu
- }
- else tmp = tmp->sledeci; //prelazim na narednu utakmicu ukoliko
- }
- utakmica *noviPocetak=pocetak;
- if (strcmp(pocetak->gost,imeTima)==0) { //slucaj da je potrebno obrisati prvu utakmicu
- noviPocetak=pocetak->sledeci;//funkcija vraca pokazivac na pocetni element liste, ukoliko obrisem prvi element, novi pocetak je onaj na koji je stari pocetak pokazivao
- free(pocetak); //oslobadjam pocetak jer je u toj utakmici trazeni tim bio gost
- }
- return noviPocetak;
- }
- void ispisRezultata(utakmica *pocetak, char *imeTima) {
- int pobeda,nereseno,poraz;
- pobeda=nereseno=poraz=0;
- utakmica *tmp=pocetak;
- while (tmp!=NULL) {
- if (strcmp(imeTima,tmp->domacin)==0) { //ukoliko mi je trazeni tim domacin, proveravam rezultat te utakmice
- if (tmp->goloviDomacin>tmp->goloviGost) pobeda++;
- if (tmp->goloviDomacin<tmp->goloviGost) poraz++;
- if (tmp->goloviDomacin==tmp->goloviGost) nereseno++;
- }
- if (strcmp(imeTima,tmp->gost)==0) { //ukoliko mi je trazeni tim gost, proveravam rezultat te utakmice
- if (tmp->goloviGost>tmp->goloviDomacin) pobeda++;
- if (tmp->goloviGost<tmp->goloviDomacin) poraz++;
- if (tmp->goloviGost==tmp->goloviDomacin) nereseno++;
- }
- tmp=tmp->sledeci;
- }
- printf("Tim %s ima %d pobedjenih, %d neresenih i %d izgubljenih utakmica\n", imeTima,pobeda,nereseno,poraz);
- }
- void ispisUtakmice(utakmica *u) {
- printf("%s:%s-%d:%d\n",u->domacin,u->gost,u->goloviDomacin,u->goloviGost);
- }
- void ispisListe(utakmica *pocetak) {
- utakmica *tmp=pocetak;
- while (tmp != NULL) {
- ispisUtakmice(tmp);
- tmp = tmp->sledeci;
- }
- }
- void brisanjeListe(utakmica *pocetak) {
- utakmica * privremeni;
- while (pocetak != NULL) {
- privremeni = pocetak->sledeci;
- free(pocetak);
- pocetak = privremeni;
- }
- printf("\nObrisana lista.\n");
- }
- void ispisMenija() {
- printf("Izaberite opciju:\n");
- printf("(1)Citanje iz datoteke:\n");
- printf("(2)Ispis liste:\n");
- printf("(3)Ispis utakmica sa neresenim rezultatom:\n");
- printf("(4)Brisanje utakmice gosta:\n");
- printf("(5)Ispis poena za tim:\n");
- printf("(0)Izlaz i brisanje liste:\n");
- }
- int main()
- {
- int opcija;
- ispisMenija();
- scanf("%d", &opcija);
- utakmica *pocetak= (utakmica*) malloc(sizeof(utakmica));
- pocetak=NULL;
- //pocetak liste je prazan
- do {
- if (opcija==1) {
- char fileName[100];
- printf("Unesite ime tekstualnog fajla:\n");
- scanf("%s", fileName);
- FILE *file=fopen(fileName,"r");
- char parser[2]=",";
- char linija[100],domacin[100],gost[100];
- char *token;
- int goloviDomacin,goloviGost;
- while (fgets(linija,100,file)!=NULL) {
- //iz linije vadim domacina
- token=strtok(linija,parser);
- strcpy(domacin,token);
- //iz linije vadim gosta
- token=strtok(NULL,parser);
- strcpy(gost,token);
- // iz linije vadim golove domacina
- token=strtok(NULL,parser);
- goloviDomacin=strtol(token,NULL,10);
- //iz linije vadim golove gosta
- token=strtok(NULL,parser);
- goloviGost=strtol(token,NULL,10);
- //pravimNovu utakmicu sa ovim vrednostima
- utakmica *nova=napraviUtakmicu(domacin,gost,goloviDomacin,goloviGost);
- //ubacujem novu utakmicu na kraj liste
- pocetak=ubaciNaKraj(pocetak,nova);
- }
- }
- if (opcija==2) {
- printf("Spisak svih utakmica:\n");
- ispisListe(pocetak);
- printf("\n");
- }
- if (opcija==3) {
- printf("Spisak neresenih utakmica:\n");
- ispisNeresenihUtakmica(pocetak);
- printf("\n");
- }
- if (opcija==4) {
- printf("Unesite ime tima za koji zelite da izbrisete utakmice gde je on bio gost:\n");
- char ime[100];
- scanf("%s", ime);
- pocetak=izbrisiGosta(pocetak,ime);
- }
- if (opcija==5) {
- printf("Unesite ime tima za koji zelite da vidite rezultat:\n");
- char ime[100];
- scanf("%s", ime);
- ispisRezultata(pocetak,ime);
- printf("\n");
- }
- ispisMenija();
- scanf("%d", &opcija);
- }while (opcija!=0);
- //nakon zavrsetka potrebno je osloboditi listu
- brisanjeListe(pocetak);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement