Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.26 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<math.h>
  5. //Hold struktúra
  6. typedef struct hold
  7. {
  8. char holdnev[25];
  9. char bolygonev[25];
  10. int keringes;
  11. double tomeg;
  12. }hold_data;
  13.  
  14. //Holdak láncolt listába fűzése
  15. typedef struct hold_lista
  16. {
  17. hold_data hold_data0;
  18. struct hold_lista* next;
  19. }hold_lista, *hold_lista_ptr;
  20.  
  21. hold_lista_ptr next_hold(hold_lista_ptr head, hold_data uj)
  22. {
  23. hold_lista_ptr h = (hold_lista_ptr)malloc(1 * sizeof(hold_lista));
  24. if (h == NULL)
  25. {
  26. printf("error hold MEM");
  27. return NULL;
  28. }
  29. h->hold_data0 = uj;
  30. h->next = head;
  31.  
  32. return h;
  33. }
  34.  
  35. //Bolygó struktúra
  36. typedef struct bolygo
  37. {
  38. char bolygonev[25];
  39. char csillag[25];
  40. double tavolsag;
  41. double tomeg;
  42. }bolygo_data;
  43.  
  44. //Bolygók láncolt listába fűzése
  45. typedef struct bolygo_lista
  46. {
  47. bolygo_data bolygo_data0;
  48. struct bolygo_lista* next;
  49. }bolygo_lista, *bolygo_lista_ptr;
  50.  
  51. bolygo_lista_ptr next_bolygo(bolygo_lista_ptr head, bolygo_data uj)
  52. {
  53. bolygo_lista_ptr b = (bolygo_lista_ptr)malloc(1 * sizeof(bolygo_lista));
  54. if(b==NULL)
  55. {
  56. printf("error bolygo MEM");
  57. return NULL;
  58. }
  59. b->bolygo_data0 = uj;
  60. b->next = head;
  61.  
  62. return b;
  63. }
  64.  
  65. //Holdak beolvasása
  66. hold_lista_ptr beolvas_hold(FILE* fajlnev, hold_lista_ptr head )
  67. {
  68. double alap;
  69. int kitevo;
  70. hold_data uj;
  71. fscanf(fajlnev, "%s %s %d %lf %d", &uj.holdnev, &uj.bolygonev, &uj.keringes, &alap, &kitevo);
  72. while (!feof(fajlnev))
  73. {
  74.  
  75. uj.tomeg = (alap * (10 ^ kitevo));
  76. head = next_hold(head, uj);
  77. fscanf(fajlnev, "%s %s %d %lf %d", &uj.holdnev, &uj.bolygonev, &uj.keringes, &alap, &kitevo);
  78. }
  79. return head;
  80. }
  81.  
  82. //Bolygók beolvasása
  83. bolygo_lista_ptr beolvas_bolygo(FILE* fajlnev, bolygo_lista_ptr head)
  84. {
  85. double alap;
  86. int kitevo;
  87. bolygo_data uj;
  88. fscanf(fajlnev, "%s %s %lf %lf %d", &uj.bolygonev, &uj.csillag, &uj.tavolsag, &alap, &kitevo);
  89. while (!feof(fajlnev))
  90. {
  91. uj.tomeg = (alap * (10 ^ kitevo));
  92. head = next_bolygo(head, uj);
  93. fscanf(fajlnev, "%s %s %lf %lf %d", &uj.bolygonev, &uj.csillag, &uj.tavolsag, &alap, &kitevo);
  94. }
  95. return head;
  96. }
  97.  
  98. int compare(char a[], char b[])
  99. {
  100. int c = 0;
  101.  
  102. while (a[c] == b[c])
  103. {
  104. if (a[c] == '\0' || b[c] == '\0')
  105. break;
  106. c++;
  107. }
  108. if (a[c] == '\0' && b[c] == '\0')
  109. return 0;
  110. else
  111. return -1;
  112. }
  113.  
  114. //Felszabadító függvények
  115. hold_lista_ptr free_hold(hold_lista_ptr head)
  116. {
  117. if (head != NULL)
  118. {
  119. hold_lista_ptr h = head;
  120. head = head->next;
  121. free(h);
  122. }
  123. return head;
  124. }
  125.  
  126. void free_hold_lista(hold_lista_ptr head)
  127. {
  128. while (head != NULL)
  129. head = free_hold(head);
  130. }
  131.  
  132. bolygo_lista_ptr free_bolygo(bolygo_lista_ptr head)
  133. {
  134. if (head != NULL)
  135. {
  136. bolygo_lista_ptr b = head;
  137. head = head->next;
  138. free(b);
  139. }
  140. return head;
  141. }
  142.  
  143. void free_bolygo_lista(bolygo_lista_ptr head)
  144. {
  145. while (head != NULL)
  146. head = free_bolygo(head);
  147. }
  148.  
  149. int main(void)
  150. {
  151. printf("Adja meg a csillag nevet: ");
  152. char csillagnev_input[25];
  153. scanf("%s", &csillagnev_input);
  154.  
  155. //holdak fájl megnyitása
  156. FILE*holdfajl=fopen("holdak.txt", "r");
  157. if (holdfajl == NULL)
  158. {
  159. printf("error hold FOPEN");
  160. return -1;
  161. }
  162.  
  163. //beolvasó függvény meghívása
  164. hold_lista_ptr holdhead = beolvas_hold(holdfajl, NULL);
  165.  
  166. //Hold fájl bezárása
  167. fclose(holdfajl);
  168.  
  169. //bolygo fájl megnyitása
  170. FILE* bolygofajl = fopen("bolygok.txt", "r");
  171. if (bolygofajl == NULL)
  172. {
  173. printf("error bolygo FOPEN");
  174. return - 1;
  175. }
  176.  
  177. //beolvasó függvény meghívása
  178. bolygo_lista_ptr bolygohead = beolvas_bolygo(bolygofajl, NULL);
  179.  
  180. //Bolygó fájl bezárása
  181. fclose(bolygofajl);
  182.  
  183. //Legkisebb bolygó megkeresése
  184. bolygo_data minimum;
  185. //Megkeressük az első bolygót a Naprendszerből, aztán majd nála keresünk kisebbet
  186.  
  187. for (bolygo_lista_ptr i = bolygohead; i->next != 0; i = i->next)
  188. {
  189. if (0 == compare(i->bolygo_data0.csillag, csillagnev_input))
  190. {
  191. minimum.tomeg=i->bolygo_data0.tomeg;
  192. break;
  193. }
  194. }
  195. for (bolygo_lista_ptr i = bolygohead; i->next != 0; i = i->next)
  196. {
  197. if (0 == compare(i->bolygo_data0.csillag, csillagnev_input) && i->bolygo_data0.tomeg <= minimum.tomeg)
  198. minimum = i->bolygo_data0;
  199.  
  200. }
  201.  
  202. //Megfelelő holdak megkeresése és listába fűzése
  203. hold_lista_ptr eredmeny=NULL;
  204. for (hold_lista_ptr h = holdhead; h->next != NULL; h = h->next)
  205. {
  206. if(h->hold_data0.tomeg>minimum.tomeg)
  207. for(bolygo_lista_ptr b=bolygohead;b->next!=NULL; b=b->next)
  208. {
  209. if (0 == compare(b->bolygo_data0.bolygonev, h->hold_data0.bolygonev))
  210. if (0 == compare(b->bolygo_data0.csillag, csillagnev_input))
  211. eredmeny = next_hold(eredmeny, h->hold_data0);
  212. }
  213. }
  214.  
  215. //A kapott eredmények kiírása
  216. printf("Naprendszer csillaga: %s\n\n", csillagnev_input);
  217. printf("Legkisebb bolygo: %s %f kg, %f CSE\n\n", minimum.bolygonev, minimum.tomeg, minimum.tavolsag);
  218. if (eredmeny == NULL)
  219. printf("Nincs nagyobb hold\n\n");
  220. else
  221. {
  222. printf("A legkisebb bolygonal nagyobb holdak:\n");
  223. for (hold_lista_ptr i = eredmeny; i->next != NULL; i = i->next)
  224. {
  225. 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);
  226. }
  227. }
  228. //dinamikusan foglalt adatok felszabadítása
  229. free_bolygo_lista(bolygohead);
  230. free_hold_lista(holdhead);
  231. free_hold_lista(eredmeny);
  232.  
  233. return 0;
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement