MODULE Shaker; FROM IO IMPORT WrCard, WrStr, RdCard, WrLn, OK; CONST Max = 10; TYPE Indeks = [1 .. Max]; NizTip = ARRAY Indeks OF CARDINAL; VAR Niz: NizTip; PROCEDURE Unos(VAR Niz: NizTip); VAR i: Indeks; BEGIN FOR i:= 1 TO Max DO REPEAT WrStr('Unesite '); WrCard(i, 2); WrStr('. clan niza: '); Niz[i]:= RdCard(); WrLn; UNTIL OK; END; END Unos; PROCEDURE Ispis(VAR Niz: NizTip); VAR i: Indeks; BEGIN FOR i := 1 TO Max - 1 DO WrCard(Niz[i], 1); WrStr(', '); END; WrCard(Niz[Max], 1); END Ispis; PROCEDURE ShakerSort(VAR Niz: NizTip); VAR Levi, Desni, i, ZadnjiMenjan: Indeks; Temp: CARDINAL; BEGIN Levi:= 2; Desni:= Max; ZadnjiMenjan:= Max; REPEAT FOR i:= Desni TO Levi BY -1 DO IF Niz[i - 1] > Niz[i] THEN Temp:= Niz[i - 1]; Niz[i - 1]:= Niz[i]; Niz[i]:= Temp; ZadnjiMenjan:= i; END; END; Levi:= ZadnjiMenjan + 1; FOR i:= Levi TO Desni DO IF Niz[i - 1] > Niz[i] THEN Temp:= Niz[i - 1]; Niz[i - 1]:= Niz[i]; Niz[i]:= Temp; ZadnjiMenjan:= i; END; END; Desni:= ZadnjiMenjan - 1; UNTIL Levi > Desni; END ShakerSort; BEGIN Unos(Niz); WrStr('Unesen niz: '); Ispis(Niz); WrLn; WrStr('Sortiran niz: '); ShakerSort(Niz); Ispis(Niz); END Shaker.