Advertisement
Guest User

Untitled

a guest
Nov 21st, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.72 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5.  
  6.  
  7. typedef struct player{
  8.     int mez;
  9.     char nev[42];
  10.     int dobottgolok;
  11.     struct player *next;
  12. }player;
  13.  
  14. typedef struct {
  15.     int mez;
  16.     int ido;
  17. }gol;
  18.  
  19. player *uj_elem_mez(char puffer[], player *head)                            //fajlbol a mezszamot adja a listahoz
  20. {
  21.     player *p;
  22.     p =(player*)malloc(sizeof(player));
  23.     sscanf(puffer, "%d", &(p->mez));
  24.     p->next=head;
  25.     head=p;
  26.     return head;
  27. }
  28.  
  29.  
  30. player *uj_elem_nev(char puffer[], player *head)                            //fajlbol a nevet adja a listahoz
  31. {
  32.     player *p;
  33.     p =(player*)malloc(sizeof(player));
  34.     sscanf(puffer, "%s", p->nev);
  35.     p->next=head;
  36.     head=p;
  37.     return head;
  38. }
  39.  
  40.  
  41. player *beolvas(char *fname)                                                //beolvassa a binaris fajlbol a jatekosok tombbe
  42. {
  43.     FILE *file;
  44.    
  45.     player *head;
  46.     head=NULL;
  47.    
  48.     int db=17;
  49.     int i;
  50.     char puffer[50];
  51.     char puffer2[10];
  52.    
  53.     file=fopen(fname,"rb");
  54.     if (file == NULL)
  55.     {
  56.         printf("Nem sikerult megnyitni a binaris fajlt. :(\n");
  57.         return 1;
  58.     }
  59.    
  60.     for(i=0;i<db;++i)
  61.     {
  62.         fgets(puffer, 10, file);
  63.         head =uj_elem_mez(puffer, head);
  64.         fgets(head->nev, 42, file);
  65.         head->dobottgolok = 0;
  66.     }
  67.    
  68.     fclose(file);
  69.    
  70.     return head;
  71. }
  72.  
  73.  
  74. gol *golbeolvaso(char *fname2, double *goldarab)                            //beolvassa a szoveges fileból a golok tombbe
  75. {
  76.     FILE *file;
  77.    
  78.     int i;
  79.     char puffer[50];
  80.     int goldb;
  81.     gol *golok;
  82.     file=fopen(fname2,"r");
  83.    
  84.     fgets(puffer, "%lf", file);
  85.     sscanf(puffer, "%d", &goldb);
  86.     golok = (gol*)malloc(goldb*sizeof(gol));
  87.    
  88.     for(i=0;i<goldb;++i)
  89.     {
  90.         fgets(puffer, 10, file);
  91.         sscanf(puffer, "%d", &golok[i].ido);
  92.         fgets(puffer, 10, file);
  93.         sscanf(puffer,"%d", &golok[i].mez);
  94.     }
  95.     *goldarab = goldb;
  96.     fclose(file);
  97.     return golok;
  98. }
  99.  
  100.  
  101. void printlist(player *head)                                               //kiirja a listat stdout-ra
  102. {
  103.     player *p;
  104.     p = head;
  105.     if (head != NULL)
  106.     {
  107.         while (p != NULL)
  108.         {
  109.             printf("\n%d. szamu jatekos\n", p->mez);
  110.             printf("%s", p->nev);
  111.             printf("%d gol\n", p->dobottgolok);
  112.             p=p->next;
  113.         }
  114.     }
  115. }
  116.  
  117. void golhozzarendelo(gol *golok, player *head, double *goldarab)         //a strukturaba irja hogy hany golt dobott
  118. {
  119.     int i;
  120.     player *p;
  121.     p=head;
  122.     for (i=0;i<*goldarab;i++)
  123.     {
  124.         while (golok[i].mez != p->mez)
  125.             p = p->next;
  126.         (p->dobottgolok) = (p->dobottgolok) + 1;
  127.         p = head;
  128.     }
  129. }
  130.  
  131. double golszerzo(player *head)                                  //megszamolja hanyan dobtak golt a meccs alatt
  132. {
  133.     player *p;
  134.     p=head;
  135.     double gollovo;
  136.     gollovo = 0;
  137.     while (p->next != NULL)
  138.     {
  139.         if (p->dobottgolok != 0)
  140.             gollovo++;
  141.         p = p->next;
  142.     }
  143.    
  144.     return gollovo;
  145. }
  146.  
  147. double atlagszamolo(double gollovo, double goldarab)            // kiszamolja hogy egy jatekosra hany gol jut
  148. {                                                               // csak azok kozul akik dobtak golt
  149.     double atlag;
  150.     atlag=goldarab/gollovo;
  151.     return atlag;
  152. }
  153.  
  154. void bigger_than_atlag(player *head, double atlag)              // kiirja azokat a jatekosokat akik az atlagnal
  155. {                                                               // tobb golt szereztek
  156.     player *p;
  157.     p=head;
  158.     printf("Az atlagnal tobb golt dobo jatekosok:\n");
  159.     while (p->next != NULL)
  160.     {
  161.         if ((p->dobottgolok) >= atlag)
  162.             printf("%s\n", p->nev);
  163.         p=p->next;
  164.     }
  165. }
  166.  
  167. void playerfree(player* head)                                   // visszaadja a playerbol allo listat
  168. {
  169.     player *p;
  170.     p=head;
  171.     while (p->next != NULL)
  172.     {
  173.         head = p->next;
  174.         free(p);
  175.         p=head;
  176.     }
  177. }
  178.  
  179.  
  180. int main()
  181. {
  182.     char *fname = "jatekosok.dat";
  183.     char *fname2 = "golok.txt";
  184.     double gollovo;
  185.     double atlag;
  186.     double goldarab;
  187.     player *head;
  188.     gol *golok;
  189.     char exit;
  190.    
  191.     head = beolvas(fname);
  192.     golok = golbeolvaso(fname2, &goldarab);
  193.     golhozzarendelo(golok, head, &goldarab);
  194.     //printlist(head);                                              // lista kiiro
  195.     gollovo = golszerzo(head);
  196.     atlag = atlagszamolo(gollovo, goldarab);
  197.     printf("\n%f az atlag\n%f jatekos lott golt, %f gol\n\n", atlag, gollovo, goldarab);
  198.     bigger_than_atlag(head, atlag);
  199.     free(golok);
  200.     playerfree(head);
  201.    
  202.     scanf("%c", &exit);
  203.     return 0;
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement