Guest User

Untitled

a guest
Jun 18th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.97 KB | None | 0 0
  1. PROGRAM zad1_30_6_2011;
  2.  
  3. CONST max_duz = 255;
  4.  
  5. TYPE niz = array [1..max_duz] of char;
  6. {slicno bi bilo i sa string[255]}
  7.  
  8. FUNCTION ucitaj(VAR a:niz; VAR n:integer):boolean;
  9. VAR i: integer;
  10. BEGIN
  11.     writeln('Unesite duzinu niza: ');
  12.     readln(n);
  13.     IF (n > 0) AND (n <= max_duz) THEN
  14.     BEGIN
  15.         writeln('Unesite niz: ');
  16.         FOR i:= 1 TO n DO
  17.             readln(a[i]);
  18.         ucitaj:= true; {ucitavanje uspelo}
  19.     END
  20.     ELSE ucitaj:= false; {nije uspelo}
  21. END;
  22.  
  23. PROCEDURE ispisi(a:niz; n:integer);
  24. VAR i:integer;
  25. BEGIN
  26.     FOR i:= 1 TO n DO
  27.         write(a[i], ' ');
  28. END;
  29.  
  30. PROCEDURE izbaciDuplikate(VAR a:niz; VAR n:integer);
  31. VAR i,j,k:integer;
  32. BEGIN
  33.     {Uporedjuje se svaki element niza, sa svim narednim
  34.      elementima. Ako medju narednim elementima nadjemo
  35.      neki koji je jednak tekucem elementu on ce biti izbacen.
  36.      Zapravo u nizu ostavljamo samo one elemente koji su
  37.      razliciti od tekuceg.}
  38.     FOR i:= 1 TO n-1 DO BEGIN
  39.         {Posto cemo umesto da izbacujemo elemente koji su jednaki
  40.          prepisivati one koji su razliciti (jer nam je tako brze i
  41.          lakse) promenljivu k koristimo da nam ukaze koje je sledece
  42.          mesto na koje se prepisuje element. Niz koji citamo,
  43.          takodje pomatramo kao odrediste, tako sto prvo procitamo
  44.          element, i ako zadovoljava uslov smestimo ga na
  45.          odgovarajuce mesto k (sto u pocetku moze biti isti element
  46.          koji smo procitali. Nakon nekog vremen, posto se nece
  47.          prepisati svi elementi, k koje ukazuje na “prazno mesto”
  48.          ce nam zaostati za brojacem j koji ispituje elemente za
  49.          prepisivanje, i tako zapravo izbacujemo duplikate}
  50.         k:=i+1;
  51.         FOR j:= i+1 TO n DO BEGIN
  52.             IF a[j] <> a[i] THEN BEGIN
  53.                 a[k]:= a[j]; k:= k+1;
  54.             END;
  55.         END;
  56.         {Niz se skratio jer smo izbacili neke elemente. Kako je k
  57.          pokazivalo na sledecu slobodno poziciju, novu duzinu niza
  58.          dobijemo tako sto k umanjimo za jedan.}
  59.         n:= k+1;
  60.     END;
  61. END;
  62.  
  63.  
  64. VAR a: niz;
  65.      n: integer;
  66.  
  67. BEGIN
  68.     WHILE ucitaj(niz,n) DO BEGIN
  69.         izbaciDuplikate(niz,n);
  70.         ispisi(a,n);
  71.     END;
  72. END.
Add Comment
Please, Sign In to add comment