Advertisement
lukicdarkoo

8. vjezbe, 2. zadatak

Jan 6th, 2014
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.21 KB | None | 0 0
  1. /*
  2. Zadata je tekstualna datoteka spisak.txt koja sadrži
  3. spisak imena i prezimena. U svakom redu datoteke nalazi
  4. se tačno jedno ime i prezime međusobno razdvojeni
  5. prazninama. Datoteka je sortirana po abecednom
  6. kriterijumu.
  7.  
  8. U datoteci brisi.txt nalazi se u istom formatu kao u
  9. datoteci spisak.txt spisak imena i prezimena koje treba
  10. izbaciti iz datoteke spisak.txt, i formirati datoteku
  11. izlaz.txt
  12.  
  13. VAZNO:
  14. Nizove sa imenima sam realizovao kao jednostruko spregnute liste,
  15. a imena su smjestena u staticke nizove.
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21.  
  22. #define MAX_NAME_SIZE 100
  23.  
  24. typedef struct Cvor Tcvor;
  25.  
  26. struct Cvor {
  27.     Tcvor *sljedeci;
  28.     char imePrezime[MAX_NAME_SIZE];
  29. };
  30.  
  31. void initijalizacija(Tcvor **glava) {
  32.     *glava = NULL;
  33. }
  34.  
  35. void dodajIme(Tcvor **glava, char imePrezime[MAX_NAME_SIZE]) {
  36.     Tcvor *novi;
  37.  
  38.     novi = (Tcvor *)malloc(sizeof(Tcvor));
  39.     strcpy(novi->imePrezime, imePrezime);
  40.     novi->sljedeci = NULL;
  41.  
  42.     if (*glava == NULL) {
  43.         *glava = novi;
  44.         return;
  45.     }
  46.  
  47.     Tcvor *tekuci;
  48.     tekuci = *glava;
  49.     while (tekuci->sljedeci != NULL)
  50.         tekuci = tekuci->sljedeci;
  51.  
  52.     tekuci->sljedeci = novi;
  53. }
  54.  
  55. void obrisiImePrezime(Tcvor **glava, char imePrezime[MAX_NAME_SIZE]) {
  56.     Tcvor *tekuci;
  57.     Tcvor *prethodni;
  58.  
  59.     prethodni = tekuci = *glava;
  60.  
  61.     while (tekuci != NULL) {
  62.         if (strcmp(tekuci->imePrezime, imePrezime) == 0) {
  63.  
  64.             if (prethodni != tekuci)
  65.                 prethodni->sljedeci = tekuci->sljedeci;
  66.             else *glava = tekuci->sljedeci;
  67.  
  68.             free(tekuci);
  69.             tekuci = prethodni->sljedeci;
  70.             return;
  71.         }
  72.  
  73.         prethodni = tekuci;
  74.         tekuci = tekuci->sljedeci;
  75.     }
  76. }
  77.  
  78. void obrisiListu(Tcvor **glava) {
  79.     Tcvor *tekuci;
  80.  
  81.     while (*glava != NULL) {
  82.         tekuci = *glava;
  83.         *glava = (*glava)->sljedeci;
  84.         free(tekuci);
  85.     }
  86. }
  87.  
  88. int main() {
  89.     FILE *foSpisak, *foIzlaz, *foBrisi;
  90.     Tcvor *glavaSpisak, *glavaBrisi;
  91.     char imePrezime[MAX_NAME_SIZE];
  92.  
  93.     initijalizacija(&glavaSpisak);
  94.     initijalizacija(&glavaBrisi);
  95.  
  96.     //ucitava spisak imena
  97.     foSpisak = fopen("spisak.txt", "r");
  98.     while (1) {
  99.         if (fgets(imePrezime, MAX_NAME_SIZE, foSpisak) != NULL)
  100.             dodajIme(&glavaSpisak, imePrezime);
  101.         else break;
  102.     }
  103.     fclose(foSpisak);
  104.  
  105.  
  106.  
  107.  
  108.     //ucitava spisak imena za brisanje
  109.     foBrisi = fopen("brisi.txt", "r");
  110.     while (1) {
  111.         if (fgets(imePrezime, MAX_NAME_SIZE, foBrisi) != NULL)
  112.             dodajIme(&glavaBrisi, imePrezime);
  113.         else break;
  114.     }
  115.     fclose(foBrisi);
  116.  
  117.     //brise elemente iz liste
  118.     Tcvor *tekuci;
  119.     tekuci = glavaBrisi;
  120.     while (tekuci != NULL) {
  121.         strcpy(imePrezime, tekuci->imePrezime);
  122.         obrisiImePrezime(&glavaSpisak, imePrezime);
  123.         tekuci = tekuci->sljedeci;
  124.     }
  125.  
  126.     //upisuje listu u fajl
  127.     foIzlaz = fopen("izlaz.txt", "w");
  128.     tekuci = glavaSpisak;
  129.     while (tekuci != NULL) {
  130.         fputs(tekuci->imePrezime, foIzlaz);
  131.         tekuci = tekuci->sljedeci;
  132.     }
  133.     fclose(foIzlaz);
  134.  
  135.     obrisiListu(&glavaSpisak);
  136.     obrisiListu(&glavaBrisi);
  137.  
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement