Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Hány Euró volt a számla összege annak a gyereknek az esetében,
- akinek a lakcíme a leginkább keletre esett azok közül a gyerekek közül,
- akiket arról a bázisról szolgáltak ki, ahonnan a legtöbb gyereknek szállítottak ajándékot.*/
- #include <stdio.h>
- #include <malloc.h>
- #include <math.h>
- /*strukturak*/
- typedef struct bazis{
- unsigned int x,y;
- int ajandekszam;
- struct hazikok *elsohaz;
- struct bazis *next;
- } bazis;
- typedef struct hazikok{
- unsigned int x,y;
- struct ajandekok* ajandeklista;
- int fizetett;
- int jartitt;
- struct hazikok *next;
- } hazikok;
- struct ajandekok {
- char ajandek;
- struct ajandekok* next;
- };
- /*deklaraciok*/
- bazis *bazisok;
- struct ajandekok *elsoajandek;
- unsigned int price[26];
- /*beolvasofuggvenyek*/
- bazis* bazisbeolvas()
- {
- FILE *basedat = fopen("BASE.DAT","rb");
- unsigned int x,y;
- struct bazis* bazisbe = (struct bazis*)calloc(sizeof(struct bazis),1);
- struct bazis* bazishead = bazisbe;
- while ( fread(&x,sizeof(x),1,basedat) == 1 && fread(&y,sizeof(y),1,basedat) == 1 )
- {
- struct bazis* kovi = (struct bazis*)calloc(sizeof(struct bazis),1);
- bazisbe->x = x;
- bazisbe->y = y;
- bazisbe->ajandekszam = 0;
- bazisbe->elsohaz = NULL;
- bazisbe->next = kovi;
- bazisbe = kovi;
- }
- bazisbe->next = NULL;
- fclose(basedat);
- return bazishead;
- }
- struct ajandekok* readajandek(FILE* gifttxt)
- {
- struct ajandekok* ajandek = (struct ajandekok*)calloc(sizeof(struct ajandekok),1);
- struct ajandekok* ajandekkhead = ajandek;
- char betu;
- while ( (betu = fgetc(gifttxt)) != '\n')
- {
- struct ajandekok* kovi = (struct ajandekok*)calloc(sizeof(struct ajandekok),1);
- if (betu == ' ')
- continue;
- ajandek->ajandek=betu;
- ajandek->next=kovi;
- ajandek=kovi;
- }
- ajandek->next = NULL;
- return ajandekkhead;
- }
- hazikok* readhazak()
- {
- FILE *gifttxt = fopen("GIFT.TXT","r");
- hazikok* egyhaz = (hazikok*)calloc(sizeof(hazikok),1);
- hazikok* elsohaz = egyhaz;
- hazikok* kovi = NULL;
- int i=0;
- int is_eof = 0;
- while( !is_eof )
- {
- switch(i%3)
- {
- case 0:
- kovi = (hazikok*)calloc(sizeof(hazikok),1);
- if (fscanf(gifttxt,"%u %u\n",&egyhaz->x,&egyhaz->y) != 2)
- is_eof = 1;
- break;
- case 1:
- egyhaz->ajandeklista = readajandek(gifttxt);
- break;
- case 2:
- if (fscanf(gifttxt,"%u\n",&egyhaz->fizetett) != 1)
- is_eof = 1;
- egyhaz->next = kovi;
- egyhaz = kovi;
- break;
- }
- ++i;
- }
- egyhaz->next = NULL;
- fclose(gifttxt);
- return elsohaz;
- }
- void readprice(unsigned int price[26])
- {
- FILE *pricedat = fopen("PRICE.DAT","rb");
- int i;
- for(i=0; i<27; ++i)
- {
- fread(&price[i],sizeof(price[i]),1,pricedat);
- }
- fclose(pricedat);
- }
- hazikok* legkelet(hazikok* elsohaz){
- hazikok*keleti=elsohaz;
- hazikok*futo=elsohaz;
- while (futo){
- if(keleti->y < futo->y)
- keleti=futo;
- futo=futo->next;
- }
- return keleti;
- }
- unsigned int tavnegyzet(long int x1,long int y1,long int x2,long int y2){
- return (((x1)-(x2))*((x1)-(x2))+((y1)-(y2))*((y1)-(y2)));
- }
- bazis *legkozelebbibazis(int x,int y){
- bazis *bazfut,*min;
- min=bazisok;
- bazfut=min;
- while (bazfut!=NULL){
- if(!(x==bazfut->x && y==bazfut->y) && tavnegyzet(x,y,bazfut->x,bazfut->y)<tavnegyzet(x,y,min->x,min->y)){
- min=bazfut;
- }
- bazfut=bazfut->next;
- }
- return min;
- }
- hazikok *legkozelebbihaz2(hazikok* hazlista, hazikok* egyhaz){
- hazikok* min=hazlista;
- hazikok* futo=hazlista;
- hazikok* vizsg=egyhaz;
- egyhaz->jartitt=1;
- while(futo!=NULL){
- 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){
- min=futo;
- }
- futo=futo->next;
- }
- min->jartitt=1;
- return min;
- }
- hazikok *legkozelebbihaz3(hazikok* hazlista, hazikok* egyhaz){
- hazikok* min=hazlista;
- hazikok* futo=hazlista;
- hazikok* vizsg=egyhaz;
- while(futo!=NULL){
- 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){
- min=futo;
- }
- futo=futo->next;
- }
- return min;
- }
- void elhelyez(hazikok *hazlista){
- bazis *ide;
- hazikok *futi;
- hazikok *futo;
- futo=hazlista;
- while (futo!=NULL){
- ide=legkozelebbibazis(futo->x, futo->y);
- if (ide->elsohaz==NULL)
- {
- ide->elsohaz=futo;
- futo=futo->next;
- ide->elsohaz->next=NULL;
- }
- else
- {
- futi=ide->elsohaz;
- while (futi->next!=NULL){
- futi=futi->next;
- }
- futi->next=futo;
- futo=futo->next;
- futi->next->next=NULL;
- }
- }
- }
- int hazszamlalo(hazikok *haz){
- int i=0;
- hazikok *futo;
- futo=haz;
- while(futo!=NULL){
- i++;
- futo=futo->next;
- }
- return i;
- }
- void hazszambeiro(bazis *egybazis){
- bazis *futo;
- futo=egybazis;
- while (futo!=NULL){
- /*if (futo->next!=NULL){*/
- futo->ajandekszam=hazszamlalo(futo->elsohaz);
- /* }*/
- futo=futo->next;
- }
- }
- bazis* legtobbgyerekesbazis(bazis *egybazis){
- bazis * legtobb;
- bazis *futo;
- legtobb=egybazis;
- futo=egybazis;
- while (!(futo->next==NULL)){
- if (futo->ajandekszam>legtobb->ajandekszam){
- legtobb=futo;}
- else {}
- futo=futo->next;
- }
- return legtobb;
- }
- int utikoltseg(unsigned int tavolsag){
- return ((int)ceil(sqrt(tavolsag)/1000))*2;
- }
- unsigned int tavkereso(bazis *fobazis, hazikok *egyhaz){
- hazikok *keresetthaz=egyhaz;
- hazikok *elsohaz;
- hazikok hazu;
- hazikok *bazishaz=&hazu;
- hazikok *mozgo;
- bazishaz->x=fobazis->x;
- bazishaz->y=fobazis->y;
- elsohaz=legkozelebbihaz2(fobazis->elsohaz,bazishaz);
- elsohaz->jartitt=1;
- mozgo=elsohaz;
- if(mozgo==keresetthaz){
- return tavnegyzet(bazishaz->x,bazishaz->y,mozgo->x,mozgo->y);
- }
- else{
- while (legkozelebbihaz3(fobazis->elsohaz,mozgo)!=keresetthaz){
- mozgo=legkozelebbihaz2(fobazis->elsohaz,mozgo);
- }
- return tavnegyzet(mozgo->x,mozgo->y,keresetthaz->x,keresetthaz->y);
- }
- }
- unsigned int tavkereso2(bazis *fobazis, hazikok *egyhaz){
- hazikok *keresetthaz=egyhaz;
- hazikok *mozgo=fobazis->elsohaz;
- if(fobazis->elsohaz==keresetthaz){
- return tavnegyzet(fobazis->x,fobazis->y,keresetthaz->x,keresetthaz->y);
- }
- else{
- while (legkozelebbihaz3(fobazis->elsohaz,mozgo)!=keresetthaz){
- mozgo=legkozelebbihaz2(fobazis->elsohaz,mozgo);
- }
- return tavnegyzet(mozgo->x,mozgo->y,keresetthaz->x,keresetthaz->y);
- }
- }
- int szamlaosszeg (hazikok* haz, int koltseg){
- hazikok*behaz=haz;
- int befizetett=behaz->fizetett;
- int befizetettketto=behaz->fizetett;
- befizetett=befizetett-koltseg;
- printf("%d", befizetett);
- while (behaz->ajandeklista!=NULL && (befizetett > price[behaz->ajandeklista->ajandek - 'A'])){
- befizetett=befizetett-(price[(behaz->ajandeklista->ajandek)-'A']);
- behaz->ajandeklista=behaz->ajandeklista->next;
- printf("%d\n", befizetett);
- }
- return (befizetettketto-befizetett);
- }
- int main(){
- bazis* leghazb;
- hazikok* keletihaz;
- int tav=0;
- int utikolts;
- bazis* tesztbazis;
- readprice(price);
- bazisok=bazisbeolvas();
- elhelyez(readhazak());
- hazszambeiro(bazisok);
- tesztbazis=bazisok;
- while (tesztbazis){
- printf("BAZIS\n");
- printf("%d gyerek\n",tesztbazis->ajandekszam);
- if (tesztbazis->elsohaz){
- printf("%d fizetett\n",tesztbazis->elsohaz->fizetett);}
- /*printf("%d gyerek\n",tesztbazis->);*/
- tesztbazis=tesztbazis->next;
- printf("\n");}
- printf("-----------%d\n", bazisok->next->next->elsohaz->x);
- printf("-----------%d\n", bazisok->next->next->elsohaz->y);
- printf("-----------%d\n", bazisok->next->next->elsohaz->fizetett);
- leghazb=(legtobbgyerekesbazis(bazisok));
- printf("leghazb %d\n", leghazb->elsohaz->fizetett);
- keletihaz=(legkelet(leghazb->elsohaz));
- printf("legkeleti %d\n", keletihaz->fizetett);
- tav=tavkereso(leghazb,keletihaz);
- utikolts=utikoltseg(tav);
- printf("%d\n", utikolts);
- printf("%d\n",szamlaosszeg(keletihaz, utikolts));
- getchar();
- return 0;
- }
Add Comment
Please, Sign In to add comment