Upload
milica-popadic
View
222
Download
0
Embed Size (px)
Citation preview
7/27/2019 nizovi1
1/16
PROSTI
STANDARDNI PROSTI1. celobrojni2. realni3. logiki4. znakovni
NESTANDARDNI PROSTI1. nabrojivi2. intervalni
STRUKTUIRANI
1. nizovni tip2. skupovni tip3. slogovni tip4. datoteni tip5. pokazivaki tip
STRUKTUIRANI TIPOVI PODATAKA
TIPOVI PODATAKA
NIZOVNI TIP PODATAKA
Nizovni tip opisuje ogranien, ureen skup promenljivih istog tipa, koje se nazivaju komponente (lanovi) niza.Svaki lan ima svoj indeks i tip-
Npr. typeniz = array[1..100] of integer;
varx:niz;
ilivar x:arrray[1..100] of integer;
1.Napisati program kojim se izraunava suma lanova datog niza x od n realnih brojeva.program niz1;uses wincrt;var x:array[1..50] of real;
i,n:integer;s:real;
beginwrite('Unesite broj elemenata niza: '); readln(n);s:=0;for i:=1 to n dobeginwrite('X[',i,'] =');readln(x[i]);s:=s+x[i];
end;writeln('Zbir svih clanova niza je ',s:0:2);end.
1
7/27/2019 nizovi1
2/16
2. Izraunati srednju vrednost clanova niza X , koji se sastoji od n realnih elemenata.program niz1;uses wincrt;var x:array[1..50] of real;
i,n:integer;s:real;
beginwrite('Unesite broj elemenata niza: '); readln(n);s:=0;
for i:=1 to n dobeginwrite('X[',i,'] =');readln(x[i]);s:=s+x[i];
end;writeln('Srednja vrednost clanova niza je ',s/n:0:2); end.program niz1;
uses wincrt;
var x:array[1..50] of real;
i,n:integer;
s:real;
beginwrite('Unesite broj elemenata niza: '); readln(n);
s:=0;
for i:=1 to n do
begin
write('X[',i,'] =');
readln(x[i]);
end;
for i:=1 to n do
s:=s+x[i];
writeln('Srednja vrednost clanova niza je ',s/n:0:2);
end.3.Odrediti aritmeticku sredinu nizaX (0 then
begins:=s+a[i];br:=br+1;end;
writeln('Aritmeticka sredina pozitivnih je ',s/br:0:2);end.
2
7/27/2019 nizovi1
3/16
4. Odrediti zbir pozitivnih Sp, i zbir negativnih Sn clanova niza X , koji se sastoji od n celih brojeva.program niz1;uses wincrt;var x:array[1..50] of integer;
i,n,sp,sn:integer;beginwrite('Unesite broj elemenata niza: '); readln(n);sp:=0; sn:=0;for i:=1 to n do
beginwrite('X[',i,'] =');readln(x[i]);if x[i]>0 then sp:=sp+x[i]
else sn:=sn+x[i];end;
writeln('Zbir pozitivnih clanova niza je ',sp);writeln('Zbir negativnih clanova niza je ',sn); end.5.Sastaviti algoritamsku emu i napisati program za odreivanje sume lanova niza prirodnih brojeva A, duine n , koji sumanji od 200 i deljivi sa 4.
program cetvrti;uses wincrt;
var i,n,s:integer;a:array[1..100] of integer;
beginwrite('Unesite duzinu niza');readln(n);for i:=1 to n doreadln(a[i]);s:=0;for i:=1 to n doif (a[i]
7/27/2019 nizovi1
4/16
7. Za uneti niz X celih brojeva od N elemenata odrediti zbir parnih clanova niza sa neparnim indeksom.I NACIN
program zbir;uses wincrt;typeniz=array[1..100] of integer;varx:niz;i,n,s:integer;
beginreadln(n);for i:=1 to n dobeginwrite('X[',i,']= ');readln(x[i]);
end;s:=0;for i:=1 to n doif (i mod 2=1) and (x[i]mod 2=0) thens:=s+x[i];
writeln('Zbir parnih sa neparnim indeksom je ',s);end.
II NACIN sa WHILEprogram zbir;uses wincrt;typeniz=array[1..100] of integer;varx:niz;i,n,s:integer;
beginreadln(n);for i:=1 to n dobeginwrite('X[',i,']= ');readln(x[i]);
end;s:=0; i:=1;while i
7/27/2019 nizovi1
5/16
9. Pronaci najmanji neparni element niza X celih brojevaduzine n.
program najmNep;uses wincrt;typeniz=array[1..100] of integer;varx:niz;i,n,min:integer;
beginreadln(n);for i:=1 to n do readln(x[i]);min:=x[1];for i:=2 to n doif x[i] mod 2=1 then
if x[i]
7/27/2019 nizovi1
6/16
12.Napisati program kojim se odredjuje koliko je ucesnika takmicenja iz programiranja imalo natprosecne rezultate.program natprosek;uses wincrt;var takmicar:array[1..100] of integer;
i,n,s,brnatp:integer;pr:real;
beginwriteln('Unesite broj takmicara: '); readln(n);writeln('Unosite broj osvojenih bodova za svakog takmicara:');
for i:=1 to n dobeginwrite('Takmicar[',i,'] =');readln(takmicar[i]);
end;s:=0;for i:=1 to n do s:=s+takmicar[i];
pr:=s/n;brnatp:=0;for i:=1 to n doif takmicar[i]>pr then brnatp:=brnatp+1;
writeln('Natprosecne rezultate je imalo ',brnatp,' takmicara.'); end.
Isti zadatak uz pomoc FUNKCIJE I PROCEDUREprogram natprosek;uses wincrt;typeniz=array[1..100] of integer;varx:niz;n:integer;s:real;procedure ucitaj(n:integer; var a:niz);
vari:integer;
beginfor i:=1 to n dobeginwrite('Rezultat takmicara broj ',i,' je: ');readln(a[i]);
end; end;function prosek(n:integer;a:niz):real;
vari:integer;s:real;
begin
s:=0;for i:=1 to n do s:=s+a[i];prosek:=s/n;end;function brojNatprosecnih(n:integer;a:niz;ProsecRezult:real):integer;
vari,broj:integer;beginbroj:=0;for i:=1 to n doif a[i]>ProsecRezult then broj:=broj+1;
brojNatprosecnih:=broj;
end;begin
write('Unesite broj takmicara:');
6
7/27/2019 nizovi1
7/16
readln(n);writeln('Unesite rezultate takmicenja: ');ucitaj(n,x);s:=prosek(n,x);writeln('Natprosecne rezultate je imalo; ',brojNatprosecnih(n,x,s),' ucesnika.');end.13. Napisati program kojim se za date nizove a[1],a[2],a[n] i b[1], b[2],b[n], celih brojeva duzine n izracunava zbirS=a[1]*b[n]+a[2]*b[n-1],,a[n]*b[1].
program naaa;
uses wincrt;vara,b:array[1..100]of integer;n,i,s:integer;
beginwriteln('Unesite broj elemenata nizova:');readln(n);writeln('Unosite elemente niza a: ');for i:=1 to n doreadln(a[i]);
writeln('Unosite elemente niza b: ');for i:=1 to n do
readln(b[i]);s:=0;for i:=1 to n dos:=s+a[i]*b[n+1-i];writeln('Rezultat je: ',s);end.14..Napisati program kojim se za date nizove a[1],a[2],a[n] i b[1], b[2],b[n], celih brojeva duzine n izracunava zbirS=a[1]*b[n]+a[2]*b[n-1],,a[n]*b[1]. Koristiti proceduru za ucitavanje nizova a i b.
program naaa;uses wincrt;typeniz=array[1..100] of integer;vara,b:niz;n,i,s:integer;procedure ucitaj(n:integer; var x:niz);
var
i:integer;
begin
for i:=1 to n do
readln(x[i]);
end;
begin
writeln('Unesite broj elemenata nizova:'); readln(n);writeln('Unosite elemente niza a: ');ucitaj(n,a);writeln('Unosite elemente niza b: ');ucitaj(n,b);s:=0;for i:=1 to n dos:=s+a[i]*b[n+1-i];writeln('Rezultat je: ',s);end.
14.2Uraditi isti zadatak, ali za izracunavanje zbira
koristiti funkciju suma.program natprosek;uses wincrt;
typeniz=array[1..100] of integer;
vara,b:niz;n:integer;
procedure ucitaj(n:integer; var x:niz);
var
i:integer;
begin
for i:=1 to n do
readln(x[i]);
end;
function suma(n:integer;a,b:niz):integer;
var
i,s:integer;
begins:=0;
for i:=1 to n do
s:=s+a[i]*b[n+1-i];
suma:=s;
end;beginwriteln('Unesite broj elemenata nizova:');readln(n);writeln('Unosite elemente niza a: ');ucitaj(n,a);writeln('Unosite elemente niza b: ');
ucitaj(n,b);writeln('Rezultat je: ',suma(n,a,b));end.
7
7/27/2019 nizovi1
8/16
15. Napisati program kojim se na osnovu nizova b[1],b[2],..b[n] i c[1],c[2],c[n] formira niz a[1],a[2],..a[n], cije suvrednosti b[1],c[1],b[2],c[2],,b[n],c[n].Koristiti proceduru za ucitavanje nizova b i c, proceduru za formiranje novog niza a i proceduru za ispisivanje elemenatanovoformiranog niza a.
program biggg;uses wincrt;typeniz=array[1..100]of real;
var
a,b,c:niz;n:integer;procedure ucitaj(n:integer; var x:niz);
var
i:integer;
begin
for i:=1 to n do
readln(x[i]);
end;
procedure NoviNiz(n:integer;b,c:niz; var a:niz);
var
i:integer;
beginfor i:=1 to n do
begin
a[2*i-1]:= b[i];
a[2*i] := c[i];
end; end;
procedure ispisi(n:integer; var a:niz);
var
i:integer;
begin
for i:=1 to n do
writeln(a[i]:0:2);end;
beginwriteln('Unesite koliko elemenata ima niz: ');readln(n);writeln('Unesite elemente niza b: ');ucitaj(n,b);writeln('Unesite elemente niza c: ');ucitaj(n,c);
NoviNiz(n,b,c,a);writeln('Novi niz a je: ');ispisi(2*n,a); {novi niz je duplo duzi}
end.11. Napisati program kojim se realizuje ciklicno premestanje vrednosti elemenata niza a[1],a[2],..,a[n] za jedno mestoulevo. (npr. uneti niz je 1,2,3,4, a novi niz je 2,3,4,1)
program pomerilevo1;uses wincrt;var x:array[1..100] of real;
i,n:integer;pom:real;
beginwrite('Unesite duzinu niza: '); readln(n);
writeln('Unosite elemente niza: ');
for i:=1 to n doreadln(x[i]);
pom:=x[1];
for i:=2 to n do
x[i-1]:=x[i];
x[n]:=pom;
writeln('Pomereni niz je: ');for i:=1 to n dowriteln(x[i]:0:2);
end.
8
7/27/2019 nizovi1
9/16
16. Napisati program kojim se realizuje ciklicno premestanje vrednosti elemenata niza a[1],a[2],..,a[n] za M mesta ulevo.(npr. uneti niz je 1,2,3,4,5,6, M=3 a novi niz je 4,5,6,1,2,3)
Napravi se procedura kojom se vrsi pomeranje za 1 mesto ulevo, pa zatim se ta procedura u programu pozove M puta.program pomerilevoM; uses wincrt;type niz=array[1..100]of real;var x:niz;
i,n,m:integer;procedure ulevo1(n:integer; var a:niz);
var i:integer;
pom:real;begin
pom:=a[1];
for i:=2 to n do
a[i-1]:=a[i];
a[n]:=pom;
end;
beginwrite('Unesite duzinu niza: '); readln(n);writeln('Unosite elemente niza: ');for i:=1 to n doreadln(x[i]);
writeln('Za koliko mesta se pomera niz ulevo?');readln(m);for i:=1 to m doulevo1(n,x);writeln('Pomereni niz je: ');for i:=1 to n dowriteln(x[i]:0:2);end.17. Uneti niz X od N realnih elemenata pomeriti za jedno mesto udesno. (Npr. niz 4,5,6,7,8, izlaz je 8,4,5,6,7)
program pomeridesno1;uses wincrt;var x:array[1..100] of real;
i,n:integer;pom:real;
beginwrite('Unesite duzinu niza: '); readln(n);writeln('Unosite elemente niza: ');for i:=1 to n doreadln(x[i]);pom:=x[n];
for i:=n downto 2 do
x[i]:=x[i-1];
x[1]:=pom;
writeln('Pomereni niz je: ');
for i:=1 to n dowriteln(x[i]:0:2);end.18. Uraditi isti zadatak sa pomeranjem niza za m mesta udesno.
program pomeridesnoM;uses wincrt;type niz=array[1..100]of real;var x:niz; i,n,m:integer;
procedure udesno1(n:integer; var a:niz);var i:integer; pom:real;
beginpom:=a[n];
for i:=n downto 2 do a[i]:=a[i-1];
a[1]:=pom;end;
beginwrite('Unesite duzinu niza: '); readln(n);writeln('Unosite elemente niza: ');for i:=1 to n doreadln(x[i]);
writeln('Za koliko mesta se pomera niz?');readln(m);for i:=1 to m doudesno1(n,x);
writeln('Pomereni niz je: ');
for i:=1 to n dowriteln(x[i]:0:2);end.
9
7/27/2019 nizovi1
10/16
19. Uneti n elemenata niza X celih brojeva. Od parnih elemenata niza X formirati niz Y i ispisati elemente niza Y.program newniz;uses wincrt;varx,y:array[1..100] of integer;i,k,n:integer;
beginwrite('Unesite duzinu niza: '); readln(n);
writeln('Unosite elemente niza:');for i:=1 to n doreadln(x[i]);k:=0;for i:=1 to n doif x[i] mod 2 = 0 then
begink:=k+1;y[k]:=x[i];end;
writeln('Novi niz Y je:');for i:=1 to kdo
writeln(y[i]);end.20.SA i program koji od unetog niza X celih brojeva duzine N formira novi niz Y ciju su clanovi neparnielementi niza X uvecani za 3.
program newniz;uses wincrt;varx,y:array[1..100] of integer;i,k,n:integer;
beginwrite('Unesite duzinu niza: '); readln(n);writeln('Unosite elemente niza:');for i:=1 to n doreadln(x[i]);k:=0;for i:=1 to n doif x[i] mod 2 = 1 then
begink:=k+1;y[k]:=x[i]+3;
end;
writeln('Novi niz Y je:');for i:=1 to k dowriteln(y[i]); end.
21. Iz unetog niza X realnih brojeva duzine N (n
7/27/2019 nizovi1
11/16
22.Napisati program kojim se za dati niz X celih brojeva duzine n odredjuje broj razlicitih elemenenata niza uzpomoc f-je.(Za svaki element od 2. do n(i=2...n) se proverava da li medju elementima ispred njega(j=1...n) ima njemu
jednakih. Ako nema brojac broj se uvecava za 1. Ako je i-ti elemt jednak bar jednom koji mu prethodi(j) prelazise na proveru sledeceg, a brojac se ne uvecava)
program proop;uses wincrt;type
niz=array[1..100]of integer;var x:niz;i,n:integer;function BrojRazlicitih(n:integer; a:niz):integer;var i,j,br:integer;beginbr:=1;for i:=2 to n dobeginj:=1;while a [j]a[i] do j:=j+1;
if j=i then br:=br+1;end;
BrojRazlicitih:=br;end;
beginreadln(n);for i:=1 to n doreadln(x[i]);writeln('Broj razlicitih elemenata je ',BrojRazlicitih(n,x));end.23. Napisati program kojim se za dati niz X od n elemenata odredjuje indeks:a) prvog;b) poslednjeg elementa u nizu ija je vrednost maximalnaa) program najveciClan;uses wincrt;type
niz=array[1..100] of integer;var
x:niz;i,n,max,br:integer;
beginreadln(n);for i:=1 to n do readln(x[i]);max:=x[1];for i:=2 to n doif x[i]>max then
beginmax:=x[i];
br:=i;end;
writeln (br);end.
b) program najveciClan;uses wincrt;type
niz=array[1..100] of integer;var
x:niz;i,n,max,br:integer;
beginreadln(n);for i:=1 to n do readln(x[i]);max:=x[1];for i:=2 to n doif x[i]>= max then {jedina razl. je >=}
beginmax:=x[i];
br:=i;end;
writeln (br);end.
11
7/27/2019 nizovi1
12/16
24.Napisati program kojim se u nizu X od N( max then
beginmax:=x[i];br:=1;end
else
if x[i]=max then br:=br+1;writeln (br,' elemenata ima max vrednost ',max:0:2); end.
b) program NizIndNajClan;uses wincrt;var x:array[1..100]of real;
y:array[1..100] of integer;i,n,br:integer; max:real;
beginwrite('Duzina niza: ');readln(n);for i:=1 to n dobegin
write('X[',i,']=');readln(x[i]);
end;max:=x[1]; br:=1; y[br]:=1;for i:=2 to n doif x[i]> max then
beginmax:=x[i];br:=1;y[br]:=i;end
elseif x[i]=max thenbeginbr:=br+1;y[br]:=i;
end;writeln ('Niz Y od indeksa maksimalnih elemenata niza X:');for i:=1 to br dowriteln(y[i]);
end.
12
7/27/2019 nizovi1
13/16
25. Za uneti niz X od N elemenata(n max then
beginmax:=x[i];br:=1;end
elseif x[i]=max then br:=br+1;
writeln (br,' elemenata ima max vrednost ',max:0:2);k:=0;for i:=1 to n doif x[i]max then
begink:=k+1;y[k]:=x[i];end;
writeln('Novi niz je: ');for i:=1 to k dowriteln(y[i]:0:2);
end.26.U nizu X od N(max1thenbegin{korekcija najvece i druge po velicini vrednosti}max2:=max1;max1:=a[i];
end
elseif (a[i]>max2) and (a[i]max1)then max2:=a[i];
13
7/27/2019 nizovi1
14/16
if max2-1E08then writeln('Druga po velicini max vrednost je :',max2:0:2)else writeln('Niz je constantan, nema druge po velicini vrednosti.');end.
27.Visina decaka i visina devojcica se unosi u jednom nizu. Prilikom unosa visina ukoliko je devojcica stavljase znak minus ispred visine. Odrediti srednju visinu decaka i srednju visinu devojcica.
program ppp;uses wincrt;
vara:array[1..100]of real;n,i,brm,brz:integer;sm,sz:real;
beginreadln(n);for i:=1 to n do readln(a[i]);sm:=0; brm:=0;sz:=0; brz:=0;for i:=1 to n doif a[i]>0 then
beginsm:=sm+a[i];brm:=brm+1;end
elseif a[i]sp then brn:=brn+1;
writeln('Prosecna visina odeljenja je ',sp:0:2);
writeln(brn,' ucenika ima natprosecnu visinu.');end.
14
7/27/2019 nizovi1
15/16
29.Niz se sastoji od prosecnih osena ucenika jednog odeljenja unetih redosledom kao u dnevniku. Odreditiredni broj ucenika cija je srednja ocena najbliza prosecnoj. Ako je vise takvih ucenika ispitati najmanji redni
broj.program ppp;uses wincrt;vara:array[1..100]of real;i,n,br:integer;
s:real;beginwrite('Unesite broj ucenika:');readln(n);writeln('Za svakog ucenika unosite srednju ocenu: ');for i:=1 to n dobeginwrite(i,'.-ti ucenik: ');readln(a[i]);end;
s:=0;br:=0;
for i:=1 to n do s:=s+a[i];s:=s/n; {prosek se racuna bez uvodjena nove promenljive}
br:=1;for i:=2 to n doif abs(a[i]-s) < abs(a[br]-s) then br:=i;{da je trebao najveci redni broj samo znak max then
beginmax:=a[i];brmax:=i;end;
for i:=2 to n doif a[i]
7/27/2019 nizovi1
16/16
31. Na raspolaganju su novcanice od 1000, 500, 100, 50, 10, 5, 2 i 1 dinar. Napisati program koji za uneti iznos odredjujenjegovo razbijanje tako da se prvo odvoji najveci moguci broj novcanica iduci od najkrupnije (od 1000 din.) do najsitnije(od 1 din.).U ovom resenju se koristi tipizirani niz. X. Kada je niz tipiziran tada se moze:- inicijalizovati pri deklarisanju;- mogu mu se menjati vrednosti indeksnih promenljivih (ovde to nije primenjeno);
program tipizirani;uses wincrt;const
x:array[1..9] of integer=(1000,500,100,50,20,10,5,2,1);vars,i,k:integer;
beginwrite('unesite novcani iznos za razbijanje: ');readln(s);writeln('Razbijanje je: ');for i:=1 to 9 dobegink:=s div x[i]; {broj novcanica u iznosu x[i]}s:=s mod x[i]; {ostatak novca}if k>0 then writeln(k,' * ',x[i]);
end;end.
16