xSortLab je aplet sa animacijama metoda sortiranja. Kliknite na dugme da ga aktivirate.
Primer 1
|
Dani |
1 |
2 |
3 |
4 |
5 |
... |
... |
... |
500 |
|
12 |
23 |
18 |
17 |
16 |
... |
... |
... |
15 |
program
Temperature;
var
Dani: array[1..500] of Integer;
begin
Dani[1] := 12;
Dani[3] := 18;
Dani[2] := 23;
Dani[1] := 12;
Dani[3] := 18;
Dani[3] := 18;
Dani[4] := 17;
Dani[5] := 16;
...
Dani[500] := 15;
end.
var
Dani: array[1..500] of Integer;
program
Temperature;
var
Dani: array[1..3] of Integer;
Prosek:Real;
begin
write(‘Unesi temperaturu za dan 1:’); readln(Dani[1]);
write(‘Unesi temperaturu za dan 2:’); readln(Dani[2]);
write(‘Unesi temperaturu za dan 3:’); readln(Dani[3]);
Prosek:= (Dani[1]+ Dani[2]+ Dani[3])/3;
end.
program
Temperature;
var
Dani: array[1..500] of Integer;
BrojDana,i:integer;
Prosek:Real;
begin
Prosek:=0;
write(‘Unesi broj dana:’);
readln(BrojDana);
for i:=1 to BrojDana do
begin
write(‘Unesi temperaturu za dan ‘,i,’ : ’);
readln(Dani[i]);
Prosek:=Prosek+Dani[i];
end;
Prosek:=Prosek/BrojDana;
Writeln(‘Temperatura je bila ispod proseka za dane broj:’);
for i:=1 to BrojDana do
if Dani[i]<Prosek then writeln(‘Dan:’,i);
end.
· Napišite program koji će izračunati maksimalnu temperaturu za proizvoljan broj dana
program
Temperature;
var
Dani: array[1..500] of Integer;
BrojDana,i,Max:integer;
begin
write(‘Unesi broj dana:’);
readln(BrojDana);
for i:=1 to BrojDana do
begin
write(‘Unesi temperaturu za dan ‘,i,’ : ’);
readln(Dani[i]);
end;
Max:=Dani[1];
for i:=1 to BrojDana do
if Dani[i]>Max then Max:=Dani[i];
Writeln(‘Maksimalna temperatura je bila :’,Max,’ stepeni);
end.
Zadatak 1
· Napišite program koji će ispisati koji su dani u prethodnom primeru imali maksimalnu temperaturu
Zadatak 2
· Napišite program koji će ispisati koliko dana je imalo temperaturu Tx (gde je Tmin<=Tx<=TMax a TMin i TMax su temperature koje se unose) i koji su to dani.
Primer 5 – O Deklaraciji niza
Type Dani: array [1..500] of integer;
Var a,b,c:Dani;
Na ovaj način smo deklarisali tri niza a,b i c.
Napomena: U ovom primeru Dani nisu niz već tip niza!!!
Ova naredba je ekvivalentna sa:
Var a,b,c: array [1..8] of integer;
Pitanje: Koja je moguća svrha deklarisanja niza preko Type?
Type mesec= (jan, feb, mar, apr, maj, jun, jul, avg, sep, okt, nov, dec);
Var prihod: array [mesec] of real;
nocenja: array [apr..okt] of integer;
Ovo su neki primeri deklaracije nizova nabrojivim tipovima.
Primer 6 – O korišćenju indeksa niza
· Napišite program koji će od niza Dani napraviti niz Nedelje koji će sadržati samo temperature svakog sedmog dana. Ispisati niz Nedelje.
program
Temperature;
var
Dani: array[1..500] of Integer;
Nedelje: array[1..72] of Integer;
BrojDana,i,j:integer;
begin
write(‘Unesi broj dana:’);
readln(BrojDana);
for i:=1 to BrojDana do
begin
write(‘Unesi temperaturu za dan ‘,i,’ : ’);
readln(Dani[i]);
end;
j:=1;
for i:=1 to BrojDana do
if (i mod 7=0) then
begin
Nedelje[j]:=Dani[i];
j:=j+1;
end;
for i:=1 to j do
Writeln(‘Nedelja[‘,j,’]=’,Nedelja[j]);
end.
Primer 7 – Zamena vrednosti elemenata u nizu
· Napišite program koji će od niza Dani zameniti temperature svakog sedmog i šestog dana. Ispisati novodobijeni niz.
program
Temperature;
var
Dani: array[1..500] of Integer;
BrojDana,i,Tpom:integer;
begin
write(‘Unesi broj dana:’);
readln(BrojDana);
for i:=1 to BrojDana do
begin
write(‘Unesi temperaturu za dan ‘,i,’ : ’);
readln(Dani[i]);
end;
for i:=1 to BrojDana do
if (i mod 7=0) then
begin
Tpom:=Dani[i];
Dani[i]:=Dani[i-1];
Dani[i-1]:=Tpom;
end;
for i:=1 to BrojDana do
Writeln(‘Dani[‘,i,’]=’,Dani[i]);
end.
Primer 8 – Generisanje niza
· Fibonnacijev niz je: 1,1,2,3,5,8,13,21,...
Svaki n-ti član niza izračunava se po formuli Fn=Fn-1 +Fn-2 tj. izračunava se kao suma prethodna dva člana. Prvi i drugi član niza jednaki su 1. Najjednostavniji način je stavljanje brojeva u niz.
Program Fibonnaci;
var f:array[1..20000] of integer;
i,n,j: integer;
begin
write('Unesi granicu: ');
readln(n);
f[1]:=1;
f[2]:=1;
i:=3;
while f[i-1]<=n do
begin
f[i]:=f[i-1]+f[i-2];
i:=i+1;
end;
for j:=1 to i-2 do
write(f[j]:6);
end.
Pitanje: Gde bi se mogao upotrebiti ovaj niz?
Sortiranje nizova
Problem sortiranja datog niza sastoji se u urdjenju elemenata u traženom poretku. Poredak može biti:
- rastući :
x[1] < x[2] < x[3] < . . . < x[n]
- neopadajući: x[1] <= x[2] <= x[3] <=. . . <= x[n]
- opadajući: x[1] >x[2]> x[3]> . . . > x[n]
- nerastući x[1] => x[2]=>x[3] => . . . => x[n]
Postoji više metoda sortiranja i najbitnija razlika izmedju njih je u brzini. Takodje je i bitna „osetljivost“ algoritma na redosled ulaznih podataka. Pored ovoga pri izboru algoritma sortiranja treba imati u vidu i šta se sortira, tj. koliki prostor u memoriji zauzimaju pojedinačno članovi niza koji se sortira , jer bi onda trebalo izabrati algoritam koji će ih manje premeštati.
Na početku strane možete videti Java applet koji pokazuje animacije nekih od najpopularnijih metoda sortiranja.
program BubbleSortZamena;
type niz=array[1..100] of real;
var i,n:integer; a:niz;
procedure stampajniz(n:integer;var a:niz); //stamapa sve clanove niza
var k:integer;
begin
for k:=1 to n do write(a[k]:5:2,' ');
writeln;
writeln;
end;
procedure bublesortzamena(n:integer;var a:niz);
var i,j:integer;
p:real;
begin
for i:=1 to n-1 do
begin
writeln;
write(i,'.prolazak kroz niz: ');
for j:=1 to n-i do
if a[j]>a[j+1] then
begin
P:=a[j];
a[j]:=a[j+1];
a[j+1]:=p;
end;
stampajniz(n,a); //poziva se procedura za stampanje
end;
end;
begin //glavni program
write('unesi broj clanova niza:');
readln(n);
writeln;
writeln('unesi clanove niza:');
writeln;
for i:=1 to n do
begin
write(i,'. clan:');
readln(a[i]);
end;
bublesortzamena(n,a);
writeln;
write('SORTIRANI NIZ JE: ');
stampajniz(n,a);
readln;
readln;
end.
Program BubbleSort;
type niz=array[1..100] of real;
var i,n:integer; a:niz;
procedure stampajniz(n:integer;var a:niz); //stamapa sve clanove niza
var k:integer;
begin
for k:=1 to n do write(a[k]:5:2,' ');
writeln;
writeln;
end;
procedure bublesort(n:integer;var a:niz);
var i,j,granica:integer;
p:real;
sortirano:boolean;
begin
j:=1;
granica:=n-1;
repeat
sortirano:=true;
for i:=1 to granica do
begin
if a[i]>a[i+1] then
begin
P:=a[i];
a[i]:=a[i+1];
a[i+1]:=p;
sortirano:=false;
end;
end;
granica:=granica-1;
writeln;
write(j,'.prolazak kroz niz: ');
j:=j+1;
stampajniz(n,a); //poziva se procedura za stampanje
until sortirano;
end;
begin //glavni program
write('unesi broj clanova niza:');
readln(n);
writeln;
writeln('unesi clanove niza:');
writeln;
for i:=1 to n do
begin
write(i,'. clan:');
readln(a[i]);
end;
bublesort(n,a);
writeln;
write('SORTIRANI NIZ JE: ');
stampajniz(n,a);
readln;
readln;
end.
program SelekcijaSort;
type niz=array[1..100] of real;
var i,n:integer; a:niz;
procedure stampajniz(n:integer;var a:niz); //stamapa sve clanove niza
var k:integer;
begin
for k:=1 to n do write(a[k]:5:2,' ');
writeln;
writeln;
end;
procedure selekcija(n:integer;var a:niz);
var i,j, min:integer;
p:real;
begin
for i:=1 to n-1 do begin
min:=i;
for j:=i+1 to n do
if a[j]<a[min] then
min:=j;
if min<>i then
begin
P:=a[min];
a[min]:=a[i];
a[i]:=p;
end;
writeln;
write(i,'.prolazak kroz niz: ');
stampajniz(n,a); //poziva se procedura za stampanje
end;
end;
begin //glavni program
write('unesi broj clanova niza:');
readln(n);
writeln;
writeln('unesi clanove niza:');
writeln;
for i:=1 to n do
begin
write(i,'. clan:');
readln(a[i]);
end;
selekcija(n,a);
writeln;
write('SORTIRANI NIZ JE: ');
stampajniz(n,a);
readln;
readln;
end.
program UmetanjeSort;
type niz=array[1..100] of real;
var i,n:integer; a:niz;
procedure stampajniz(n:integer;var a:niz); //stamapa sve clanove niza
var k:integer;
begin
for k:=1 to n do write(a[k]:5:2,' ');
writeln;
writeln;
end;
procedure umetanje(n:integer;var a:niz);
var i,j: integer;
p: real;
begin
for i:=2 to n do
begin
p:=a[i];
j:=i;
while a[j-1]>p do begin
a[j]:=a[j-1];
j:=j-1;
end;
a[j]:=p;
writeln;
write(i-1,'.prolazak kroz niz: ');
stampajniz(n,a); //poziva se procedura za stampanje
end;
end;
begin //glavni program
write('unesi broj clanova niza:');
readln(n);
writeln;
writeln('unesi clanove niza:');
writeln;
for i:=1 to n do
begin
write(i,'. clan:');
readln(a[i]);
end;
umetanje(n,a);
writeln;
write('SORTIRANI NIZ JE: ');
stampajniz(n,a);
readln;
readln;
end.