macrofish

necasova

Apr 23rd, 2013
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.23 KB | None | 0 0
  1. /*
  2.                 ***************************************
  3.    
  4.                     ZPRS-projekt: seznam hracu tymu
  5.                     author: Michaela Necasova
  6.                 ***************************************
  7. */
  8.  
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <stdlib.h>
  13.  
  14. #define MAX 20//max pocet hracu ktere se daji ulozit, lze menit
  15. typedef struct
  16. {
  17.         char jmeno[MAX];
  18.         char prijmeni[MAX];
  19.         int fauly;
  20.         int minuty;
  21.         int goly;
  22.         int asistence;
  23.         int body;
  24.         int strely;
  25.         double uspesnost; // %
  26.         double prinos;
  27. }seznam;//vytvori novy datovy typ s nazvem seznam
  28.  
  29. //funkci prototypy
  30. void tisk_tabulky();
  31. void tisk_seznamu(int pocet, seznam *p);
  32. void add(int *pocet, seznam *p);
  33. void nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(int pocet, seznam *p, char a);
  34.  
  35.  
  36.  
  37. void tisk_tabulky()//funkce ktera popise sloupce tabulky
  38. {
  39. printf("----------------------seznam hracu----------------------------:\n");
  40. printf("   |  Prijmeni |  Jmeno   | Goly   | Asistence |  Minuty  |  Fauly | Body \n"  );
  41. //| strely | uspesnost (goly/strely) | prinos (uspesnost*minuty) tyto hodnoty se netisknou v seznamu, ale jsou ulozeny ve strukture, je to tu jen pomocne napsano
  42. }
  43.  
  44. void tisk_seznamu(int pocet, seznam *p)//funkce ktera vytiskne udaje ve strukture
  45. {
  46.  
  47.         int i = 0;
  48.         for (i=0; i<pocet;i++)
  49.         {
  50.             printf("%d.  %11s|%10s|%8d|%11d|%10d|%8d|%4d\n",i+1,p[i].prijmeni,p[i].jmeno,p[i].goly, p[i].asistence,p[i].minuty,p[i].fauly, p[i].body);                
  51.         }
  52.         printf("-----------------------------------------------------------------------------------------:\n");
  53. }
  54.  
  55.  
  56. void add(int *pocet, seznam *p)//funkce prida hrace do seznamu,
  57. {
  58.         if (*pocet == MAX)//v pripade, ze je uz dosazen max pocet lidi, ktery se do te struktury vleze(hodnota MAX)..
  59.         {
  60.                 printf("seznam je jiz plny\n");//tak to vypise tohle a funkce skonci...
  61.         }
  62.         else//jinak se pokracuje tady
  63.         {
  64.         printf("zadejte prijmeni\n");
  65.         fflush(stdin);//funkce ktera vyprazdni ze zasobniku "enter" ktery tam zustal z predchoziho vlozeni do promenne, u nekterych to byt nemusi, ja to dal vsudue, protoze i kdyz to tam byt nemusi tak to nic nezkazi, abys to pochopila tak si jich par smaz, at vidis jaky to udela bordel
  66.         gets(p[*pocet].prijmeni);//nacte z klavesnice cely radek a ulozi ho do promenne, ktera je v zavorkach
  67.  
  68.         printf("zadejte jmeno\n");
  69.         fflush(stdin);
  70.         gets(p[*pocet].jmeno);
  71.  
  72.         printf("zadejte pocet golu\n");
  73.         fflush(stdin);
  74.         scanf("%d",&p[*pocet].goly);
  75.  
  76.         printf("zadejte pocet asistenci\n");
  77.         fflush(stdin);
  78.         scanf("%d",&p[*pocet].asistence);
  79.  
  80.         printf("zadejte pocet faulu\n");
  81.         fflush(stdin);
  82.         scanf("%d",&p[*pocet].fauly);
  83.  
  84.         printf("zadejte pocet odehranych minut\n");
  85.         fflush(stdin);
  86.         scanf("%d",&p[*pocet].minuty);
  87.  
  88.         printf("zadejte pocet strel na branku\n");
  89.         fflush(stdin);
  90.         scanf("%d",&p[*pocet].strely);
  91.  
  92.         p[*pocet].body= (p[*pocet].goly * 3)+ (p[*pocet].asistence); // do poctu bodu se uklada:3*pocet golu + 1*pocet asistenci(1gol=3body, 1 asistence = 1bod)
  93.  
  94.         if(p[*pocet].strely==0)//kdyz da nekdo 0 strel, automaticky ma uspesnost 0%, navic nulou nelze delit
  95.         {
  96.             p[*pocet].uspesnost=0;
  97.         }
  98.         else
  99.         {
  100.             double gol;
  101.             gol=(double)p[*pocet].goly;//pretypovani na double, protoze o par radku nahore je nacitam jako int
  102.             double str;
  103.             str=(double)p[*pocet].strely;//pretypovani na double, protoze o par radku nahore je nacitam jako int
  104.             p[*pocet].uspesnost= (gol)/(str)*100;//podelim goly/strely a vynasobim 100 abych ziskal hodnotu v procentech
  105.  
  106.         }  
  107.  
  108.         p[*pocet].prinos= ((p[*pocet].uspesnost)*(p[*pocet].minuty))/100;//prinos = uspesnost * odehrane minuty, musi se vydelit nulou protoze predtim sem uspesnost vynasobil 100 abych ziskal procenta
  109.         *pocet+=1;//a zvetsi pocet existujicich hracu o 1
  110.         }
  111. }
  112.  
  113. void nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(int pocet, seznam *p, char a)//jedna funkce na cele hledani, posilam tam char a, coz je promenna kterou pouzivam, kdyz se me to zepta jestli chci pridat hrace nebo najit takoveho a takoveho...a podle toho co tam je tak to vypisuje...
  114. {
  115.     int i;
  116.  
  117.     int pom1=0; //pomocna promenna kam se uklada pozice nejvytizenejsiho
  118.     int pom2=0;//nejmene vytizeneho
  119.     int pom3=0;//nejvic faulu
  120.     int pom4 = 0;//nejuspesnejsiho
  121.     int pom5=0;//nejuzitecnejsiho
  122.  
  123.     if (pocet==0)//kdyz neni nikdo v seznamu tak v nem nemuzes hledat...
  124.     {
  125.         printf("nelze hledat, seznam je prazdny");
  126.     }
  127.     else
  128.     {
  129.     int max= p[0].minuty; //tady se uklada prubezne hodnota poctu minut, ktera je nejvetsi...
  130.     int min = p[0].minuty;//ktera je nejmensi...
  131.     int faul=p[0].fauly;//nejvic faulu..
  132.     double uspech=p[0].uspesnost;//nejvetsi uspesnost
  133.     double prin=p[0].prinos;//.....
  134.     for(i =0; i <pocet; i++)//cyklus na hledani vsech minim a maxim
  135.     {
  136.         if(p[i].minuty>max)
  137.         {
  138.             max=p[i].minuty;
  139.             pom1=i;
  140.         }
  141.         if(p[i].minuty<min)
  142.         {
  143.             min=p[i].minuty;
  144.             pom2=i;
  145.         }
  146.         if(p[i].fauly>faul)
  147.         {
  148.             faul=p[i].fauly;
  149.             pom3=i;
  150.         }
  151.         if(p[i].uspesnost>uspech)
  152.         {
  153.             uspech=p[i].uspesnost;
  154.             pom4=i;
  155.         }
  156.         if (p[i].prinos>prin)
  157.         {
  158.             prin=p[i].prinos;
  159.             pom5=i;
  160.         }
  161.     }
  162.    
  163.  
  164.     if(a=='n')//kdyz si zadala ze chces dat nejvytizenejsiho, tak se vykona tohle...
  165.     {
  166.         printf("nejvytizenejsi hrac je:\n");
  167.         tisk_tabulky();
  168.         printf("%d.  %11s|%10s|%8d|%11d|%10d|%8d|%4d\n",1,p[pom1].prijmeni,p[pom1].jmeno,p[pom1].goly, p[pom1].asistence,p[pom1].minuty,p[pom1].fauly, p[pom1].body);
  169.     }
  170.     else if(a=='m')//kdyz nejmene vytizeneho, tak tohle...
  171.     {
  172.     printf("nejmene vytizeny hrac je:\n");
  173.     tisk_tabulky();
  174.     printf("%d.  %11s|%10s|%8d|%11d|%10d|%8d|%4d\n",1,p[pom2].prijmeni,p[pom2].jmeno,p[pom2].goly, p[pom2].asistence,p[pom2].minuty,p[pom2].fauly, p[pom2].body);
  175.     }
  176.     else if (a=='f')//atd..
  177.     {
  178.     printf("nejvice faulujici hrac je:\n");
  179.     tisk_tabulky();
  180.     printf("%d.  %11s|%10s|%8d|%11d|%10d|%8d|%4d\n",1,p[pom3].prijmeni,p[pom3].jmeno,p[pom3].goly, p[pom3].asistence,p[pom3].minuty,p[pom3].fauly, p[pom3].body);
  181.     }
  182.     else if (a=='r')//atd...
  183.     {
  184.     printf("hrac s nejvetsim prinosem pro tym je:\n");
  185.     tisk_tabulky();
  186.     printf("%d.  %11s|%10s|%8d|%11d|%10d|%8d|%4d\n",1,p[pom4].prijmeni,p[pom4].jmeno,p[pom4].goly, p[pom4].asistence,p[pom4].minuty,p[pom4].fauly, p[pom4].body);
  187.     printf ("s hodnotou  (uspesnost*minuty): %lf\n",p[pom4].prinos);
  188.     }
  189.     else if (a=='u')//atd..
  190.     {
  191.     printf("hrac s nejvetsi uspesnosti je:\n");
  192.     tisk_tabulky();
  193.     printf("%d.  %11s|%10s|%8d|%11d|%10d|%8d|%4d\n",1,p[pom5].prijmeni,p[pom5].jmeno,p[pom5].goly, p[pom5].asistence,p[pom5].minuty,p[pom5].fauly, p[pom5].body);
  194.     printf ("s hodnotou (goly/strely): %lf (v procentech)\n",p[pom5].uspesnost);
  195.     }
  196.     }
  197. }
  198.  
  199. int main()
  200. {
  201.  
  202.    seznam p[MAX];//vytvori pole struktur datoveho typu seznam a pojmenuje je p
  203.    int pocet = 0;//zde se uchovava aktuzalni pocet hracu v seznamu
  204.         char x;//promenna kde ukladas 'y' 'Y' pro pokracovani
  205.         char a;//promenna pouzivana pro rozhodovani, co chces udelat
  206.         printf("vitejte v seznamu hracu\n");
  207.         do
  208.         {
  209.         printf("stisknete 'p' pro pridani hrace, 'n' pro zobrazeni nejvytizenejsiho,'m' pro nejmene hrajiciho,\n 'u' pro nejuspesnejsiho hrace, 'f pro nejvice faulujiciho\n a 'r' pro hrace s nejvetsim prinosem pro tym'\n");
  210.         scanf("%c",&a);
  211.         switch (a)
  212.         {
  213.         case 'p':
  214.                 {
  215.                         system("cls");//vymaze obrazovku
  216.                         add(&pocet,p);//zavola funkci add
  217.                         tisk_tabulky();//vytisne tabulku
  218.                         tisk_seznamu(pocet,p);//avytiskne vsechny polozky struktury
  219.                         break;
  220.                 }
  221.  
  222.         case 'n':
  223.                 {
  224.                         system("cls");
  225.                         nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(pocet, p, a);     //zavola tu funkci             
  226.                         break;
  227.                 }
  228.  
  229.         case 'm':
  230.                 {
  231.                         system("cls");
  232.                         nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(pocet, p, a);//zavola tu funkci  
  233.                         break;
  234.                 }
  235.  
  236.         case 'u':
  237.                 {
  238.                         system("cls");
  239.                         nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(pocet, p, a);//zavola tu funkci  
  240.                         break;
  241.                 }
  242.         case 'f':
  243.                 {
  244.                         system("cls");
  245.                         nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(pocet, p, a); //zavola tu funkci                     
  246.                         break;
  247.                 }
  248.  
  249.         case 'r':
  250.                 {
  251.                         system("cls");
  252.                         nejvice_nejmene_hrajici_maxFauly_prinos_uspesnost(pocet, p, a);//zavola tu funkci  
  253.                         break;
  254.                 }
  255.         default:
  256.             {
  257.                 printf("spatne zadani\n");//kdybys zadala neco jineho tak ti to rekne spatne zadani
  258.             }
  259.         }
  260.  
  261.         printf("chcete pokracovat? 'y'/ 'Y' pro ano\n");
  262.         fflush(stdin);
  263.         scanf("%c",&x);
  264.         fflush(stdin);
  265.         system("cls");
  266.         }while (x == 'y' || x == 'Y');
  267.  
  268.         return 0;
  269. }
  270. /*
  271. pozn:
  272. void tisk_seznamu(int pocet, seznam *p)
  273. void add(int *pocet, seznam *p)
  274.  
  275. v jedne je int pocet a v druhe int *pocet (s hvezdickou)
  276.  
  277. a ta kde neni hvezdicka tak se funkce vola:
  278. tisk_seznamu(pocet,p);
  279.  
  280. a tam kde je se vola:
  281. add(&pocet,p)
  282.  
  283. v tom je velky rozdil, verze s hvezdickou by fungovala vzdy, ale verze bez hvezdicky by tam, kde ji mam nefungovala
  284. protoze kdyz se funkce napise bez hvezdicky, tak se ta promenna pocet nakopiruje do te funkce, kde ji muzes jakkoli zvetsovat, zmensovat atd
  285. ale jak funkce skonci, tak se ta nakopirovana hodnota smaze a v programu by byla zase ta puvodni hodnota, takze kdybys
  286. tu funkci na pridani noveho hrace napsala bez te hvezdicky, tak bys mela treba pocet = 0 (zatim bys nemela zadneho hrace), ve funkci by
  287. se hodnota pocet zvetsila o +1, takze bys mela pocet hracu 1, ale jakmile by program skoncil, tak v te hlavni promenne, ktera plati
  288. pro cely program a ktera se bude dal posilat do dalsich funkci, tak by tam bylo porad 0
  289.  
  290. &pocet=ziskani adresy, kde je ulozena promenna pocet
  291. *pocet=ziskani hodnoty, ktera je ulozene na adrese
  292.  
  293. add(&pocet,p): tady posilam do funkce adresu, kde je ulozena ta hlavni promenna pocet,  a pak pomoci *pocet tu hodnotu na adrese zvetsim o jedno nebo k ni pristupuju
  294.  
  295. asi to neni moc pochopitelne bo to je docela slozite, ale jinak to napsat nejde no.....
  296.  
  297.  
  298. */
Advertisement
Add Comment
Please, Sign In to add comment