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>
- //Mű stuktúra//
- typedef struct mu
- {
- char* munev;
- int sorszam;
- int evszam;
- struct mu* next;
- }mu;
- //Alkoto strukúra//
- typedef struct alkoto
- {
- char* alkotonev;
- int sorszam;
- struct alkoto* next;
- mu* mulista;
- }alkoto;
- //Mű beszúrása a mulista végére
- void MUBESZUR(mu* head, mu* uj)
- {
- if (head == NULL)
- {
- head = uj;
- }
- while (head->next != NULL)
- {
- head = head->next;
- }
- head->next = uj;
- }
- //Alkotó beszúrása a alkotólista végére
- void ALKOTOBESZUR(alkoto* head, alkoto* uj)
- {
- while (head->next != NULL)
- {
- head = head->next;
- }
- head->next = uj;
- }
- //A láncolt lista fő láncának kitöltése a ALKOTOBESZUR függvény segítségével a Alkotoó.txt fájlból//
- alkoto* ALKOTOBEOLVASO() //belolvassa az alkotókat és a sorszámukat az első txt-ből és feltölti a listába
- {
- FILE* fptr;
- alkoto* head = (alkoto*)malloc(sizeof(alkoto));
- head->next = NULL;
- head->mulista = NULL;
- if ((fptr = fopen("Alkotók.txt", "r")) == NULL)
- {
- printf("Az Alkotók.txt megnyitasa sikertelen volt!");
- exit(1);
- }
- while (!feof(fptr))
- {
- alkoto* elem = (alkoto*)malloc(sizeof(alkoto));
- elem->alkotonev = (char*)malloc(50*sizeof(char));
- fscanf( fptr, "%s\t %d", elem->alkotonev, &(elem->sorszam));
- elem->mulista = (mu*)malloc(sizeof(mu));
- elem->mulista->next = NULL;
- elem->next = NULL;
- ALKOTOBESZUR(head, elem);
- }
- alkoto* elem = (alkoto*)malloc(sizeof(alkoto));
- elem->alkotonev = (char*)malloc(50 * sizeof(char));
- elem->mulista = (mu*)malloc(sizeof(mu));
- elem->mulista->next = NULL;
- elem->next = NULL;
- elem->alkotonev = "Ismeretlen";
- ALKOTOBESZUR(head, elem);
- //fclose(fptr);
- if (fclose(fptr) != 0)
- {
- printf("Az Alkotok.txt fajl bezarasa sikertelen volt!\n");
- }
- return head;
- }
- //A láncolt lista mellék láncának kitöltése a MUBESZUR függvény segítségével a Művek.txt fájlból//
- void MUBEOLVASO(alkoto* head)
- {
- FILE* fptr;
- alkoto*seged = head;
- if ((fptr = fopen("Művek.txt", "r")) == NULL)
- {
- printf("A Művek.txt megnyitasa sikertelen volt!");
- exit(1);
- }
- while (!feof(fptr))
- {
- mu* elem = (mu*)malloc(sizeof(mu));
- elem->munev = (char*)malloc(50*sizeof(char) );
- fscanf( fptr, "%s\t %d\t %d", elem->munev, &(elem->sorszam), &(elem->evszam));
- elem->next = NULL;
- while (head->next!=NULL && head->sorszam != elem->sorszam)
- {
- head = head->next;
- }
- MUBESZUR(head->mulista, elem);
- head = seged;
- }
- //fclose(fptr);
- if (fclose(fptr) != 0)
- {
- printf("A Muvek.txt fajl bezarasa sikertelen volt!\n");
- }
- }
- void MUKIIRATO(mu* head)//Kiírja az összes alkotó nevét
- {
- int i = 1;
- head = head->next;
- while (head != NULL)
- {
- printf(" %d. %s\t%d\n", i, head->munev,head->evszam);
- i++;
- head = head->next;
- }
- printf("\n");
- }
- void ALKOTOKIIRATO(alkoto* head)//Kiírja az összes alkotó nevét
- {
- int i = 1;
- while (head != NULL)
- {
- printf("%d. %s\n", i, head->alkotonev);
- i++;
- MUKIIRATO(head->mulista);
- head = head->next;
- }
- }
- void MUKIIRATOFELADAT(mu* head)//Kiírja az összes mű nevét
- {
- int i = 1;
- mu* seged = head;
- while (head!= NULL)
- {
- if (abs(2019 - (head->evszam)) < 3)
- {
- printf(" %d. %s\t%d\n\n", i, head->munev,head->evszam);
- i++;
- }
- head = head->next;
- }
- head = seged;
- }
- void PARAMETERKERESO(alkoto* head)
- {
- alkoto* parameter = NULL;
- double atlag = 0;
- double alkotokszama = 0;
- double muvekszama = 0;
- double min = 10000000;
- head = head->next;
- alkoto* seged = head;
- mu* seged1 = NULL;
- while (head->next!= NULL)
- {
- seged1 = head->mulista;
- while (head->mulista->next!=NULL)
- {
- muvekszama++;
- head->mulista=head->mulista->next;
- }
- head->mulista = seged1;
- head = head->next;
- alkotokszama++;
- }
- printf("A muvek szama:%lf\t\t", muvekszama);
- atlag = muvekszama / alkotokszama;
- head = seged;
- muvekszama = 0;
- while (head != NULL)
- {
- seged1 = head->mulista;
- while (head->mulista != NULL)
- {
- muvekszama++;
- head->mulista = head->mulista->next;
- }
- if (abs(atlag - muvekszama) < min)
- {
- min = abs(atlag - muvekszama);
- parameter = head;
- }
- muvekszama = 0;
- head->mulista = seged1;
- head = head->next;
- }
- head = seged;
- printf("Az atlag:%lf\n\n", atlag);
- ALKOTOKIIRATO(head);
- printf("A meghatarozott alkoto es a megfelelo muvei:\n\n");
- printf("1. %s\n", parameter->alkotonev);
- MUKIIRATOFELADAT(parameter->mulista);
- }
- void MULISTAFELSZABADITO(mu* head) //Felszabadítja a lista függőleges ágait
- {
- while (head != NULL)
- {
- mu* seged = head->next;
- free(head);
- head = seged;
- }
- }
- void ALKOTOLISTAFELSZABADITO(alkoto* head) //Végigiterálva a lista vízszintes ágán és elszabadítja egyesével őket
- {
- while (head != NULL)
- {
- alkoto* seged = head->next;
- MULISTAFELSZABADITO(head->mulista);
- free(head);
- head = seged;
- }
- }
- int main(void)
- {
- alkoto* head = NULL;
- head = ALKOTOBEOLVASO();
- MUBEOLVASO(head);
- PARAMETERKERESO(head);
- ALKOTOLISTAFELSZABADITO(head);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement