Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.19 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<math.h>
  5.  
  6.  
  7. //Mű stuktúra//
  8. typedef struct mu
  9. {
  10. char* munev;
  11. int sorszam;
  12. int evszam;
  13. struct mu* next;
  14. }mu;
  15.  
  16. //Alkoto strukúra//
  17. typedef struct alkoto
  18. {
  19. char* alkotonev;
  20. int sorszam;
  21. struct alkoto* next;
  22. mu* mulista;
  23. }alkoto;
  24.  
  25. //Mű beszúrása a mulista végére
  26. void MUBESZUR(mu* head, mu* uj)
  27. {
  28. if (head == NULL)
  29. {
  30. head = uj;
  31. }
  32.  
  33. while (head->next != NULL)
  34. {
  35. head = head->next;
  36. }
  37. head->next = uj;
  38. }
  39.  
  40. //Alkotó beszúrása a alkotólista végére
  41. void ALKOTOBESZUR(alkoto* head, alkoto* uj)
  42. {
  43. while (head->next != NULL)
  44. {
  45. head = head->next;
  46. }
  47. head->next = uj;
  48. }
  49.  
  50. //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//
  51. alkoto* ALKOTOBEOLVASO() //belolvassa az alkotókat és a sorszámukat az első txt-ből és feltölti a listába
  52. {
  53. FILE* fptr;
  54.  
  55. alkoto* head = (alkoto*)malloc(sizeof(alkoto));
  56.  
  57. head->next = NULL;
  58. head->mulista = NULL;
  59.  
  60. if ((fptr = fopen("Alkotók.txt", "r")) == NULL)
  61. {
  62. printf("Az Alkotók.txt megnyitasa sikertelen volt!");
  63. exit(1);
  64. }
  65.  
  66.  
  67. while (!feof(fptr))
  68. {
  69. alkoto* elem = (alkoto*)malloc(sizeof(alkoto));
  70. elem->alkotonev = (char*)malloc(50*sizeof(char));
  71.  
  72. fscanf( fptr, "%s\t %d", elem->alkotonev, &(elem->sorszam));
  73.  
  74. elem->mulista = (mu*)malloc(sizeof(mu));
  75. elem->mulista->next = NULL;
  76.  
  77. elem->next = NULL;
  78.  
  79. ALKOTOBESZUR(head, elem);
  80. }
  81.  
  82. alkoto* elem = (alkoto*)malloc(sizeof(alkoto));
  83. elem->alkotonev = (char*)malloc(50 * sizeof(char));
  84.  
  85. elem->mulista = (mu*)malloc(sizeof(mu));
  86. elem->mulista->next = NULL;
  87. elem->next = NULL;
  88. elem->alkotonev = "Ismeretlen";
  89.  
  90. ALKOTOBESZUR(head, elem);
  91.  
  92. //fclose(fptr);
  93. if (fclose(fptr) != 0)
  94. {
  95. printf("Az Alkotok.txt fajl bezarasa sikertelen volt!\n");
  96. }
  97.  
  98. return head;
  99. }
  100.  
  101. //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//
  102. void MUBEOLVASO(alkoto* head)
  103. {
  104. FILE* fptr;
  105.  
  106. alkoto*seged = head;
  107.  
  108.  
  109. if ((fptr = fopen("Művek.txt", "r")) == NULL)
  110. {
  111. printf("A Művek.txt megnyitasa sikertelen volt!");
  112. exit(1);
  113. }
  114.  
  115.  
  116. while (!feof(fptr))
  117. {
  118. mu* elem = (mu*)malloc(sizeof(mu));
  119. elem->munev = (char*)malloc(50*sizeof(char) );
  120.  
  121. fscanf( fptr, "%s\t %d\t %d", elem->munev, &(elem->sorszam), &(elem->evszam));
  122. elem->next = NULL;
  123.  
  124. while (head->next!=NULL && head->sorszam != elem->sorszam)
  125. {
  126. head = head->next;
  127. }
  128.  
  129. MUBESZUR(head->mulista, elem);
  130. head = seged;
  131. }
  132.  
  133. //fclose(fptr);
  134. if (fclose(fptr) != 0)
  135. {
  136. printf("A Muvek.txt fajl bezarasa sikertelen volt!\n");
  137. }
  138.  
  139. }
  140.  
  141. void MUKIIRATO(mu* head)//Kiírja az összes alkotó nevét
  142. {
  143. int i = 1;
  144. head = head->next;
  145. while (head != NULL)
  146. {
  147. printf(" %d. %s\t%d\n", i, head->munev,head->evszam);
  148. i++;
  149. head = head->next;
  150. }
  151. printf("\n");
  152. }
  153.  
  154. void ALKOTOKIIRATO(alkoto* head)//Kiírja az összes alkotó nevét
  155. {
  156. int i = 1;
  157.  
  158. while (head != NULL)
  159. {
  160. printf("%d. %s\n", i, head->alkotonev);
  161. i++;
  162. MUKIIRATO(head->mulista);
  163. head = head->next;
  164. }
  165. }
  166.  
  167. void MUKIIRATOFELADAT(mu* head)//Kiírja az összes mű nevét
  168. {
  169. int i = 1;
  170. mu* seged = head;
  171.  
  172. while (head!= NULL)
  173. {
  174. if (abs(2019 - (head->evszam)) < 3)
  175. {
  176. printf(" %d. %s\t%d\n\n", i, head->munev,head->evszam);
  177.  
  178. i++;
  179. }
  180. head = head->next;
  181. }
  182. head = seged;
  183. }
  184.  
  185. void PARAMETERKERESO(alkoto* head)
  186. {
  187. alkoto* parameter = NULL;
  188. double atlag = 0;
  189. double alkotokszama = 0;
  190. double muvekszama = 0;
  191. double min = 10000000;
  192.  
  193. head = head->next;
  194.  
  195. alkoto* seged = head;
  196. mu* seged1 = NULL;
  197.  
  198. while (head->next!= NULL)
  199. {
  200. seged1 = head->mulista;
  201.  
  202. while (head->mulista->next!=NULL)
  203. {
  204. muvekszama++;
  205. head->mulista=head->mulista->next;
  206. }
  207.  
  208. head->mulista = seged1;
  209. head = head->next;
  210.  
  211. alkotokszama++;
  212. }
  213. printf("A muvek szama:%lf\t\t", muvekszama);
  214. atlag = muvekszama / alkotokszama;
  215. head = seged;
  216.  
  217. muvekszama = 0;
  218.  
  219. while (head != NULL)
  220. {
  221. seged1 = head->mulista;
  222.  
  223. while (head->mulista != NULL)
  224. {
  225. muvekszama++;
  226. head->mulista = head->mulista->next;
  227. }
  228.  
  229. if (abs(atlag - muvekszama) < min)
  230. {
  231. min = abs(atlag - muvekszama);
  232. parameter = head;
  233. }
  234. muvekszama = 0;
  235.  
  236. head->mulista = seged1;
  237. head = head->next;
  238. }
  239.  
  240. head = seged;
  241.  
  242. printf("Az atlag:%lf\n\n", atlag);
  243. ALKOTOKIIRATO(head);
  244.  
  245. printf("A meghatarozott alkoto es a megfelelo muvei:\n\n");
  246. printf("1. %s\n", parameter->alkotonev);
  247. MUKIIRATOFELADAT(parameter->mulista);
  248. }
  249.  
  250. void MULISTAFELSZABADITO(mu* head) //Felszabadítja a lista függőleges ágait
  251. {
  252. while (head != NULL)
  253. {
  254. mu* seged = head->next;
  255. free(head);
  256. head = seged;
  257. }
  258. }
  259.  
  260. void ALKOTOLISTAFELSZABADITO(alkoto* head) //Végigiterálva a lista vízszintes ágán és elszabadítja egyesével őket
  261. {
  262. while (head != NULL)
  263. {
  264. alkoto* seged = head->next;
  265. MULISTAFELSZABADITO(head->mulista);
  266. free(head);
  267. head = seged;
  268. }
  269. }
  270.  
  271. int main(void)
  272. {
  273. alkoto* head = NULL;
  274.  
  275. head = ALKOTOBEOLVASO();
  276.  
  277. MUBEOLVASO(head);
  278.  
  279. PARAMETERKERESO(head);
  280.  
  281. ALKOTOLISTAFELSZABADITO(head);
  282.  
  283. system("pause");
  284. return 0;
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement