Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<math.h>
- //Hold struktúra
- typedef struct hold
- {
- char holdnev[25];
- char bolygonev[25];
- int keringes;
- double tomeg;
- }hold_data;
- //Holdak láncolt listába fűzése
- typedef struct hold_lista
- {
- hold_data hold_data0;
- struct hold_lista* next;
- }hold_lista, *hold_lista_ptr;
- hold_lista_ptr next_hold(hold_lista_ptr head, hold_data uj)
- {
- hold_lista_ptr h = (hold_lista_ptr)malloc(1 * sizeof(hold_lista));
- if (h == NULL)
- {
- printf("error hold MEM");
- return NULL;
- }
- h->hold_data0 = uj;
- h->next = head;
- return h;
- }
- //Bolygó struktúra
- typedef struct bolygo
- {
- char bolygonev[25];
- char csillag[25];
- double tavolsag;
- double tomeg;
- }bolygo_data;
- //Bolygók láncolt listába fűzése
- typedef struct bolygo_lista
- {
- bolygo_data bolygo_data0;
- struct bolygo_lista* next;
- }bolygo_lista, *bolygo_lista_ptr;
- bolygo_lista_ptr next_bolygo(bolygo_lista_ptr head, bolygo_data uj)
- {
- bolygo_lista_ptr b = (bolygo_lista_ptr)malloc(1 * sizeof(bolygo_lista));
- if(b==NULL)
- {
- printf("error bolygo MEM");
- return NULL;
- }
- b->bolygo_data0 = uj;
- b->next = head;
- return b;
- }
- //Holdak beolvasása
- hold_lista_ptr beolvas_hold(FILE* fajlnev, hold_lista_ptr head )
- {
- double alap;
- int kitevo;
- hold_data uj;
- fscanf(fajlnev, "%s %s %d %lf %d", &uj.holdnev, &uj.bolygonev, &uj.keringes, &alap, &kitevo);
- while (!feof(fajlnev))
- {
- uj.tomeg = (alap * (10 ^ kitevo));
- head = next_hold(head, uj);
- fscanf(fajlnev, "%s %s %d %lf %d", &uj.holdnev, &uj.bolygonev, &uj.keringes, &alap, &kitevo);
- }
- return head;
- }
- //Bolygók beolvasása
- bolygo_lista_ptr beolvas_bolygo(FILE* fajlnev, bolygo_lista_ptr head)
- {
- double alap;
- int kitevo;
- bolygo_data uj;
- fscanf(fajlnev, "%s %s %lf %lf %d", &uj.bolygonev, &uj.csillag, &uj.tavolsag, &alap, &kitevo);
- while (!feof(fajlnev))
- {
- uj.tomeg = (alap * (10 ^ kitevo));
- head = next_bolygo(head, uj);
- fscanf(fajlnev, "%s %s %lf %lf %d", &uj.bolygonev, &uj.csillag, &uj.tavolsag, &alap, &kitevo);
- }
- return head;
- }
- int compare(char a[], char b[])
- {
- int c = 0;
- while (a[c] == b[c])
- {
- if (a[c] == '\0' || b[c] == '\0')
- break;
- c++;
- }
- if (a[c] == '\0' && b[c] == '\0')
- return 0;
- else
- return -1;
- }
- //Felszabadító függvények
- hold_lista_ptr free_hold(hold_lista_ptr head)
- {
- if (head != NULL)
- {
- hold_lista_ptr h = head;
- head = head->next;
- free(h);
- }
- return head;
- }
- void free_hold_lista(hold_lista_ptr head)
- {
- while (head != NULL)
- head = free_hold(head);
- }
- bolygo_lista_ptr free_bolygo(bolygo_lista_ptr head)
- {
- if (head != NULL)
- {
- bolygo_lista_ptr b = head;
- head = head->next;
- free(b);
- }
- return head;
- }
- void free_bolygo_lista(bolygo_lista_ptr head)
- {
- while (head != NULL)
- head = free_bolygo(head);
- }
- int main(void)
- {
- printf("Adja meg a csillag nevet: ");
- char csillagnev_input[25];
- scanf("%s", &csillagnev_input);
- //holdak fájl megnyitása
- FILE*holdfajl=fopen("holdak.txt", "r");
- if (holdfajl == NULL)
- {
- printf("error hold FOPEN");
- return -1;
- }
- //beolvasó függvény meghívása
- hold_lista_ptr holdhead = beolvas_hold(holdfajl, NULL);
- //Hold fájl bezárása
- fclose(holdfajl);
- //bolygo fájl megnyitása
- FILE* bolygofajl = fopen("bolygok.txt", "r");
- if (bolygofajl == NULL)
- {
- printf("error bolygo FOPEN");
- return - 1;
- }
- //beolvasó függvény meghívása
- bolygo_lista_ptr bolygohead = beolvas_bolygo(bolygofajl, NULL);
- //Bolygó fájl bezárása
- fclose(bolygofajl);
- //Legkisebb bolygó megkeresése
- bolygo_data minimum;
- //Megkeressük az első bolygót a Naprendszerből, aztán majd nála keresünk kisebbet
- for (bolygo_lista_ptr i = bolygohead; i->next != 0; i = i->next)
- {
- if (0 == compare(i->bolygo_data0.csillag, csillagnev_input))
- {
- minimum.tomeg=i->bolygo_data0.tomeg;
- break;
- }
- }
- for (bolygo_lista_ptr i = bolygohead; i->next != 0; i = i->next)
- {
- if (0 == compare(i->bolygo_data0.csillag, csillagnev_input) && i->bolygo_data0.tomeg <= minimum.tomeg)
- minimum = i->bolygo_data0;
- }
- //Megfelelő holdak megkeresése és listába fűzése
- hold_lista_ptr eredmeny=NULL;
- for (hold_lista_ptr h = holdhead; h->next != NULL; h = h->next)
- {
- if(h->hold_data0.tomeg>minimum.tomeg)
- for(bolygo_lista_ptr b=bolygohead;b->next!=NULL; b=b->next)
- {
- if (0 == compare(b->bolygo_data0.bolygonev, h->hold_data0.bolygonev))
- if (0 == compare(b->bolygo_data0.csillag, csillagnev_input))
- eredmeny = next_hold(eredmeny, h->hold_data0);
- }
- }
- //A kapott eredmények kiírása
- printf("Naprendszer csillaga: %s\n\n", csillagnev_input);
- printf("Legkisebb bolygo: %s %f kg, %f CSE\n\n", minimum.bolygonev, minimum.tomeg, minimum.tavolsag);
- if (eredmeny == NULL)
- printf("Nincs nagyobb hold\n\n");
- else
- {
- printf("A legkisebb bolygonal nagyobb holdak:\n");
- for (hold_lista_ptr i = eredmeny; i->next != NULL; i = i->next)
- {
- printf("%s %s %f kg, %d hour\n\n", i->hold_data0.holdnev, i->hold_data0.bolygonev, i->hold_data0.tomeg, i->hold_data0.keringes);
- }
- }
- //dinamikusan foglalt adatok felszabadítása
- free_bolygo_lista(bolygohead);
- free_hold_lista(holdhead);
- free_hold_lista(eredmeny);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement