Guest User

Untitled

a guest
Apr 26th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.82 KB | None | 0 0
  1. /*Hány Euró volt a számla összege annak a gyereknek az esetében,
  2. akinek a lakcíme a leginkább keletre esett azok közül a gyerekek közül,
  3. akiket arról a bázisról szolgáltak ki, ahonnan a legtöbb gyereknek szállítottak ajándékot.*/
  4.  
  5. #include <stdio.h>
  6. #include <malloc.h>
  7. #include <math.h>
  8.  
  9. /*strukturak*/
  10. typedef struct bazis{
  11.     unsigned int x,y;
  12.     int ajandekszam;
  13.     struct hazikok *elsohaz;
  14.     struct bazis *next;
  15. } bazis;
  16. typedef struct hazikok{
  17.     unsigned int x,y;
  18.     struct ajandekok* ajandeklista;
  19.     int fizetett;
  20.     int jartitt;
  21.     struct hazikok *next;
  22. } hazikok;
  23. struct ajandekok {
  24.     char ajandek;
  25.     struct ajandekok* next;
  26. };
  27.  
  28. /*deklaraciok*/
  29. bazis *bazisok;
  30. struct ajandekok *elsoajandek;
  31. unsigned int price[26];
  32.  
  33. /*beolvasofuggvenyek*/
  34. bazis* bazisbeolvas()
  35. {
  36.     FILE *basedat = fopen("BASE.DAT","rb");
  37.     unsigned int x,y;
  38.     struct bazis* bazisbe = (struct bazis*)calloc(sizeof(struct bazis),1);
  39.     struct bazis* bazishead = bazisbe;
  40.  
  41.     while ( fread(&x,sizeof(x),1,basedat) == 1 && fread(&y,sizeof(y),1,basedat) == 1 )
  42.     {
  43.         struct bazis* kovi = (struct bazis*)calloc(sizeof(struct bazis),1);
  44.  
  45.         bazisbe->x = x;
  46.         bazisbe->y = y;
  47.         bazisbe->ajandekszam = 0;
  48.         bazisbe->elsohaz = NULL;
  49.         bazisbe->next = kovi;
  50.         bazisbe = kovi;
  51.     }
  52.     bazisbe->next = NULL;
  53.  
  54.     fclose(basedat);
  55.     return bazishead;
  56. }
  57. struct ajandekok* readajandek(FILE* gifttxt)
  58. {
  59.     struct ajandekok* ajandek = (struct ajandekok*)calloc(sizeof(struct ajandekok),1);
  60.     struct ajandekok* ajandekkhead = ajandek;
  61.     char betu;
  62.  
  63.  
  64.     while ( (betu = fgetc(gifttxt)) != '\n')
  65.     {
  66.         struct ajandekok* kovi = (struct ajandekok*)calloc(sizeof(struct ajandekok),1);
  67.  
  68.         if (betu == ' ')
  69.             continue;
  70.  
  71.         ajandek->ajandek=betu;
  72.  
  73.         ajandek->next=kovi;
  74.         ajandek=kovi;
  75.     }
  76.     ajandek->next = NULL;
  77.     return ajandekkhead;
  78. }
  79. hazikok* readhazak()
  80. {
  81.     FILE *gifttxt = fopen("GIFT.TXT","r");
  82.     hazikok* egyhaz = (hazikok*)calloc(sizeof(hazikok),1);
  83.     hazikok* elsohaz = egyhaz;
  84.     hazikok* kovi = NULL;
  85.     int i=0;
  86.     int is_eof = 0;
  87.  
  88.     while( !is_eof )
  89.     {
  90.         switch(i%3)
  91.         {
  92.         case 0:
  93.             kovi = (hazikok*)calloc(sizeof(hazikok),1);
  94.             if (fscanf(gifttxt,"%u %u\n",&egyhaz->x,&egyhaz->y) != 2)
  95.                 is_eof = 1;
  96.            
  97.             break;
  98.         case 1:
  99.             egyhaz->ajandeklista = readajandek(gifttxt);
  100.             break;
  101.         case 2:
  102.             if (fscanf(gifttxt,"%u\n",&egyhaz->fizetett) != 1)
  103.                 is_eof = 1;
  104.             egyhaz->next = kovi;
  105.             egyhaz = kovi;
  106.             break;
  107.         }
  108.  
  109.         ++i;
  110.     }
  111.     egyhaz->next = NULL;
  112.  
  113.     fclose(gifttxt);
  114.     return elsohaz;
  115. }
  116. void readprice(unsigned int price[26])
  117. {
  118.     FILE *pricedat = fopen("PRICE.DAT","rb");
  119.     int i;
  120.  
  121.     for(i=0; i<27; ++i)
  122.     {
  123.         fread(&price[i],sizeof(price[i]),1,pricedat);
  124.     }
  125.  
  126.     fclose(pricedat);
  127. }
  128.  
  129. hazikok* legkelet(hazikok* elsohaz){
  130.     hazikok*keleti=elsohaz;
  131.     hazikok*futo=elsohaz;
  132.     while (futo){
  133.         if(keleti->y < futo->y)
  134.             keleti=futo;
  135.         futo=futo->next;
  136.     }
  137.     return keleti;
  138. }
  139. unsigned int tavnegyzet(long int x1,long int y1,long int x2,long int y2){
  140.     return (((x1)-(x2))*((x1)-(x2))+((y1)-(y2))*((y1)-(y2)));
  141. }
  142. bazis *legkozelebbibazis(int x,int y){
  143.     bazis *bazfut,*min;
  144.     min=bazisok;
  145.     bazfut=min;
  146.     while (bazfut!=NULL){
  147.         if(!(x==bazfut->x && y==bazfut->y) && tavnegyzet(x,y,bazfut->x,bazfut->y)<tavnegyzet(x,y,min->x,min->y)){
  148.             min=bazfut;
  149.         }
  150.         bazfut=bazfut->next;
  151.     }
  152.     return min;
  153. }
  154. hazikok *legkozelebbihaz2(hazikok* hazlista, hazikok* egyhaz){
  155.     hazikok* min=hazlista;
  156.     hazikok* futo=hazlista;
  157.     hazikok* vizsg=egyhaz;
  158.     egyhaz->jartitt=1;
  159.     while(futo!=NULL){
  160.         if (/*!(vizsg->x==futo->x && vizsg->y==futo->y) && */tavnegyzet(vizsg->x,vizsg->y,futo->x,futo->y)<tavnegyzet(vizsg->x,vizsg->y,min->x,min->y) && futo->jartitt!=1){
  161.             min=futo;      
  162.         }
  163.         futo=futo->next;
  164.     }
  165.     min->jartitt=1;
  166.     return min;
  167. }
  168. hazikok *legkozelebbihaz3(hazikok* hazlista, hazikok* egyhaz){
  169.     hazikok* min=hazlista;
  170.     hazikok* futo=hazlista;
  171.     hazikok* vizsg=egyhaz;
  172.     while(futo!=NULL){
  173.         if (!(vizsg->x==futo->x && vizsg->y==futo->y) && tavnegyzet(vizsg->x,vizsg->y,futo->x,futo->y)<tavnegyzet(vizsg->x,vizsg->y,min->x,min->y) && futo->jartitt!=1){
  174.             min=futo;      
  175.         }
  176.         futo=futo->next;
  177.     }
  178.     return min;
  179. }
  180. void elhelyez(hazikok *hazlista){
  181.     bazis *ide;
  182.     hazikok *futi;
  183.     hazikok *futo;
  184.     futo=hazlista;
  185.     while (futo!=NULL){
  186.         ide=legkozelebbibazis(futo->x, futo->y);
  187.    
  188.             if (ide->elsohaz==NULL)
  189.             {
  190.                 ide->elsohaz=futo;
  191.                 futo=futo->next;
  192.                 ide->elsohaz->next=NULL;
  193.                
  194.             }
  195.             else
  196.             {
  197.                 futi=ide->elsohaz;
  198.                 while (futi->next!=NULL){
  199.                     futi=futi->next;
  200.                 }
  201.                 futi->next=futo;
  202.                 futo=futo->next;
  203.                 futi->next->next=NULL;
  204.    
  205.             }
  206.         }
  207.     }
  208. int hazszamlalo(hazikok *haz){
  209.     int i=0;
  210.     hazikok *futo;
  211.         futo=haz;
  212.         while(futo!=NULL){
  213.             i++;
  214.             futo=futo->next;
  215.         }
  216.         return i;
  217. }
  218. void hazszambeiro(bazis *egybazis){
  219.     bazis *futo;
  220.     futo=egybazis;
  221.     while (futo!=NULL){
  222.         /*if (futo->next!=NULL){*/
  223.             futo->ajandekszam=hazszamlalo(futo->elsohaz);
  224.         /*  }*/
  225.         futo=futo->next;
  226.         }
  227.    
  228. }
  229. bazis* legtobbgyerekesbazis(bazis *egybazis){
  230.     bazis * legtobb;
  231.     bazis *futo;
  232.     legtobb=egybazis;
  233.     futo=egybazis;
  234.         while (!(futo->next==NULL)){
  235.             if (futo->ajandekszam>legtobb->ajandekszam){
  236.                 legtobb=futo;}
  237.             else {}
  238.             futo=futo->next;
  239.         }
  240.         return legtobb;
  241. }
  242. int utikoltseg(unsigned int tavolsag){
  243. return ((int)ceil(sqrt(tavolsag)/1000))*2;
  244. }
  245. unsigned int tavkereso(bazis *fobazis, hazikok *egyhaz){
  246.     hazikok *keresetthaz=egyhaz;
  247.     hazikok *elsohaz;
  248.     hazikok hazu;
  249.     hazikok *bazishaz=&hazu;
  250.     hazikok *mozgo;
  251.     bazishaz->x=fobazis->x;
  252.     bazishaz->y=fobazis->y;
  253.     elsohaz=legkozelebbihaz2(fobazis->elsohaz,bazishaz);
  254.     elsohaz->jartitt=1;
  255.     mozgo=elsohaz;
  256. if(mozgo==keresetthaz){
  257.     return tavnegyzet(bazishaz->x,bazishaz->y,mozgo->x,mozgo->y);
  258. }
  259. else{
  260.     while (legkozelebbihaz3(fobazis->elsohaz,mozgo)!=keresetthaz){
  261.         mozgo=legkozelebbihaz2(fobazis->elsohaz,mozgo);
  262.        
  263.     }
  264.     return tavnegyzet(mozgo->x,mozgo->y,keresetthaz->x,keresetthaz->y);
  265. }
  266.  
  267. }
  268. unsigned int tavkereso2(bazis *fobazis, hazikok *egyhaz){
  269.     hazikok *keresetthaz=egyhaz;
  270.     hazikok *mozgo=fobazis->elsohaz;
  271.    
  272. if(fobazis->elsohaz==keresetthaz){
  273.     return tavnegyzet(fobazis->x,fobazis->y,keresetthaz->x,keresetthaz->y);
  274. }
  275. else{
  276.     while (legkozelebbihaz3(fobazis->elsohaz,mozgo)!=keresetthaz){
  277.         mozgo=legkozelebbihaz2(fobazis->elsohaz,mozgo);
  278.        
  279.     }
  280.     return tavnegyzet(mozgo->x,mozgo->y,keresetthaz->x,keresetthaz->y);
  281. }
  282.  
  283. }
  284. int szamlaosszeg (hazikok* haz, int koltseg){
  285.     hazikok*behaz=haz;
  286.     int befizetett=behaz->fizetett;
  287.     int befizetettketto=behaz->fizetett;
  288.     befizetett=befizetett-koltseg;
  289.     printf("%d", befizetett);
  290.     while (behaz->ajandeklista!=NULL && (befizetett > price[behaz->ajandeklista->ajandek - 'A'])){
  291.         befizetett=befizetett-(price[(behaz->ajandeklista->ajandek)-'A']);
  292.         behaz->ajandeklista=behaz->ajandeklista->next;
  293.         printf("%d\n", befizetett);
  294.         }
  295.     return (befizetettketto-befizetett);
  296. }
  297.  
  298. int main(){
  299.     bazis* leghazb;
  300.     hazikok* keletihaz;
  301.     int tav=0;
  302.     int utikolts;
  303. bazis* tesztbazis;
  304.     readprice(price);
  305.     bazisok=bazisbeolvas();
  306.  
  307.     elhelyez(readhazak());
  308.     hazszambeiro(bazisok);
  309.     tesztbazis=bazisok;
  310.     while (tesztbazis){
  311.         printf("BAZIS\n");
  312.         printf("%d gyerek\n",tesztbazis->ajandekszam);
  313.         if (tesztbazis->elsohaz){
  314.             printf("%d fizetett\n",tesztbazis->elsohaz->fizetett);}
  315.         /*printf("%d gyerek\n",tesztbazis->);*/
  316.         tesztbazis=tesztbazis->next;
  317.     printf("\n");}
  318.     printf("-----------%d\n", bazisok->next->next->elsohaz->x);
  319.     printf("-----------%d\n", bazisok->next->next->elsohaz->y);
  320.     printf("-----------%d\n", bazisok->next->next->elsohaz->fizetett);
  321.     leghazb=(legtobbgyerekesbazis(bazisok));
  322.     printf("leghazb %d\n", leghazb->elsohaz->fizetett);
  323.     keletihaz=(legkelet(leghazb->elsohaz));
  324.     printf("legkeleti %d\n", keletihaz->fizetett);
  325.     tav=tavkereso(leghazb,keletihaz);
  326.     utikolts=utikoltseg(tav);
  327.     printf("%d\n", utikolts);
  328.     printf("%d\n",szamlaosszeg(keletihaz, utikolts));
  329.     getchar();
  330.   return 0;
  331. }
Add Comment
Please, Sign In to add comment