Advertisement
Numulix

Liste: utakmice

Dec 17th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct utakmica{
  5.     char domacin[100];
  6.     char gost[100];
  7.     int goloviDomacin;
  8.     int goloviGost;
  9.     struct utakmica *sledeci;
  10. } utakmica;
  11.  
  12. utakmica* napraviUtakmicu(char domacin[], char gost[], int goloviDomacin, int goloviGost) {
  13.     utakmica * novi = (utakmica *)malloc(sizeof (utakmica));
  14.     strcpy(novi->domacin,domacin);
  15.     strcpy(novi->gost,gost);
  16.     novi->goloviDomacin=goloviDomacin;
  17.     novi->goloviGost=goloviGost;
  18.     novi->sledeci = NULL;
  19.     return novi;
  20. }
  21.  
  22. utakmica * ubaciNaKraj(utakmica *pocetak, utakmica *novi) {
  23.     if (pocetak == NULL)
  24.         return novi;
  25.     utakmica * tmp = pocetak;
  26.     while (tmp->sledeci != NULL) {
  27.         tmp = tmp->sledeci;
  28.     }
  29.     tmp->sledeci = novi;
  30.     return pocetak;
  31. }
  32.  
  33. void ispisNeresenihUtakmica(utakmica *pocetak) {
  34.     utakmica *tmp=pocetak;
  35.     while (tmp!=NULL) {
  36.         if (tmp->goloviDomacin==tmp->goloviGost) ispisUtakmice(tmp);
  37.         tmp=tmp->sledeci;
  38.     }
  39. }
  40.  
  41. //vraca pokazivac na pocetni element liste
  42. utakmica* izbrisiGosta(utakmica *pocetak, char *imeTima) {
  43.     if (pocetak==NULL) {  //slucaj da je lista prazna
  44.         printf("Prazna lista\n");
  45.         return pocetak;
  46.     }
  47.     utakmica *tmp;
  48.     tmp=pocetak;
  49.     while (tmp->sledeci != NULL) {
  50.         if (strcmp(tmp->sledeci->gost,imeTima) == 0) {
  51.             utakmica * zaBrisanje = tmp->sledeci;  //utakmica koju brisem je tmp->sledeci
  52.             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
  53.             free(zaBrisanje);  //oslobadjam utakmicu
  54.         }
  55.         else tmp = tmp->sledeci;  //prelazim na narednu utakmicu ukoliko
  56.     }
  57.  
  58.     utakmica *noviPocetak=pocetak;
  59.     if (strcmp(pocetak->gost,imeTima)==0) {  //slucaj da je potrebno obrisati prvu utakmicu
  60.         noviPocetak=pocetak->sledeci;//funkcija vraca pokazivac na pocetni element liste, ukoliko obrisem prvi element, novi pocetak je onaj na koji je stari pocetak pokazivao
  61.         free(pocetak);  //oslobadjam pocetak jer je u toj utakmici trazeni tim bio gost
  62.     }
  63.     return noviPocetak;
  64. }
  65.  
  66. void ispisRezultata(utakmica *pocetak, char *imeTima) {
  67.     int pobeda,nereseno,poraz;
  68.     pobeda=nereseno=poraz=0;
  69.     utakmica *tmp=pocetak;
  70.     while (tmp!=NULL) {
  71.         if (strcmp(imeTima,tmp->domacin)==0) {  //ukoliko mi je trazeni tim domacin, proveravam rezultat te utakmice
  72.             if (tmp->goloviDomacin>tmp->goloviGost) pobeda++;
  73.             if (tmp->goloviDomacin<tmp->goloviGost) poraz++;
  74.             if (tmp->goloviDomacin==tmp->goloviGost) nereseno++;
  75.         }
  76.         if (strcmp(imeTima,tmp->gost)==0) {  //ukoliko mi je trazeni tim gost, proveravam rezultat te utakmice
  77.             if (tmp->goloviGost>tmp->goloviDomacin) pobeda++;
  78.             if (tmp->goloviGost<tmp->goloviDomacin) poraz++;
  79.             if (tmp->goloviGost==tmp->goloviDomacin) nereseno++;
  80.         }
  81.         tmp=tmp->sledeci;
  82.     }
  83.     printf("Tim %s ima %d pobedjenih, %d neresenih i %d izgubljenih utakmica\n", imeTima,pobeda,nereseno,poraz);
  84. }
  85.  
  86. void ispisUtakmice(utakmica *u) {
  87.     printf("%s:%s-%d:%d\n",u->domacin,u->gost,u->goloviDomacin,u->goloviGost);
  88. }
  89. void ispisListe(utakmica *pocetak) {
  90.     utakmica *tmp=pocetak;
  91.     while (tmp != NULL) {
  92.         ispisUtakmice(tmp);
  93.         tmp = tmp->sledeci;
  94.     }
  95. }
  96.  
  97. void brisanjeListe(utakmica *pocetak) {
  98.     utakmica * privremeni;
  99.     while (pocetak != NULL) {
  100.         privremeni = pocetak->sledeci;
  101.         free(pocetak);
  102.         pocetak = privremeni;
  103.     }
  104.     printf("\nObrisana lista.\n");
  105. }
  106. void ispisMenija() {
  107.     printf("Izaberite opciju:\n");
  108.     printf("(1)Citanje iz datoteke:\n");
  109.     printf("(2)Ispis liste:\n");
  110.     printf("(3)Ispis utakmica sa neresenim rezultatom:\n");
  111.     printf("(4)Brisanje utakmice gosta:\n");
  112.     printf("(5)Ispis poena za tim:\n");
  113.     printf("(0)Izlaz i brisanje liste:\n");
  114. }
  115. int main()
  116. {
  117.     int opcija;
  118.     ispisMenija();
  119.     scanf("%d", &opcija);
  120.     utakmica *pocetak= (utakmica*) malloc(sizeof(utakmica));
  121.     pocetak=NULL;
  122.     //pocetak liste je prazan
  123.     do {
  124.         if (opcija==1) {
  125.             char fileName[100];
  126.             printf("Unesite ime tekstualnog fajla:\n");
  127.             scanf("%s", fileName);
  128.             FILE *file=fopen(fileName,"r");
  129.             char parser[2]=",";
  130.             char linija[100],domacin[100],gost[100];
  131.             char  *token;
  132.             int goloviDomacin,goloviGost;
  133.             while (fgets(linija,100,file)!=NULL) {
  134.                 //iz linije vadim domacina
  135.                 token=strtok(linija,parser);
  136.                 strcpy(domacin,token);
  137.                 //iz linije vadim gosta
  138.                 token=strtok(NULL,parser);
  139.                 strcpy(gost,token);
  140.                 // iz linije vadim golove domacina
  141.                 token=strtok(NULL,parser);
  142.                 goloviDomacin=strtol(token,NULL,10);
  143.                 //iz linije vadim golove gosta
  144.                 token=strtok(NULL,parser);
  145.                 goloviGost=strtol(token,NULL,10);
  146.                 //pravimNovu utakmicu sa ovim vrednostima
  147.                 utakmica *nova=napraviUtakmicu(domacin,gost,goloviDomacin,goloviGost);
  148.                 //ubacujem novu utakmicu na kraj liste
  149.                 pocetak=ubaciNaKraj(pocetak,nova);
  150.             }
  151.         }
  152.         if (opcija==2) {
  153.             printf("Spisak svih utakmica:\n");
  154.             ispisListe(pocetak);
  155.             printf("\n");
  156.         }
  157.         if (opcija==3) {
  158.             printf("Spisak neresenih utakmica:\n");
  159.             ispisNeresenihUtakmica(pocetak);
  160.             printf("\n");
  161.         }
  162.         if (opcija==4) {
  163.             printf("Unesite ime tima za koji zelite da izbrisete utakmice gde je on bio gost:\n");
  164.             char ime[100];
  165.             scanf("%s", ime);
  166.             pocetak=izbrisiGosta(pocetak,ime);
  167.         }
  168.         if (opcija==5) {
  169.             printf("Unesite ime tima za koji zelite da vidite rezultat:\n");
  170.             char ime[100];
  171.             scanf("%s", ime);
  172.             ispisRezultata(pocetak,ime);
  173.             printf("\n");
  174.         }
  175.         ispisMenija();
  176.         scanf("%d", &opcija);
  177.     }while (opcija!=0);
  178.  
  179.  
  180.     //nakon zavrsetka potrebno je osloboditi listu
  181.     brisanjeListe(pocetak);
  182.  
  183.  
  184.     return 0;
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement