Guest User

Untitled

a guest
Apr 26th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 27.72 KB | None | 0 0
  1.     #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <math.h>
  4.  
  5.     /*Bazisok lancolt listaja*/
  6.     typedef struct bazis
  7.     {
  8.             unsigned sorszam; /*bazis sorszama*/
  9.             unsigned koord_ed; /*bazis E-D koordinataja*/
  10.             unsigned koord_kny; /*bazis K-Ny koordinataja*/
  11.             unsigned befizetes; /*bazisra erkezett osszbefizetes*/
  12.             struct rendeles *rendelesek; /*figyelni!!!*/
  13.             struct bazis *kovetkezo;
  14.     }bazis;
  15.  
  16.     typedef struct ajandek
  17.     {
  18.             unsigned sorszam; /*rendeles sorszama (melyik rendeles tartalmazza)*/
  19.             unsigned ar; /*a rendelt termek ara*/
  20.             struct ajandek *kovetkezo;
  21.     }ajandek;
  22.  
  23.     typedef struct rendeles
  24.     {
  25.             unsigned sorszam; /*rendeles sorszama*/
  26.             unsigned koord_ed; /*rendeles E-D koordinataja*/
  27.             unsigned koord_kny; /*rendeles K-Ny koordinataja*/
  28.             unsigned osszeg; /*szulok altal mellekelt osszeg*/
  29.             unsigned bazis; /*hozzatartozo bazis sorszamat tartalmazza*/
  30.             int lista[26];
  31.             unsigned seged; /*ebben tarolom, hogy mennyi penz maradt az ajandekokra*/
  32.             unsigned megoldas;
  33.             struct rendeles *kovetkezo;
  34.     }rendeles;
  35.  
  36.     /* double n_gyok(double m)
  37.     {
  38.             double i=0;
  39.             int j;
  40.             double x1,x2;
  41.             while( (i*i) <= m )
  42.                     i = i+0.1;
  43.             x1=i;
  44.             for(j=0;j<10;j++)
  45.             {
  46.             x2=m;
  47.                     x2 = x2/x1;
  48.                     x2 = x2+x1;
  49.                     x2 = x2/2;
  50.                     x1 = x2;
  51.             }
  52.  
  53.             return x2;
  54.     } */
  55.  
  56.     double tavolsag(double ed_bazis, double kny_bazis, double ed_rendeles, double kny_rendeles)   /*kiszamolja a megadott ket pont tavolsagat a koordinata rendszerben*/
  57.     {
  58.             double x;
  59.             x = sqrt((ed_rendeles-ed_bazis)*(ed_rendeles-ed_bazis) + (kny_rendeles-kny_bazis)*(kny_rendeles-kny_bazis));
  60.     /*      printf("%lf\n", x); */
  61.             return x;
  62.     }
  63.  
  64.     void kiszallitas_koltseg(struct bazis *gyoker){ /*kiszamolja, hogy az egyes rendelesek utikoltsege mennyi, es igy eltarolja, hogy mennyi penz marad az ajandekokra*/
  65.             struct bazis *p_bazis=gyoker; /*bazis lancolt lista futovaltozo*/
  66.             struct rendeles *p_rendeles=0, *p_elozo=0; /*rendeles lancolt lista futovaltozo es segedvaltozo az utak bejarasahoz*/
  67.             double tav=0, mintav=0; /*tav: 2 pont tavolsaga, mintav: egy ponttol a legkisebb tavolsagra levo pont tavolsaga*/
  68.             unsigned minsorszam=0; /*adott ponthoz a legkozelebb levo pont tavolsaga*/
  69.             int n, i; /*segedvaltozok*/
  70.  
  71.     /*      printf("\n meg van hivva\n"); */
  72.             while(p_bazis){ /*bazisokon vegigfutas*/
  73.                     p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  74.  
  75.                     n=0;
  76.                     while (p_rendeles) { /*megszamolja, hogy hany rendeles van a kesobbi for ciklushoz*/
  77.                             n++; /*n darab rendeles van*/
  78.                             p_rendeles=p_rendeles->kovetkezo; /*ugras a kov. rendelesre*/
  79.                     }
  80.     /*              printf("rendelesek szama: %d\n", n); */
  81.     /*bazishoz legkozelebbi rendeles vizsgalata*/
  82.                     p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  83.                     /*inicializaljuk a mintav valtozot*/
  84.                     printf ("%lf\n", (tavolsag(p_bazis->koord_ed, p_bazis->koord_kny, p_rendeles->koord_ed, p_rendeles->koord_kny)));
  85.     /*              mintav=8589934591; /*ez igy nem jo, majd valahogy mashogy inicializalni kene a mintavot!!!*/
  86.                     mintav = (tavolsag(p_bazis->koord_ed, p_bazis->koord_kny, p_rendeles->koord_ed, p_rendeles->koord_kny));
  87.                     printf ("mintav: %lf\n", mintav);
  88.                     while(p_rendeles){
  89.                             tav=tavolsag(p_bazis->koord_ed, p_bazis->koord_kny, p_rendeles->koord_ed, p_rendeles->koord_kny);
  90.     /*                      printf("tavok: %lf\n ", tav); */
  91.                             if (tav<=mintav) {
  92.                                     mintav=tav; /*bazishoz legkozelebb levo rendeles tavolsaga*/
  93.                                     minsorszam=p_rendeles->sorszam; /*bazishoz legkozelebb levo rendeles sorszama*/
  94.                                     printf("mintav1: %lf\n ", mintav);
  95.                                                                     printf("minsorszam: %u\n ", minsorszam);
  96.                             }
  97.                     p_rendeles=p_rendeles->kovetkezo; /*ugras a kov. rendelesre*/
  98.                     }
  99.  
  100.     /*              printf("minsorszam2: %u\n ", minsorszam);  */
  101.                     p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  102.                     while(p_rendeles){
  103.                             if (p_rendeles->sorszam == minsorszam) { /*megkeressuk azon sorszamu rendelest, amire elozoleg kiszamoltuk, hogy a legkozelebb all a bazishoz*/
  104.                                     p_rendeles->seged = p_rendeles->osszeg - (((int)(mintav/ 1000 ) + 1) * 2);/*megadjuk, mennyi marad ajandekokra*/
  105.                                     p_elozo=p_rendeles; /*adott rendeles beallitasa, hogy a kovetkezonel ossze lehessen vele hasonlítani a tavot*/
  106.     /*                              printf("%u\n", p_elozo->koord_ed); */
  107.                             }
  108.                             p_rendeles=p_rendeles->kovetkezo; /*ugras a kov. rendelesre*/
  109.                     }
  110.     /*tobbi rendeles vizsgalata*/
  111.     /*a ciklussal a bazishoz nem a legkozelebb levo rendeleseket jarjuk be es mentjuk el a maradek penzt*/
  112.     /*printf("eddig OK, %u\n", p_elozo->koord_ed); */
  113.                     for (i=1; i<n; i++) {
  114.             /*inicializaljuk a mintav valtozot*/
  115.  
  116.     //      mintav=8589934591; /*ez igy nem jo, majd valahogy mashogy inicializalni kene a mintavot!!!*/
  117.             p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  118.                             while (p_rendeles->seged != 0) {
  119.                                     p_rendeles=p_rendeles->kovetkezo;
  120.                             }
  121.                             printf("mintav2: %lf\n",mintav=(tavolsag(p_elozo->koord_ed, p_elozo->koord_kny, p_rendeles->koord_ed, p_rendeles->koord_kny) ));
  122.                                     printf("elozo1: %u\n", p_elozo->koord_ed);
  123.  
  124.             p_rendeles=p_bazis->rendelesek;
  125.             while(p_rendeles){
  126.                     if (p_rendeles->seged == 0) {
  127.             /*              printf("elozo d_koord: %u\n", p_elozo->koord_ed); */
  128.                             tav=tavolsag(p_elozo->koord_ed, p_elozo->koord_kny, p_rendeles->koord_ed, p_rendeles->koord_kny);
  129.                             if (tav<=mintav) {
  130.                                     mintav=tav; /*elozo rendeleshez legkozelebb levo rendeles tavolsaga*/
  131.                                     minsorszam=p_rendeles->sorszam; /*bazishoz legkozelebb levo rendeles sorszama*/
  132.                             }
  133.                     }
  134.                             p_rendeles=p_rendeles->kovetkezo; /*ugras a kov. rendelesre*/
  135.                     }
  136.  
  137.                     /*              printf("minsorszam: %u\n ", minsorszam); */
  138.                     p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  139.                     while(p_rendeles){
  140.                             if (p_rendeles->sorszam == minsorszam) { /*megkeressuk azon sorszamu rendelest, amire elozoleg kiszamoltuk, hogy a legkozelebb all az elozo bazishoz*/
  141.                                     p_rendeles->seged = p_rendeles->osszeg - (((int)(mintav/ 1000 ) + 1) * 2);/*megadjuk, mennyi marad ajandekokra*/
  142.                                     /*                      printf("%u\n", p_rendeles->seged); */
  143.                                     p_elozo=p_rendeles; /*adott rendeles beallitasa, hogy a kovetkezonel ossze lehessen vele hasonlítani a tavot*/
  144.                             }
  145.                             p_rendeles=p_rendeles->kovetkezo; /*ugras a kov. rendelesre*/
  146.                     }
  147.             }
  148.                     p_bazis=p_bazis->kovetkezo; /*ugras a kov. bazisra*/
  149.             }
  150.     }
  151.  
  152.  
  153.     void ertek_szamol(struct bazis *gyoker){ /*kiszamolja, mekkora erteku ajandekot kapott egy-egy gyerek es, egy-egy bazisrol mekkora osszerteku ajandekot szallitottak*/
  154.             struct bazis *p_bazis=gyoker; /* bazis lancolt lista futovaltozo*/
  155.             struct rendeles *p_rendeles=0; /*rendelesek lancolt lista futovaltozo*/
  156.             unsigned max, bazisossz;
  157.             int i;
  158.  
  159.             while(p_bazis){ /*bazisokon valo vegigfutas*/
  160.                     bazisossz=0;
  161.                     p_rendeles=p_bazis->rendelesek;
  162.                     while(p_rendeles){ /*rendeleseken valo vegigfutas*/
  163.                             max=0;
  164.                             for (i=0; i<26; i++) { /*rendelesen beluli ajandek arlista vegigolvasasa*/
  165.                                     max=max+p_rendeles->lista[i]; /*maximum ertek, amit az ajandekok osszerteke felvehet, mert meg kijon a befizetett osszegbol*/
  166.                                     if (max <= p_rendeles->seged) {
  167.                                             p_rendeles->megoldas=max; /*lehetseges rendelet ajandekok ossz ertekenek lista elembe mentese*/
  168.                                     }
  169.                             }
  170.                             bazisossz=bazisossz+p_rendeles->megoldas; /*bazisrol kiszallitott ajandekok osszerteken osszeszamolasa*/
  171.                             p_rendeles=p_rendeles->kovetkezo; /*kov. rendeles*/
  172.                                     }
  173.                     p_bazis->befizetes=bazisossz; /*bazisrol kiszallitott ajandekok osszertekenek listaelembe mentese*/
  174.                     p_bazis=p_bazis->kovetkezo; /*kov. bazis*/
  175.             }
  176.     }
  177.  
  178.     unsigned legosszert_bazis(struct bazis *gyoker){ /*bazis megkeresese, ahonnan a legtobb osszerteku ajandekot szallitottak, visszateresi ertek ezen bazis sorszama*/
  179.     struct  bazis *p_bazis=gyoker; /* bazis lancolt lista futovaltozo*/
  180.             unsigned max, szam=0;
  181.  
  182.             max=p_bazis->befizetes; /* max segedvaltozo inicializalasa*/
  183.             while(p_bazis){ /*bazisokon valo vegigfutas*/
  184.                     if (max <= p_bazis->befizetes) { /*legnagyobb osszerteku kiszallitas megkeresese (maximum kereses)*/
  185.                                     max = p_bazis->befizetes;
  186.                     szam = p_bazis->sorszam ; /*a jelnelegi legnagyobb osszertekes kiszallitasos bazis sorszamat a segedvaltozoba mentem*/
  187.                     }
  188.                     p_bazis=p_bazis->kovetkezo; /*kov. bazis*/
  189.                     }
  190.             return szam;
  191.     }
  192.  
  193.  
  194.     /*unsigned legdelibb_ertek(unsigned sorszam, struct bazis *gyoker){ /*legdelebbi rendeles ajandek ertekenek kiszamolasa (ha a deli ertek a legnagyobb), visszateresi ertek a feladat vegeredmenye*/
  195.     /*      struct bazis *p_bazis=gyoker; /* bazis lancolt lista futovaltozo*/
  196.     /*      struct rendeles *p_rendeles=0; /* rendeles lancolt lista futovaltozo*/
  197.     /*      unsigned max=0, ertek=0;
  198.  
  199.             while(p_bazis){ /*bazisokon vegigfutas*/
  200.     /*              if (p_bazis->sorszam == sorszam) { /*megkeresi azt a bazist, aminek az erteket parameterkent megkapta (legnagyobb osszert. bazis)*/
  201.     /*              p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  202.     /*                      max=p_rendeles->koord_ed; /*segedvaltozo inicializalas*/
  203.     /*                      while(p_rendeles){ /*rendeleseken vegigfutas*/
  204.     /*                      if (max <= p_rendeles->koord_ed) { /*rendelesek vizsgalata, legdelebbi megkeresese*/
  205.     /*                              max = p_rendeles->koord_ed;
  206.     /*                      ertek = p_rendeles->megoldas;  /*legdelebbi rendeles ajandek ertekenek segedvaltozoba helyezese*/
  207.     /*                      }
  208.     /*                      p_rendeles=p_rendeles->kovetkezo;  /*kov. rendeles*/
  209.     /*              }
  210.     /*              }
  211.                     p_bazis=p_bazis->kovetkezo;  /*kov. bazis*/
  212.     /*      }
  213.     /*      printf("legdelibb.ertek: %u\n", ertek); */
  214.     /*      return ertek;
  215.     } */
  216.  
  217.     unsigned legdelibb_ertek(unsigned sorszam, struct bazis *gyoker){ /*legdelebbi rendeles ajandek ertekenek kiszamolasa (ha a deli ertek a legkisebb), visszateresi ertek a feladat vegeredmenye*/
  218.             struct bazis *p_bazis=gyoker; /* bazis lancolt lista futovaltozo*/
  219.             struct rendeles *p_rendeles=0; /* rendeles lancolt lista futovaltozo*/
  220.             unsigned min=0, ertek=0;
  221.  
  222.             while(p_bazis){ /*bazisokon vegigfutas*/
  223.                     if (p_bazis->sorszam == sorszam) { /*megkeresi azt a bazist, aminek az erteket parameterkent megkapta (legnagyobb osszert. bazis)*/
  224.                             p_rendeles=p_bazis->rendelesek; /*bazison beluli rendelesek hivasa*/
  225.                             min=p_rendeles->koord_ed; /*segedvaltozo inicializalas*/
  226.                             while(p_rendeles){ /*rendeleseken vegigfutas*/
  227.                                     if (min >= p_rendeles->koord_ed) { /*rendelesek vizsgalata, legdelebbi megkeresese*/
  228.                                             min = p_rendeles->koord_ed;
  229.                                             ertek = p_rendeles->megoldas; /*legdelebbi rendeles ajandek ertekenek segedvaltozoba helyezese*/
  230.                                     }
  231.                                     p_rendeles=p_rendeles->kovetkezo; /*kov. rendeles*/
  232.                             }
  233.                     }
  234.                     p_bazis=p_bazis->kovetkezo; /*kov. bazis*/
  235.             }
  236.             /*      printf("legdelibb.ertek: %u\n", ertek); */
  237.             return ertek;
  238.     }
  239.  
  240.  
  241.  
  242.     void bazis_tolt(struct bazis **gyoker, unsigned sorszam, unsigned koord_ed, unsigned koord_kny)    /*bazisok helyet sorszamat tartalmazo lista feltoltese **first=gyoker */
  243.     {
  244.             unsigned befizetes=0;
  245.             struct bazis *p_bazis;
  246.             struct bazis *p_tarolo = NULL;
  247.  
  248.             if(!(*gyoker)){
  249.                     /*Elso bazis felvetele, ha eddig ures az adatszerkezet*/
  250.                     p_tarolo=(struct bazis*)malloc(sizeof(struct bazis));
  251.                     if (p_tarolo==NULL) {
  252.                             printf("sikertelen memoria foglalas\n");
  253.                             fflush(stdin); getchar(); exit(1);
  254.                     }
  255.             p_tarolo->sorszam = sorszam;
  256.             p_tarolo->koord_ed = koord_ed;
  257.             p_tarolo->koord_kny = koord_kny;
  258.             p_tarolo->befizetes =befizetes;
  259.             p_tarolo->rendelesek=p_tarolo->kovetkezo=NULL;
  260.             *gyoker=p_tarolo;
  261.             }
  262.  
  263.             p_bazis=*gyoker; /*Elso bazisra allitas*/
  264.             while(p_bazis->koord_ed!=koord_ed && p_bazis->koord_kny!=koord_kny){ /*Bazist megtalaltuk? (ha meg nem volt ilyen koordinataju, mehet tovabb)*/
  265.                     if(!p_bazis->kovetkezo){ /*van meg bazis?*/
  266.                             /*ha van, uj bazis letrehozasa*/
  267.                             p_tarolo=(bazis*)malloc(sizeof(bazis));
  268.                             if (p_tarolo==NULL) {
  269.                                     printf("\n sikertelen memoria foglalas\n");
  270.                                     fflush(stdin); getchar(); exit(1);
  271.                             }
  272.                             p_tarolo->kovetkezo=p_tarolo->rendelesek=NULL;
  273.                             p_tarolo->sorszam = sorszam;
  274.                             p_tarolo->koord_ed = koord_ed;
  275.                             p_tarolo->koord_kny = koord_kny;
  276.                             p_tarolo->befizetes =befizetes;
  277.                             p_bazis->kovetkezo=p_tarolo;
  278.                     }
  279.                     p_bazis=p_bazis->kovetkezo; /*kov. bazis*/
  280.             }
  281.     }
  282.  
  283.     void arak_tolt(struct ajandek **gyoker, unsigned sorszam, unsigned ar)
  284.     {
  285.             struct ajandek *p_ajandek;
  286.             struct ajandek *p_tarolo = NULL;
  287.  
  288.             if(!(*gyoker)){
  289.                     /*Elso bazis felvetele*/
  290.                     p_tarolo=(struct ajandek*)malloc(sizeof(struct ajandek));
  291.                     if (p_tarolo==NULL) {
  292.                             printf("sikertelen memoria foglalas\n");
  293.                             fflush(stdin); getchar(); exit(1);
  294.                     }
  295.                     p_tarolo->sorszam = sorszam;
  296.                     p_tarolo->ar =ar;
  297.                     p_tarolo->kovetkezo=NULL;
  298.                     *gyoker=p_tarolo;
  299.             }
  300.  
  301.             p_ajandek=*gyoker;
  302.             while(p_ajandek->sorszam!=sorszam){
  303.                     if(!p_ajandek->kovetkezo){
  304.                             /*bazis felvetele, ha meg nem letezik*/
  305.                             p_tarolo=(ajandek*)malloc(sizeof(ajandek));
  306.                             if (p_tarolo==NULL) {
  307.                                     printf("\n sikertelen memoria foglalas\n");
  308.                                     fflush(stdin); getchar(); exit(1);
  309.                             }
  310.                             p_tarolo->kovetkezo=NULL;
  311.                             p_tarolo->sorszam = sorszam;
  312.                             p_tarolo->ar = ar;
  313.                             p_ajandek->kovetkezo=p_tarolo;
  314.                     }
  315.                     p_ajandek=p_ajandek->kovetkezo;
  316.             }
  317.     }
  318.  
  319.  
  320.     void rendeles_tolt(struct bazis *bazisgyoker,unsigned koord_ed, unsigned koord_kny, unsigned sorszam,int *t,unsigned osszeg)
  321.     {
  322.             struct rendeles *p_rendeles;
  323.             struct rendeles *p_ujrendeles = NULL;
  324.             struct bazis *p_bazis = bazisgyoker; /*lepeteto pointer a bazis listara, a felfuzeshez*/
  325.             double tav=0, mintav=0;
  326.             int i;
  327.             p_ujrendeles = (struct rendeles*)malloc(sizeof(struct rendeles));  /*memoriafoglalas uj elemnek + hibajelzes*/
  328.             if (p_ujrendeles==NULL) {
  329.                     printf("sikertelen memoria foglalas\n");
  330.                     fflush(stdin); getchar(); exit(1);
  331.             }
  332.  
  333.             /*az uj elem adatainak feltoltese*/
  334.  
  335.             p_ujrendeles->sorszam = sorszam;
  336.             p_ujrendeles->koord_ed = koord_ed;
  337.             p_ujrendeles->koord_kny = koord_kny;
  338.             p_ujrendeles->osszeg = osszeg;
  339.             p_ujrendeles->seged = 0;
  340.             p_ujrendeles->megoldas = 0;
  341.             p_ujrendeles->kovetkezo = NULL;
  342.             for(i=0;i<26;i++)
  343.             {
  344.                     p_ujrendeles->lista[i] = t[i];
  345.             }
  346.             p_ujrendeles->kovetkezo = NULL;
  347.             if(p_bazis == bazisgyoker) /*beallitja a mintav-ot a kereseshez*/
  348.             {
  349.                     tav=tavolsag(p_bazis->koord_ed, p_bazis->koord_kny, koord_ed, koord_kny);
  350.                     mintav=tav;
  351.                     p_ujrendeles->bazis = p_bazis->sorszam;
  352.             }
  353.             do  /*megkeresi melyik bazis van a legkozelebb a rendeleshez es a bazis kodjat elmenti*/
  354.             {
  355.                     tav=tavolsag(p_bazis->koord_ed, p_bazis->koord_kny, koord_ed, koord_kny);
  356.                     if(mintav>tav)
  357.                     {
  358.                             mintav=tav;
  359.                             p_ujrendeles->bazis = p_bazis->sorszam;
  360.                     }
  361.             }while(p_bazis=p_bazis->kovetkezo);
  362.  
  363.             /*adatok feltoltest kovetoen a listaba helyezes a bazisokhoz valo tavolsag alapjan*/
  364.  
  365.             p_bazis=bazisgyoker;
  366.  
  367.             do /*do-while ciklusban vegigfuftunk a pazisokon*/
  368.             {
  369.                     if(p_bazis->sorszam == p_ujrendeles->bazis) /*ha az aktualis bazis van a legkozelebb a rendeleshez*/
  370.                     {
  371.                             if(p_bazis->rendelesek == NULL) /*akkor ha arrol a bazisrol meg nem log rendeles, fuzzuk ra az elsot*/
  372.                             {
  373.                                     p_bazis->rendelesek = p_ujrendeles;
  374.                             }
  375.                             else /*ha az aktualis bazison mar van rendeles*/
  376.                             {
  377.                                     p_rendeles=p_bazis->rendelesek; /*akkor segedvaltozot allitsuk ra*/
  378.                                     if(p_rendeles->kovetkezo == NULL) /*ha nincs kovetkezo rendeles (tehat az utolso, vagyis eddig egy darab rendeles van)*/
  379.                                     {
  380.                                             p_rendeles->kovetkezo = p_ujrendeles; /*tegyuk be kovetkezonek az aktualis rendelest*/
  381.                                     }
  382.                                     else /*ha tobb rendeles log mar az aktualis bazison*/
  383.                                     {
  384.                                             while(p_rendeles->kovetkezo) /*vegigfutunk rajta*/
  385.                                             {
  386.                                                     p_rendeles=p_rendeles->kovetkezo;
  387.                                             }
  388.                                     }
  389.                                     p_rendeles->kovetkezo = p_ujrendeles; /*a rendeleslista vegere berakjuk az aktualis rendelest*/
  390.                             }
  391.                     }
  392.             }while(p_bazis=p_bazis->kovetkezo);
  393.     }
  394.  
  395.     void datolvas_bazis(FILE*f,struct bazis **bazisgyoker){ /*olvasando fajl, felepitendo adatszerkezet (a gyoker mutato megvaltozott erteket pointerben adja viszza)*/
  396.             unsigned a, b, sorszam;/* dat fajl olvasasahoz segedvaltozok*/
  397.             a=b=0;
  398.             sorszam=1;
  399.             while(fread(&a,4,1,f)){
  400.                     fread(&b,4,1,f); /*4-es helyett lehet: sizeof(unsigned int) is*/
  401.                     if(!feof (f))                           /*vizsgalat, hogy az utolso elem ne 2-szer legyen beirva*/
  402.                     {
  403.                             bazis_tolt(bazisgyoker,sorszam,a,b);
  404.                     }
  405.                     sorszam++;
  406.             }
  407.     }
  408.  
  409.     void datolvas_arak(FILE *f, struct ajandek **ajandekgyoker)  /*price beolvas·sa*/
  410.     {
  411.             unsigned ar;
  412.             unsigned sorszam;
  413.  
  414.             sorszam = 0;
  415.             while(fread(&ar,4,1,f)) /*soronkent olvasunk, amig el nem fogynak*/
  416.             {
  417.                     if(!feof (f))            /*vizsgalat, hogy az utolso elem ne 2-szer legyen beirva*/
  418.                     {
  419.                             arak_tolt(ajandekgyoker,sorszam,ar);
  420.                     }
  421.  
  422.                     sorszam++;
  423.             }
  424.     }
  425.  
  426.     void txtolvas_rendeles(FILE*f, struct bazis *bazisgyoker, struct ajandek *gyoker){
  427.  
  428.             ajandek *p_ajandek = gyoker;
  429.             int d, i;
  430.             unsigned a, b, sorszam=1; //
  431.             unsigned osszeg;
  432.  
  433.             char c;
  434.             int lista[26]={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
  435.             a=b=c=d=osszeg=0;
  436.             while (fscanf(f, "%u %u\n",&a,&b)==2) { /*beolvassuk az e-d es k-ny koordinatakat*/
  437.  
  438.                     for(i=0;i<26;i++)
  439.                     {
  440.                             lista[i]=0;
  441.                     }
  442.  
  443.                     i=0;
  444.                     while((c=fgetc(f))!='\n'){
  445.                             d=c-65;
  446.             /*              printf("%d ", d); */
  447.                             p_ajandek = gyoker;
  448.                             while (p_ajandek) {
  449.                                     if (p_ajandek->sorszam == d) {
  450.                             /*      printf("%d ", p_ajandek->sorszam); */
  451.                                             lista[i] = p_ajandek->ar; /*termekek erteket kellene tarolni, de egyelore a lancra fuzesen van a hangsuly*/
  452.                             /*      printf("%u ", lista[i]); */
  453.                             i++;
  454.                                     }
  455.                             p_ajandek=p_ajandek->kovetkezo;
  456.                             }
  457.             //      i++;
  458.                     }
  459.                     fscanf(f, "%u\n",&osszeg); /*beolvasom a befizetett osszeget*/
  460.     /*              printf(" %u %u  %u \n", a, b, osszeg);  */
  461.                     rendeles_tolt(bazisgyoker,a,b,sorszam,lista,osszeg);
  462.                     sorszam++;
  463.             }
  464.     }
  465.  
  466.  
  467.  
  468.     void listakiir1(struct bazis *gyoker){ //rendelesek adatszerkezete
  469.             bazis *p_bazis=gyoker; // bazis lancolt lista futovaltozo
  470.             if (p_bazis) {
  471.                     while(p_bazis){ //bazisokon valo vegigfutas
  472.                             printf(" %u,  %u,  %u\n",p_bazis->koord_ed, p_bazis->koord_kny, p_bazis->sorszam);
  473.                             p_bazis=p_bazis->kovetkezo; //kov. bazis
  474.                     }
  475.             }else printf("\n lista ures\n");
  476.     }
  477.  
  478.     void listakiir(bazis*gyoker){ //rendelesek adatszerkezete
  479.             struct bazis *p_bazis=gyoker; // bazis lancolt lista futovaltozo
  480.             struct rendeles *p_rendeles=0; //rendelesek lancolt lista futovaltozo
  481.             while(p_bazis){ //bazisokon valo vegigfutas
  482.                     printf(" %u,  %u,  %u, %u\n",p_bazis->koord_ed, p_bazis->koord_kny, p_bazis->sorszam, p_bazis->befizetes);
  483.                     p_rendeles=p_bazis->rendelesek; //bazison beluli rendeles(ek) "hivasa"
  484.                     while(p_rendeles){ //rendeleseken valo vegigfutas
  485.                             printf("   %u %u %u %u ajandek ert.: %u\n",p_rendeles->koord_ed, p_rendeles->koord_kny , p_rendeles->sorszam, p_rendeles->seged, p_rendeles->megoldas );
  486.                             p_rendeles=p_rendeles->kovetkezo; //kov. rendeles
  487.                     }
  488.                     p_bazis=p_bazis->kovetkezo; //kov. bazis
  489.             }
  490.     }
  491.  
  492.     void ajandek_listakiir(ajandek *gyoker){ //rendelesek adatszerkezete
  493.             struct ajandek *p_ajandek=gyoker; // bazis lancolt lista futovaltozo
  494.             if (p_ajandek) {
  495.                     while(p_ajandek){ //bazisokon valo vegigfutas
  496.                             printf(" %u,  %u\n",p_ajandek->sorszam, p_ajandek->ar);
  497.                             p_ajandek=p_ajandek->kovetkezo; //kov. bazis
  498.                     }
  499.             }else printf("\n lista ures\n");
  500.     }
  501.  
  502.  
  503.     int main () {
  504.             unsigned x=0, y=0;
  505.             FILE*f; /*file-ok eleresehez mutato */
  506.             struct bazis *bazisgyoker=NULL;
  507.             struct ajandek *ajandekgyoker=NULL;
  508.             /*base.dat ellenorzes es kiiratas*/
  509.     /*      if (f=fopen("base.dat", "rb")) { //ha nem letezik a base.dat fajl, azt jelezze*/
  510.     /*              printf("%s", "base.dat  letezik\n");
  511.             }
  512.             else {
  513.                     printf("%s", "base.dat nem letezik\n");   } */
  514.             f=fopen("base.dat","rb"); //nyissa meg a base.dat-ot
  515.             datolvas_bazis(f,&bazisgyoker);
  516.             fclose(f);
  517.     /*      listakiir1(bazisgyoker); /*lancolt lista kiiratasa kepernyore */
  518.             /*price.dat ellenorzes es beolvasas */
  519.     /*      if (f=fopen("price.dat", "rb")) { /*ha nem letezik a price.dat fajl, azt jelezze */
  520.     /*              printf("%s", "price.dat  letezik\n");
  521.             }
  522.             else {
  523.                     printf("%s", "price.dat nem letezik\n");   } */
  524.             f=fopen("price.dat","rb");
  525.             datolvas_arak(f, &ajandekgyoker);
  526.             fclose(f);
  527.     /*      if (f=fopen("gift.txt", "r")) { /*ha nem letezik a gift.txt fajl, azt jelezze */
  528.     /*              printf("%s", "gift.txt  letezik\n");
  529.             }
  530.             else {
  531.                     printf("%s", "gift.txt nem letezik\n");   } */
  532.             f=fopen("gift.txt","r");
  533.             txtolvas_rendeles(f, bazisgyoker, ajandekgyoker);
  534.             fclose(f);
  535.     /*      ajandek_listakiir(ajandekgyoker); */
  536.     /*      listakiir(bazisgyoker);  */
  537.             kiszallitas_koltseg(bazisgyoker);
  538.             ertek_szamol(bazisgyoker);
  539.             listakiir(bazisgyoker);
  540.             y=legosszert_bazis(bazisgyoker);
  541.             x=legdelibb_ertek(y, bazisgyoker);
  542.             printf("%d\n", x);
  543.     /*      printf("max.sorszama: %u\n", y); */
  544.     /*      fflush(stdin); getchar();  */
  545.  
  546.         return 0;
  547.     }
Add Comment
Please, Sign In to add comment