Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. /*Napisać program, który będzie wczytywał słowa z pliku wejściowego, słowa nie są
  2. uporządkowane alfabetycznie, w jednym wierszu zapisane jest jedno słowo. Program ma
  3. odrzucić dublety, a w pliku wyjściowym zapisać słowa uporządkowane alfabetycznie.
  4. Program ma być uruchamiany z linii poleceń z dwoma argumentami, którymi będą
  5. nazwy odpowiednio pliku wejściowego i wyjściowego.
  6. */
  7. //poprawić forme argc argv
  8. // pozbyć się numer lini ipozbyc sie dubletow
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <conio.h>
  13.  
  14.  
  15.  
  16. struct Slowo
  17. {
  18. char wyraz[30];
  19. int numer_linij;
  20. struct Slowo *Nastepny;
  21. };
  22.  
  23. int numer = 1; //zmienna przechowujaca numer lini slowa
  24.  
  25.  
  26. /*funkcja liczaca ile slow jest w pliku tekstowym*/
  27. int iloscslow(char *argv[])
  28. {
  29. FILE *plik = fopen(argv[1], "r");
  30.  
  31. int n = 0;
  32.  
  33. char bufor[30];
  34.  
  35. while (!feof(plik))
  36. {
  37. fscanf(plik, "%s", &bufor);
  38. n++;
  39. }
  40.  
  41. fclose(plik);
  42.  
  43. return n;
  44. }
  45.  
  46.  
  47. /*Funkcja pobierajaca pojedyncze slowa z pliku tekstowego*/
  48. struct Slowo *pobierz_dane(char *argv[], FILE *plik)
  49. {
  50.  
  51. struct Slowo * nowy = (struct Slowo *)malloc(sizeof(struct Slowo));
  52.  
  53. fscanf(plik, "%s", &nowy->wyraz);
  54.  
  55. nowy->numer_linij = numer;
  56.  
  57.  
  58.  
  59. nowy->Nastepny = NULL;
  60.  
  61.  
  62. numer++;
  63. return nowy;
  64. }
  65.  
  66.  
  67. /*Funkcja wstawiajaca pobrane slowa do listy*/
  68. struct Slowo *wstaw_do_listy(struct Slowo *lista, struct Slowo *element)
  69. {
  70.  
  71. if (lista == NULL)
  72. {
  73. lista = element;
  74. return lista;
  75. }
  76.  
  77. if (stricmp(element->wyraz, lista->wyraz) < 0)
  78. {
  79. element->Nastepny = lista;
  80. lista = element;
  81. return lista;
  82. }
  83.  
  84. if (lista->Nastepny == NULL)
  85. {
  86. lista->Nastepny = element;
  87. return lista;
  88. }
  89.  
  90. struct Slowo * glowa = lista;
  91.  
  92. while (glowa->Nastepny)
  93. {
  94.  
  95. if ((stricmp(element->wyraz, glowa->wyraz) >= 0) && (stricmp(element->wyraz, glowa->Nastepny->wyraz) <= 0))
  96. {
  97. struct Slowo * temp = glowa->Nastepny;
  98. element->Nastepny = temp;
  99. glowa->Nastepny = element;
  100. return lista;
  101. }
  102. glowa = glowa->Nastepny;
  103. }
  104.  
  105.  
  106. glowa->Nastepny = element;
  107. return lista;
  108. }
  109.  
  110. //void wyswietl_liste(struct Slowo *lista)
  111. //{
  112. //
  113. // while (lista != NULL)
  114. // {
  115. // printf("Slowo w linijce %d to %s\n", lista->numer_linij, lista->wyraz);
  116. //
  117. // lista = lista->Nastepny;
  118. // }
  119. //}
  120.  
  121.  
  122. /*Funkcja zapisujaca do pliku slowa uporzadkowane alfabetycznie wraz z numerem lini w ktorym sie znajduja*/
  123. void zapisz(struct Slowo* pHead, char *argv[])
  124. {
  125. FILE *plik = fopen(argv[2], "w");
  126.  
  127. struct Slowo *temp = pHead;
  128.  
  129. fprintf(plik, "Ponizej znajduja sie uporzadkowane alfabetycznie slowa z pliku wejsciowego wraz numerem lini w ktorym sie znajduja\n\n");
  130. while (temp != NULL)
  131. {
  132. fprintf(plik, "Slowo: %s, numer linijki w pliku wejsciowym: %d\n", temp->wyraz, temp->numer_linij);
  133. temp = temp->Nastepny;
  134. }
  135.  
  136.  
  137. fclose(plik);
  138.  
  139. }
  140.  
  141.  
  142.  
  143. int main(int argc, char *argv[])
  144. {
  145. if (argc != 3)
  146. {
  147. printf("Blad! Nalezy uruchomic wprowadzajac 2 argumenty: plik wejsciowy, plik wyjsciowy\n\n ");
  148. system("pause");
  149. exit(1);
  150. }
  151.  
  152. struct Osoba * pHead = NULL;
  153.  
  154. FILE *plik = fopen(argv[1], "r");
  155.  
  156. int n = iloscslow(argv);
  157.  
  158. while (!feof(plik))
  159. {
  160. for (int i = 0; i < n; i++)
  161. pHead = wstaw_do_listy(pHead, pobierz_dane(argv, plik));
  162. }
  163.  
  164. fclose(plik);
  165.  
  166. zapisz(pHead, argv);
  167.  
  168. system("pause");
  169.  
  170. return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement