Upload
milicapasic
View
83
Download
9
Embed Size (px)
DESCRIPTION
kjkjkjk
Čas 1/3 Nastavna jedinica: Programi sa prostom linijskom strukturom, Grananja u programu
(naredba uslovnog prelaska IF...THEN...ELSE i naredba višestrukog grananja
CASE...OF)
Zadatak 1. Napisati program kojim se za dati poluprečnik izračunava obim i površina kruga.
Program poluprecnik;
Const pi=3.14;
Var r:integer;
P,O: real;
Begin Writeln('Unesite poluprecnik');
Readln(r);
P := sqr(r) * pi;
O := 2 * r * pi;
Writeln('Obim je ',O : 2 : 3,' a povrsina je ', P : 2 : 5);
Readln End.
Zadatak 2. Napisati program kojim se unose nazivi dve robe i njihove cene, izračunava račun
koji treba da se plati uvećan za pdv – 18%.
Program racuni;
Const pdv=0.18;
Var cena, racun: real;
roba:string[15];
Begin Writeln('Unesite naziv prve robe i njenu cenu');
Readln(roba, cena);
racun := racun + cena;
Writeln('Unesite naziv druge robe i njenu cenu');
Readln(roba, cena);
racun := racun + cena;
racun := racun + racun * pdv;
Writeln('Vas racun je ', racun : 4 : 2);
Readln End.
Zadatak 3. Napisati program kojim se za dato x izračunava y.
a)
0 xza 3x,
0 xza ,12x=y b) y =
-1, za x < 0
0, za x = 0
1, za x > 0
Program prvi; Program prvi;
Var x, y: real; Var x, y: real;
Begin Begin Writeln (’Unestite vrednost za x’); Writeln (’Unestite vrednost za x’);
Readln (x); Readln (x);
If x > 0 Then If x > 0 Then
y:= 2*x+1 y:=1
Else Else y:=3*x; If x = 0 Then y:=0 Else y:=-1;
Writeln (y); Writeln (y);
Readln Readln End. End.
Zadatak 4. Napisati program kojim se za dato x i y izračunava z po formuli:
0 ,,max
0 ,,min
22 yyx
yyxz
Program max;
Var x,y,z:integer;
Begin
Writeln ('Unesi dva broja: ');
Readln (x,y);
If y<0 Then
If sqr(x)<sqr(y) Then z:=sqr(y) Else z:=sqr(x);
Else If x<y Then z:=x Else z:=y;
Writeln ('Z = ',z);
Readln;
End.
Zadatak 5. Napisati program kojim se ispituje da li se prave Y = AX + B i Y = CX + D seku.
Ako se seku odrediti koordinate preseka.
Program seku;
Var a,b,c,d,x,y:real;
Begin
Writeln('Unesite vrednosti za a,b,c,d');
Readln(a,b,c,d);
If a-c <> 0 Then
Begin x:=(d-b)/(a-c);
y:=a*x+b;
Writeln('x je: ',x,'a y: ',y);
End
Else Writeln('Greska');
Readln End.
Zadatak 6. Napisati program kojim se promenljivoj max dodeljuje najveća vrednost tri zadata
broja a,b,c.
Program max3;
Var a,b,c,max:integer;
Begin Writeln ('Unesi tri broja: ');
Readln (a,b,c);
max:=a;
If max<b Then max:=b;
If max<c Then max:=c;
Writeln ('Max = ',max);
Readln;
End.
Zadatak 7. Napisati program kojim se za uneti redni broj meseca ispisuje koliko ima dana u tom
mesecu.
Program dani;
Var mesec:integer;
prestupna:char;
Begin
Writeln('Unesi broj meseca od 1 do 12: ');
Readln(mesec);
If (mesec<1) Or (mesec>12) Then
Writeln('Broj meseca je nekorektan')
Else Case mesec Of
1,3,5,7,8,10,12: Writeln ('31 dan');
4,6,9,11:Writeln ('30 dana');
2: Begin
Writeln('Da li je godina prestupna (D/N)?');
Readln(prestupna);
If (prestupna='D') Or (prestupna='d') Then
Writeln ('29 dan')
Else
Writeln ('28 dan');
End; End;
Readln;
End.
Zadatak 8. Napisati program kojim se učitava znak za operaciju (+, -, *, /) i dve realne
promenljive, a zatim štampa rezultat.
Program seku;
Var a,b,x:real;
znak:char;
Begin
Writeln('Unesite vrednosti za a,b i znak za operaciju');
Readln(a,b);
Readln(znak);
Case znak Of
'+':x:=a+b;
'-':x:=a-b;
'*':x:=a*b;
'/':If b<>0 Then x:=a/b Else Writeln ('greska');
End;
Writeln('x je: ',x);
Readln End.
Zadaci za vežbu
Zadatak 9. Napisati program kojim se za različite vrednosti x i y izračunava z po formuli:
2)y,xmax(1
5.0)y,xmin(z
Program zpoformuli;
Var x, y, z : real;
Begin Writeln('Unesi dva broja: ');
Readln(x,y);
If x<y Then
z := (x + 0.5) / (1 + sqr(y))
Else
z := (y + 0.5) / (1 + sqr(x));
Writeln('Z = ',z);
Readln;
End.
Zadatak 10. Nacrtati algoritam kojim se za uneti redni broj ispisuje koji je to dan u nedelji.
Program racuni;
Var dan:integer;
Begin Writeln ('Unesite broj od jedan do sedam');
Readln(dan);
Case dan Of
1: Writeln('Taj dan je ponedeljak');
2: Writeln('Taj dan je utorak');
3: Writeln('Taj dan je sreda');
4: Writeln('Taj dan je cetvrtak');
5: Writeln('Taj dan je petak');
6: Writeln('Taj dan je subota');
7: Writeln('Taj dan je nedelja');
Else Writeln('Taj dan nepostoji');
End;
Readln End.
Zadatak 11. Nacrtati algoritam kojim se ispisuju moguće vrednosti koordinata x i y zavisno od
broja kvadranta koji se unosi.
Program racuni;
Var kvad:integer;
Begin Writeln ('Unesite broj kvadranta');
Readln(kvad);
Case kvad Of
1: Writeln('x > 0, y > 0');
2: Writeln('x > 0, y < 0');
3: Writeln('x < 0, y < 0');
4: Writeln('x > 0, y > 0');
Else Writeln('Taj kvadrant nepostoji');
End;
Readln End.
Čas 4/6
Nastavna jedinica: Naredba ciklusa sa parametrom FOR; Naredba ciklusa sa
preduslovom – WHILE i naredba ciklusa sa postuslovom – REPEAT
Naredba ciklusa sa parametrom FOR
Zadatak 1. Napisati program koji za dato N izračunava sumu:N
S1
...3
1
2
11 .
Program suma;
Var i, n:integer;
s:real;
Begin
Readln (n);
For i:= 1 To n Do
s := s + 1/i;
Writeln (s);
Readln
End.
Zadatak 2. Napisati program kojim se za dato N izračunava suma: 1
...4
3
3
2
2
1
N
NS
Program suma;
Var i, n:integer;
s:real;
Begin
Readln (n);
For i:= 1 To n Do
s := s + i/(i+1);
Writeln (s);
Readln
End.
Zadatak 3. Napisati program kojim se, za date brojeve m i n , izračunava:
)mm)1(n)...(m3n)(m2n)(mn(S 1m
Program suma;
Var i, n, m, z:integer;
s:real;
Begin
Readln (n, m);
z := 1;
For i:= 1 To m Do
Begin
s:= s+ (n + z * i * m);
z := – z;
End; Writeln (s);
Readln
End.
Zadatak 4. Napisati program kojim se za dato n, izračunava suma S=1!+2!+3!+..+n!
Program Suma;
Var i,fakt,s,n:integer;
Begin Writeln ('Ucitaj n: ');
Readln (n);
s:=0;
fakt:=1;
For i:= 1 To n Do
Begin
fakt:=fakt*i;
s:=s+fakt;
End;
Writeln ('S =',s:10);
Readln;
End.
Zadatak 5. Napisati program kojim se određuje da li je iskazna formula Y*XYX
tautologija.
Program tautologija;
Var x,y,p,q,c:boolean;
k: integer;
Begin
For x:=false To true Do
For y:= false To true Do
Begin p:= Not(x Or y);
q:= Not(x) Or Not(y);
c:= Not(p) Or q And p Or Not(q);
If c = true Then k:=k+1;
End;
If k = 4 Then Writeln('jeste') Else Writeln('nije');
Readln End.
Naredba ciklusa sa preduslovom – WHILE i naredba ciklusa sa postuslovom – REPEAT
Zadatak 6. Napisati program za izračunavanje sume onih elemenata niza
n
i+ncos ,
i=1,2,3...,n, čija vrednost pripada odsečku (a,b).
WHILE REPEAT
Program suma;
Var i,n:integer;
a,b,s,p:real;
Begin Writeln ('Unesi n: ');
Readln (n);
Writeln ('Unesi a i b: ');
Readln (a,b);
s:=0; i:=1;
While i<=n Do
Begin p:=cos(n+i/n);
If (a<=p) And (p<=b) Then
s:=s+p;
i:=i+1;
End; Writeln ('Suma je ',s:10:2);
Readln;
End.
Program suma;
Var i,n:integer;
a,b,s,p:real;
Begin Writeln ('Unesi n: ');
Readln (n);
Writeln ('Unesi a i b: ');
Readln (a,b);
s:=0; i:=1;
Repeat p:=cos(n+i/n);
If (a<=p) And (p<=b) Then
s:=s+p;
i:=i+1;
Until i > n;
Writeln ('Suma je ',s:10:2);
Readln;
End
Zadatak 7. Napisati program za približno računanje sume !
)1(...!2!1
12
n
xxxS
nn ...
Sumirati do člana (uključujući i njega) koji je po apsolutnoj vrednosti manji od zadatog broja
eps.
WHILE REPEAT
Program suma;
Var x,clan,s,eps:real;
i, a:integer;
Begin Writeln ('Unesi x,a,eps '); Readln
(x,a,eps);
s:=1.0; i:=0; clan:=1.0;
While abs(clan)>=eps Do
Begin i:=i+1;
clan:=clan*(a-i+1)*x/i;
s:=s+clan;
End;
Program suma;
Var x,clan,s,eps:real;
i, a:integer;
Begin Writeln ('Unesi x,a,eps ');
Readln (x,a,eps);
s:=1.0; i:=0; clan:=1.0;
Repeat i:=i+1;
clan:=clan*(a-i+1)*x/i;
s:=s+clan;
Until abs(clan) < eps;
Writeln ('Suma je ',s:10:2);
Writeln ('Suma je ',s:10:2);
Readln;
End.
Readln;
End.
Zadatak 8. Napisati program kojim se određuju prvi elementi nizova
i
1...
7
1
6
1iA
i
i
2
i
22 i
1...
7
1
6
1iB
takvi da je A(i) > B(i) – 0.05, ako i = 6, 7, 8, ...
WHILE REPEAT
Program dvaniza;
Var a,b:real;
i,z:integer;
Begin
i:=6; z:=1;
While a < (b-0.05) Do
Begin a:=a+z/i;
b:=b+z/sqr(i);
i:=i+1;
End;
Writeln (a,b);
Readln End.
Program dvaniza;
Var a,b:real;
i,z:integer;
Begin
i:=6; z:=1;
Repeat a:=a+z/i;
b:=b+z/sqr(i);
i:=i+1;
Until a > (b-0.05);
Writeln (a,b);
Readln End.
Zadatak 9. Napisati program koji štampa prvih deset članova niza koji su veći od 1. Niz je dat
rekurentno:
A(1) = 1/3,
A(2) = 2/3,
2*1
21
kAkA
kAkAkA
WHILE REPEAT
Program niz;
Var i:integer;
x,y,z:real;
Begin
i:=1; x:=1/3; y:=2/3; z:=(x+y)/(x*y);
While i <11 Do
Begin i:=i+1;
If z >1 Then
Begin Writeln (z);
x:=y;
Program niz;
Var i:integer;
x,y,z:real;
Begin
i:=1; x:=1/3; y:=2/3; z:=(x+y)/(x*y);
Repeat i:=i+1;
If z >1 Then
Begin Writeln (z);
x:=y;
y:=z;
y:=z;
z:=(x+y)/(x*y);
End;
End;
Readln End.
z:=(x+y)/(x*y);
End;
Until i > 11;
Readln End.
Zadatak 10. Sastaviti program za nalaženje najvećeg zajedničkog delioca za dva prirodna broja.
WHILE REPEAT
Program nzd;
Var a,b,kol,pom:integer;
Begin
Writeln('Unesite dva prirodna broja');
While (a <= 0) Or (b <= 0) Do
Readln(a,b);
If a < b Then
Begin pom := a; a := b; b:= pom;
End;
kol := a mod b;
While kol <> 0 Do
Begin kol := a mod b;
a := b;
b := kol;
End;
Writeln ('Najveci zajednicki delilac je ',a);
Readln
End.
Program nzd;
Var a,b,kol:integer;
Begin
Writeln('Unesite dva prirodna broja');
Repeat Readln(a,b);
Until (a > 0) Or (b > 0);
If a < b Then
Begin pom := a; a := b; b:= pom;
End;
Repeat kol := a mod b;
a := b;
b := kol;
Until kol = 0;
Writeln ('Najveci zajednicki delilac je ',a);
Readln
End.
Zadaci za vežbu
Zadatak 11. Napisati program kojim se za uneti datum određuje koji je to redni broj dana u
godini. Godina nije prestupna.
Program RedniBrojDana;
Var dan,mesec,d,m:integer;
Begin Writeln ('Unesi dan i mesec ');
Readln (dan,mesec);
d:=dan;
For m:=1 to mesec-1 Do
Case m Of
1,3,5,7,8,10,12: d:=d+31;
4,6,9,11:d:=d+30;
2: d:=d+28;
End;
Writeln ('Redni broj dana je: ',d);
Readln;
End.
Zadatak 12. Za date brojeve a i b naći njihov najmanji zajednički sadržalac.
WHILE REPEAT
Program nzs;
Var a, b, nzs2, k: integer;
Begin Writeln('Unesite dva prirodna broja');
While (a <= 0) Or (b <= 0) Do
Readln(a,b);
k := 2;
nzs2 := 1;
If a mod b = 0 Then
nzs2 := a
Else
While (a <> 1) Or (b <> 1) Do
Begin While (a mod k = 0) Or (b mod k = 0)
Do
Begin If a mod k = 0 Then a := a div k;
If b mod k = 0 Then b := b div k;
nzs2 := nzs2 * k;
End;
k := k+1;
End;
Writeln ('Najmanji zajednicki sadrzalac je
',nzs2);
Readln
End.
Program nzs;
Var a, b, nzs2, k: integer;
Begin Writeln('Unesite dva prirodna broja');
While (a <= 0) Or (b <= 0) Do
Readln(a,b);
k := 2;
nzs2 := 1;
If a mod b = 0 Then
nzs2 := a
Else
Repeat
Repeat If (a mod k = 0) Or (b mod k = 0) Then
Begin If a mod k = 0 Then a := a div k;
If b mod k = 0 Then b := b div k;
nzs2 := nzs2 * k;
End;
Until (a mod k<>0) And (b mod k <>
0);
k := k+1;
Until (a = 1) And (b = 1);
Writeln ('Najmanji zajednicki sadrzalac je
',nzs2);
Readln End.
Zadatak 13. Napisati program kojim se za dati niz: ...*1
11*...*
3
11*
2
11
iai
određuje prvi element an koji zadovoljava uslov: an – an – 1 < eps. Broj eps je prozvoljan.
WHILE REPEAT
Program Proizvod;
Var i,a0,a1,eps:real;
Begin
Program Proizvod;
Var i,a0,a1,eps:real;
Begin
Writeln ('Unesi eps: ');
Readln (eps);
i:=2;
a1:=0.5;
While abs(a1-a0) >= eps Do
Begin a0:=a1;
i:=i+1;
a1:=a0*(1-1/i)
End;
Writeln (a1:10:5);
Readln;
End.
Writeln ('Unesi eps: ');
Readln (eps);
i:=2;
a1:=0.5;
Repeat a0:=a1;
i:=i+1;
a1:=a0*(1-1/i)
Until abs(a1-a0)<eps;
Writeln (a1:10:5);
Readln;
End.
Čas 7/9
Nastavna jedinica: Funkcije i procedure
Zadatak 1. Napisati program kojim se računa suma S = 1! + 2! + 3! + . . . + n!
Program suma;
Var i,n,s:integer;
Function fakt(x:integer):integer;
Var p,j:integer;
Begin p:=1;
For j:=1 to x Do
p:=p*j;
fakt:=p;
End;
Begin Writeln('Unesite vrednosti za n');
Readln(n);
For i:=1 To n Do
s:=s+fakt(i);
Writeln('s je: ',s);
Readln End.
Zadatak 2. Napisati program kojim se štampaju svi trocifreni brojevi koji su jednaki sumi
faktorijela svojih cifara.
Program suma;
Var a,b,c,x,y:integer;
Function fakt(n:integer):integer;
Var i,p:integer;
Begin p:=1;
For i:=1 To n Do p:=p*i;
End;
fakt:=p;
End;
Begin
For a:=1 To 9 Do
For b:=0 To 9 Do
For c:=0 To 9 Do
Begin x:= a*100 + b*10 +c;
y:= fakt(a) +fakt(b) +fakt(c);
If x=y Then Writeln(a,b,c);
End;
Readln;
End.
Zadatak 3. Izračunaj sumu računajući do člana koji je po apsolutnoj vrednosti manji od eps.
S 11
2
1
3
1
4!! !! !!.... pri čemu je dfact n n
n n n je neparan
n n n je paran( ) !!
( ).. ,
( ).. * ,
2 3
2 4 2
Program suma1;
Var a:integer;
s,eps:real;
Function fakt(n:integer):integer;
Var i,p,k:integer;
Begin p:=1;
If n mod 2 = 0 Then i:=2 Else i:=1;
k:=i;
Repeat p:=p*k;
k:=k+2;
Until k>n;
fakt:=p;
End;
Begin
Writeln ('Unesite eps'); Readln (eps);
s:=1; a:=2;
Repeat If a mod 2 = 0 Then s:=s + 1/fakt(a) Else s:=s - 1/fakt(a);
a:=a+1;
Until abs(1/fakt(a)) < eps;
Writeln (s:3:4);
Readln;
End.
Zadatak 4. Napisati program koji koristeći funkciju prost štampa sve proste brojeve do datog
prirodnog broja n.
Program nizprost;
Const n1 = 100;
Var prost1:boolean;
i,n,m,j,koren:integer;
Function prost(n:integer):boolean;
Begin
koren := round(sqrt(n));
prost1 := odd(n) Or (n=2); i := 3;
While (prost1) And (i <= koren) Do
Begin prost1 := n mod i<>0;
i := i + 2
End;
If prost1 Then Writeln(n:3)
End;
Begin Writeln('upisi broj clanova niza');
Readln(m);
Writeln('prosti brojevi su');
For n := 1 to m Do prost(n);
Readln;
End.
Zadatak 5. Sastaviti proceduru koja određuje maksimum mx i minimum mn tri zadata broja a, b,
i c korišćenjem opisa funkcija minimuma i maksimuma dva broja min i max.
Program minmax;
Var a,b,c,mn,mx:integer;
Function min(x,y:integer):integer;
Begin If x>y Then min:=y Else min:=x;
End;
Function max(x,y:integer):integer;
Begin If x>y Then max:=x Else max:=y;
End;
Procedure minmax1(x,y,z:integer;var mn,mx:integer);
Begin mn:=min(min(x,y),z);
mx=max(max(x,y),z);
End;
Begin Writeln('Unesite tri broja');
Readln(a,b,c);
minmax1(a,b,c,mn,mx);
Writeln('Najveci broj je ', mx,' a najmanji je ', mn);
Readln End.
Zadatak 6. Napisati program koji, korišćenjem procedure razmeni, četiri različita broja a,b,c,d
uređuje testerasto: a<b>c<d
Program cetiribroja;
Var a,b,c,d:integer;
Procedure razmeni(var a,b:integer);
Var pom:integer;
Begin If a>b Then
Begin pom := a; a := b; b := pom;
End;
End;
Begin Writeln('Unesite cetiri broja');
Readln(a,b,c,d);
Repeat razmeni(a,b);
razmeni(c,b);
razmeni(c,d);
Until (a<b) And (b>c) And (c<d);
Writeln(a:6,b:6,c:6,d:6);
Readln;
End.
Čas 10/12
Nastavna jedinica: Rekurzivne funkcije i procedure
Zadatak 1. Napisati rekurzivnu funkciju za izračunavanje sume prvih n prirodnih brojeva:
1+2+3+...+n
Program rekuzivna1;
Function suma(k:integer):integer;
Begin
If k=0 Then suma:=0 Else suma:=k+suma(k-1);
End;
Var i,n,s:integer;
Begin
Writeln('Unesite broj n');
Readln(n);
s:=suma(n);
Writeln(s);
Readln;
End.
Zadatak 2. Napisati rekurzivnu funkciju za izračunavanje faktorijela broja n.
Program rekurzivna2;
Function fakt(n:integer):integer;
Begin
If n = 0 Then fakt:=1 Else fakt:=n * fakt(n-1);
End;
Var n,p:integer;
Begin
Writeln('Unesite broj n');
Readln(n);
p:=fakt(n);
Writeln(p); Readln;
End.
Zadatak 3. Napisati rekurzivnu funkciju za izračunavanje n-tog člana Fibonačijevog niza: f1=1,
f2=1, fi=fi-1 +fi-2, i=3,4,...
Program fibonaci;
Function fib(n:integer):integer;
Begin If (n=1) or (n=2) Then fib:=1 Else fib:= fib(n-1) + fib(n-2);
End;
Var i,fibon:integer;
Begin Writeln('Unesite i');
Readln(i);
fibon:=fib(i);
Writeln(fibon); Readln;
End.
Zadatak 4. Izračunati sumu S niza S = 3! - 6! + 9! - 12!…n!, faktorijel računati preko rekurzivne
funkcije.
Program suma;
Function fakt(x:integer):integer;
Begin
If x = 0 Then fakt:=1 Else fakt:=x * fakt(x-1);
End;
Var i,n,z,s:integer;
Begin
Writeln('Unesite broj n');
Readln(n);
i:=3;
z:=1;
While i<= n Do
Begin s:=s+z*fakt(i);
i:=i+3;
z:=-z;
End;
Writeln(s); Readln;
End.
Zadatak 5. Izračunati varijacije bez ponavljanja K – te klase od N elemenata pri čemu je kn a
varijacije su: V=n(n-1)(n-2)…(n-k+1)=)!(
!
kn
n
Program rekurzivna2;
Function fakt(x:integer):integer;
Begin
If x = 0 Then fakt:=1 Else fakt:=x * fakt(x-1);
End;
Var n,k:integer;
V:real;
Begin
Writeln('Unesite broj n i k');
Readln(n,k);
V:=fakt(n)/fakt(n-k);
Writeln(V:5:1); Readln;
End.
Zadatak 6. Pronaći sumu. Prekinuti izvršenje kada tekući član postane po apsolutnoj vrednosti
veći od EPS.
...
!2)1(...
!6!4!21)cos(
2642
k
xxxxx
kk
Zadatak 7. Banka na početku svake godine ulagačima obračunava kamatu sa P procenata na
novčanu sumu koja je odležala u toku prethodne godine. Napisati program kojim se uz
korišćenje rekurzivne funkcije KAMATA, izračunava novčani iznos kojim će ulagač raspolagati
posle G godina, ako je početno ulaganje S.
Zadatak 8. Izračunaj S po formuli
112
!K110
!K
...
!K4
!K2
!KAS
Zadatak 9. Za dato n izračunati
1
1...
3
1
2
1
!...
3
1
2
1
!2
2
1
!1
n
nS
Čas 13/15
Nastavna jedinica: Nestandardni prosti tipovi podataka (nabrojiv tip, intervalni tip)
Nastavna jedinica: Tip string i operacije nad stringovima
Nabrojiv tip
Nabrojiv tip sse definiše kao uređen skup nabrojanih imena, koja predstavljaju
konstante tipa. Imena komponenti se odvajaju jedna od druge zapetom, a skup komponentni koje
čine dati tip se stavlja između zagrada. Ista konstanta se ne može pojaviti u dve ili više type
definicija. Piše se:
Type dani = (ponedeljak, utorak, sreda, četvrtak, petak, subota, nedelja);
Var dan: dani;
a to je ekvivalentno sa:
Var dan: (ponedeljak, utorak, sreda, četvrtak, petak, subota, nedelja);
Promenljivoj može biti dodeljena bilo koja vrednost specificirana u definiciji tipa kome
pripada. Promenljive nabrojivog tipa ne mogu biti parametri naredbi ulaza Read i Readln, nao ni
naredbi izlaza Write i Writeln.
Zadatak 1. Napisati program kojim se ispisuju pravila saobraćajnog kretanja koja pokazuje
semafor.
Program semafor;
Type boje=(crveno, zuto, zeleno);
Var boja: boje;
Begin For boja:= crveno to zeleno Do
Case boja of
crveno: Writeln('Zabranjeno prelazenje');
zuto: Writeln('Pripremi se za prelazenje');
zeleno: Writeln('Slobodno predji');
End;
Readln End.
Zadatak 2. Napisat program kojim se ispisuje da li je radni dan ili ne i koji je to dan.
Program koji_je_to_dan;
Type dani = (ponedeljak, utorak, sreda, četvrtak, petak, subota, nedelja);
Var dan:dani;
Begin
For dan:= ponedeljak To nedelja Do
Case dan of
ponedeljak: Writeln('Ponedeljak je radni dan');
utorak: Writeln('Utorak je radni dan');
sreda: Writeln('Sreda je radni dan');
četvrtak: Writeln('Četvrtak je radni dan');
petak: Writeln('Petak je radni dan');
subota: Writeln('Subota je radni dan');
nedelja: Writeln('Nedelja je radni dan');
End;
Readln End.
Intervalni tip
Odsečak bilo kog prostog tipa, izuzev real, može definisati intervalni tip. Odsečak se
zadaje intervalom od najmanje do najveće vrednosti, razdvojenih sa dve tačke. Pri tom prva
konstanta zadaje najmanju vrednost, koja mora biti manja ili jednaka najvećoj vrednosti, koja je
zadata drugom konstantom. Prosti tip od kog se gradi intervalni tip naziva se bazni tip. Piše se:
Type godisnjedoba = (prolece, leto, jesen, zima);
sezona = prolece..jesen;
temperatura = - 30 .. 30;
znak = ‘A’.. ‘Z’
cifra = 0..9
Var period:sezona;
t1, t2, t3: temperatura;
slovo1, slovo2: znak;
broj: cifra;
a to je ekvivalentno sa:
Var period : prolece..jesen;
t1, t2, t3: - 30 .. 30;
slovo1, slovo2: ‘A’.. ‘Z’
broj: 0..9;
Zadatak 3. Napisati program kojim se na osnovu datuma u intervalu od 1980 do 1990 godine
određuje datum sledećeg dana.
Program datum;
Var god:1980..1990;..
mesec:1..12;
dan:1..31;
Begin Writeln('Unesite dan, mesec i godinu');
Readln(dan,mesec,god);
Case mesec of
1,3,5,7,8,10,12:
Begin If dan<31 Then
dan:=dan+1
Else If mesec < 12 Then
Begin mesec:=mesec + 1;
dan:=1;
End
Else
Begin god:=god+1;
mesec:=1;
dan:=1;
End;
End;
4,6,9,11:
If dan<30 Then
dan:=dan+1
Else
Begin mesec:=mesec + 1;
dan:=1;
End;
2:
If dan<28 Then
dan:=dan+1
Else If god mod 4 = 0 Then
dan:=dan+1
Else
Begin mesec:=mesec+1;
dan:=1
End;
End;
Writeln('Novi datum je ',dan, '.' ,mesec, '.', god,'godine');
Readln
End.
Nastavna jedinica: Tip string i operacije nad stringovima
Deklaracija VAR kolac: STRING[10] – 10 je maksimalna dužina stringa tj. reči kolac
Određivanje dužine: LENGTH(kolac)
Učitavanje vrednosti promenljive tipa string mora da se radi sa naredbom READLN
Funkcijom concat(s1, s2, s3,…) formira se novi string nadovezivanjem više stringova koji su
argumenti funkcije. (concat(‘12’, ‘ 34’, ‘56’) daje ‘123456’
Funkcija pos(s1,s2), ispituje da li se string s1 sadrži u stringu s2. Ako je to tačno, pos daje ceo
broj koji označava poziciju prvog pojavljivanja idući s leve stranes1 u s2. U protivnom daje 0.
pos('gram', 'programiranje') daje 4
Funkcija copy(s, p, d) daje novi string formiran kopiranjem d znakova stringa s počev od
pozicije p.
Ako želimo da ispišemo prva tri znaka stringa dan, treba napisati writeln(copy(dan, 1, 3))
Procedura delete(s, p, d) uklanja podstring od s počev od pozicije p na dužini d.
Na primer dan:='ponedeljak'
delete(dan,5,3) Dobiće se ´ponejak´
Procedura insert(s1, s2, p) umeće string s1 u string s2 počev od pozicije p.
Zadatak 4. Napisati program kojim se reči sa ulaznog teksta ispisuju u inverznom poretku. Reči
su međusobno razdvojene prazninama.
Program proba;
Var blanko: integer;
rec, novarec:string[50];
Begin Writeln('unesite rec');
Readln(rec);
novarec:=' ';
rec:=Concat(rec,' ');
While rec <> '' Do
Begin blanko:=Pos(' ',rec);
novarec:=Copy(rec,1,blanko)+novarec;
Delete(rec,1,blanko);
End;
Writeln('inverzan red je');
Writeln(novarec);
Readln End.
Čas 16/18
Nastavna jedinica: Jednodimenzionalni nizovi
Zadatak 1. Napisati program kojim, se za dato n, izračunava suma pozitivnih elemenata niza
a[1], a[2],...a[n].
Program sumapoz;
Var x:array [1..100] of integer;
i,n,suma:integer;
Begin Writeln('Unesite dimenziju niza'); Readln(n);
Writeln('Unesite clanove tog niza');
For i:=1 To n Do
Begin Write('a(',i,')= ');
Readln(x[i]);
If x[i] > 0 Then suma:=suma + x[i];
End;
Writeln('Zuma pozitivnih clanova je ',suma);
Readln
End.
Zadatak 2. U datom nizu a[1], a[2],...a[n] promeniti znak svim elementima sa parnim
indeksima.
Program indeksi;
Var a:array [1..100] of integer;
i,n:integer;
Begin
Writeln('Unesite dimenziju niza'); Readln(n);
Writeln('Unesite clanove tog niza');
For i:=1 To n Do
Begin Write('a(',i,')= ');
Readln(a[i]);
If i mod 2 = 0 Then a[i]:= - a[i];
End;
Writeln('Niz sa promenjenim znacima je');
For i:=1 To n Do
Writeln('a(',i,')= ',a[i]);
Readln
End.
Zadatak 3. Odrediti indeks i vrednost prvog člana u nizu koji je najbliži srednjoj vrednosti niza.
Program clanniza;
Var i,n,k,s,clan:integer;
as,raz:real; a: array[1..100] of integer;
Begin
Writeln('Upisi broj clanova niza'); Readln(n);
For i := 1 To n Do
Begin Write('a[',i:2,']= '); Readln(a[i]);
s := s + a[i];
End;
as := s / n;
clan := a[1];
raz:= abs( as - a[1] );
For i:= 2 To n Do
If raz > abs( as - a[i] ) Then
Begin raz := abs( as - a[i] );
clan := a[i];
k:=i;
End;
Writeln('Najblizi element niza aritmetickoj sredini je ',clan);
Writeln(' a njegov indeks je ',k);
Readln End.
Zadatak 4. Odrediti najveći element niza x.
Program najveci;
Var x:array [1..100] of integer;
i,n,max:integer;
Begin
Writeln('Unesite dimenziju niza'); Readln(n);
max:=-100;
Writeln('Unesite clanove tog niza');
For i:=1 To n Do
Begin Write('a(',i,')= ');
Readln(x[i]);
If max < x[i] Then max:=x[i];
End;
Writeln('Najveci element niza je ',max);
Readln End.
Zadatak 5. Napisati program kojim se određuje broj različitih elemenata niza a[1], a[2],...a[n].
Program razliciti;
Var a:array [1..100] of integer;
i,j,n,k,br:integer;
Begin
Writeln('Unesite dimenziju niza'); Readln(n);
Writeln('Unesite clanove tog niza');
For i:=1 To n Do
Begin Write('a(',i,')= '); Readln(a[i]);
End;
br:=1;
For i:=2 To n Do
Begin k:=0;
For j:=1 To i-1 Do If a[i] = a[j] Then k:=1;;
If k=0 Then br:=br+1;
End;
Writeln('Broj razlicitih elemenata je ',br);
Readln End.
Zadatak 6. Napisati program kojim se realizuje ciklično pomeranje vrednosti elemenata a(1),
a(2), a(3),...a(n) niza za jedno mesto u levo.
Program Pomeraj;
Var a:array [1..100] of real;
pom:real; n,i:integer;
Begin
Write('Unesi broj elemenata niza '); Readln(n);
Writeln('Unesi niz a[i] ');
For i:=1 To n Do readln(a[i]);
pom:=a[1];
For i:=2 To n Do a[i-1]:=a[i];
a[n]:=pom;
For i:=1 To n Do Writeln(a[i]:5:0);
Readln End.
Čas 19/21
Nastavna jedinica: Dvodimenzionalni nizovi
Zadatak 1. Napisati programe kojim se za matricu A(NxN) izračunava:
a) suma svih elemenata;
b) suma dijagonalnih elemenata, tj. suma elemenata sa jednakim indeksima
c) vrednost najvećeg elementa na sporednoj dijagonali;
d) suma elemenata ispod glavne digagonale
e) suma negativnih elemenata matrice.
a)
Program sumasvih;
Uses Crt;
Type mat = array [1..100,1..100] of integer;
Var a:mat;
i,j,n:integer;
s:real;
Procedure unos( var a:mat);
Begin
Writeln('Unesite dimenziju niza');
Readln(n);
Writeln('Unesite clanove tog niza');
For i:=1 to n Do
For j:=1 To n Do
Begin Write('a(',i,',',j,')= ');
Readln(a[i,j]);
End;
End;
Procedure suma(var a:mat; var s:real);
Begin
For i:=1 to n Do
Begin For j:=1 to n Do
s:= s + a[i,j];
End;
End;
Begin
Clrscr;
unos(a);
suma(a,s);
Writeln('Suma svih clanova matrice je S = ', s :2:3);
Readln ;
End.
b)
Program sumasvih;
uses crt;
type mat=array [1..100,1..100] of integer;
var a:mat;
i,j,n:integer;
s:real;
procedure unos( var a:mat);
Begin
writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n Do
for j:=1 to n Do
Begin
write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure suma(var a:mat; var S:real);
Begin for i:=1 to n Do
for j:=1 to n Do
if i=j then s:= s + a[i,j];
end;
Begin clrscr;
unos(a);
suma(a,s);
writeln('Suma dijagonalnih elemenata je S = ', s :2:3);
readln
end.
c)
Program najveci;
uses crt;
type mat=array [1..100,1..100] of integer;
var a:mat;
i,j,n,max:integer;
procedure unos(var a:mat);
Begin writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n Do
for j:=1 to n Do
Begin write('a(',i,',',j,')= ');readln(a[i,j]);
end;
end;
procedure maxi(var a:mat; var max:integer);
Begin for i:=1 to n Do
for j:=1 to n Do
if i+j = n + 1 then max:= a[i,j];
end;
Begin clrscr;
unos(a); maxi(a,max);
writeln('Najveci element na sporednoj dijaognali je ', max);
readln ;
end.
d)
Program najveci;
uses crt;
type mat=array [1..100,1..100] of integer;
var a:mat;
i,j,n,s:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n Do
for j:=1 to n Do
Begin write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure ispod(var a:mat; var s:integer);
Begin for i:=1 to n do
for j:=1 to n do
if i >j then s:= s + a[i,j];
end;
Begin clrscr;
unos(a);
ispod(a,s);
writeln('Najveci element na sporednoj dijaognali je ', s);
readln ;
end.
e)
Program najveci;
uses crt;
type mat=array [1..100,1..100] of integer;
var a:mat;
i,j,n,s:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n do
for j:=1 to n do
Begin write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure negativni(var a:mat; var s:integer);
Begin for i:=1 to n do
for j:=1 to n do
if a[i,j] < 0 then s:= s + a[i,j];
end;
Begin clrscr;
unos(a);
negativni(a,s);
writeln('Suma negativnih elemenata je ', s);
readln ;
end.
2. Napisati procedure kojim se na osnovu date matrice A(NxN) formira niz
b[1], b[2], ... b[n] čiji su elementi redom jednaki:
a) sumi elemenata u vrstama matirce A
b) proizvodu elemenata vrste
c) najmanjim vrednostima u vrstama matrice A
d) razlici najvećih i najmanjih vrednosti u vrsti.
a) program sumaniz;
type mat=array [1..100,1..100] of integer;
niz=array [1..100] of integer;
var a:mat;
b:niz;
i,j,n:integer;
s:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza'); readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n do
for j:=1 to n do
Begin write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure suma(var a:mat; var b:niz);
Begin for i:=1 to n do
Begin s:=0;
for j:=1 to n do s:= s + a[i,j];
b[i]:=s;
end;
end;
Begin unos(a);
suma(a,b);
writeln('Suma clanova matrice po vrstama je ');
for i:=1 to n do writeln('b[',i,'] = ', b[i]);
readln ;
end.
b) program proizvodniz;
type mat=array [1..100,1..100] of integer;
niz=array [1..100] of integer;
var a:mat;
b:niz;
i,j,n:integer;
p:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n do
for j:=1 to n do
Begin write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure proizvod(var a:mat; var b:niz);
Begin for i:=1 to n do
Begin p:=1;
for j:=1 to n do p:= p * a[i,j];
b[i]:=p;
end;
end;
Begin unos(a);
proizvod(a,b);
writeln('Proizvod clanova matrice po vrstama su ');
for i:=1 to n do writeln('b[',i,'] = ', b[i]);
readln ;
end.
c)
program minniz;
type mat=array [1..100,1..100] of integer;
niz=array [1..100] of integer;
var a:mat;
b:niz;
i,j,n:integer;
min:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n do
for j:=1 to n do
Begin write('a(',i,',',j,')= '); readln(a[i,j]);
end;
end;
procedure minimum(var a:mat; var b:niz);
Begin for i:=1 to n do
Begin min:=a[i,1];
for j:=1 to n do
if min>a[i,j] then min:=a[i,j];
b[i]:=min;
end;
end;
Begin unos(a);
minimum(a,b);
writeln('Najmanji elementi po vrstama matrice su ');
for i:=1 to n do
writeln('b[',i,'] = ', b[i]);
readln ;
end.
d)
program razlikaniz;
type mat=array [1..100,1..100] of integer;
niz=array [1..100] of integer;
var a:mat;
b:niz;
i,j,n:integer;
min,max:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza');
readln(n);
writeln('Unesite clanove tog niza');
for i:=1 to n do
for j:=1 to n do
Begin write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure minimum(var a:mat; var b:niz);
Begin For i:=1 to n do
Begin min:=a[i,1];
max:=a[i,1];
For j:=1 to n do
Begin if min>a[i,j] then min:=a[i,j];
if max<a[i,j] then max:=a[i,j];
end;
b[i]:=max - min;
end;
end;
Begin unos(a);
minimum(a,b);
writeln('Najmanji elementi u vrstama matrice su ');
For i:=1 to n do
writeln('b[',i,'] = ', b[i]);
readln ;
end.
3. Napisati program kojim se u matrici A(NxN) razmenjuju vrsta koja sadrži element najveće
vrednosti i vrsta koja sadrži element najmanje vrednosti.
Program minmaxvrsta;
uses crt;
type mat=array [1..100,1..100] of integer;
niz=array [1..100] of integer;
var a:mat;
mini,maxi:niz;
i,j,n,k,p,pom,min,max,promena:integer;
procedure unos( var a:mat);
Begin writeln('Unesite dimenziju niza'); readln(n);
writeln('Unesite clanove tog niza');
For i:=1 to n do
For j:=1 to n do
Begin write('a(',i,',',j,')= ');
readln(a[i,j]);
end;
end;
procedure minimax(var a:mat; var k,p:integer);
Begin {odredjivanje najmanjih tj. najvecih elemenata po vrstama}
For i:=1 to n do
Begin min:=a[i,1];
max:=a[i,1];
For j:=1 to n do
Begin if min>a[i,j] then min:=a[i,j];
if max<a[i,j] then max:=a[i,j];
end;
mini[i]:=min;
maxi[i]:=max;
end;
{odredjivanje vrste sa najmanjim (k) tj. najvecim (p) elementom}
k:=1; p:=1;
min:=mini[1];
max:=maxi[1];
For i:=2 to n Do if mini[i]<min then
Begin min:=mini[i]; k:=i;
end;
For i:=2 to n Do if maxi[i]>max then
Begin max:=maxi[i]; p:=i ;
end;
end;
procedure razmena(var k,p:integer; var a:mat);
Begin promena:=0;
For i:=1 to n Do
Begin pom:=0;
For j:=1 to n Do
Begin if i=k then
Begin if promena = 0 then
Begin pom:=a[k,j];
a[k,j]:=a[p,j];
a[p,j]:=pom;
if j=n then promena:=1;
end;
end
else if i=p then
Begin if promena =0 then
Begin pom:=a[p,j];
a[p,j]:=a[k,j];
a[k,j]:=pom;
if j=n then promena:=1;
end;
end;
end;
end;
end;
Begin clrscr;
unos(a);
minimax(a,k,p);
razmena(k,p,a);
writeln('Matrica sa razmenjenim vrstama je ');
For i:=1 to n Do
Begin writeln;
For j:=1 to n Do
write(' a(',i,',',j,')= ',a[i,j]:2);
end;
readln ;
end.
DATOTEKE
Definisanje datoteke:
TYPE
brojevi = FILE OF integer;
skupreci = FILE OF string[20];
djak = RECORD
ime: string[20];
prezime: string[20];
END;
skola = FILE OF djak;
ASSIGN(datotečna promenljiva, string) – string je konstanta ili promenljiva koja
identifikuje datoteku na disku.
Na primer, assign(skola, ‘ucenici.dat’);
– datotečna promenljiva spisak je povezana sa datotekom ucenici.dat na aktivnom
disku.
Postojeća datoteka se “otvara” (priprema) za čitanje primenom standardne procedure
RESET (datotečna promenljiva).
Na primer, assign(skola, ‘ucenici.dat’);
reset(skola);
REWRITE(datotečna promenljiva) – naredba kojom se otvara datoteka za upis podataka u
datoteku. Ovom naredbom se briše postojeći sadržaj datoteke.
Na primer, rewrite(skola);
WRITE(datotečna promenljiva, promenljiva tipa slog) – naredba kojom se upisuje slog u
datoteku.
Na primer, write(skola, djak);
pri čemu je promenljiva djak definisana kao slog (record).
READ(datotečna promenljiva, promenljiva tipa slog) – naredba kojom se čitaju slogovi iz
datoteke.
Na primer, read(skola, djak);
pri čemu je promenljiva djak definisana kao slog (record).
1. Napisati program za formiranje datoteke imenik koja se sastoji od slogova sa poljima ime i telefon. Unos podataka se završava kada se umesto imena unese reč ”kraj”
program imen ik ; uses c r t ; t ype s lovo=re cord ime:s t r ing ; t e le fon :s t r ing ; end ; va r sp isak :s lovo ; da t : f i l e o f s lovo ; i : in teger ; s imbo l :s t r ing ; beg in c l rsc r ; ass ign (da t , ' imen i k .da t ' ) ; rese t (da t ) ; rew r i te (da t ) ; i : =1 ; repea t wr i t e ln ( 'Une s i te s led ece podatke ' ) ; w i th sp isak do beg in wr i t e ( 'Unes i te ime p re tp l a tn ika ' ) ; read ln ( ime) ; wr i t e ( 'Unes i te t e le fonsk i b ro j p re tp la tn ika ' ) ; read ln ( te le fon ) ; wr i t e (da t , sp isak ) end ; wr i t e ln ( 'Za k ra j unos a u kuca j te " k ra j " ' ) ; read ln ( s imbo l ) ; i : = i+1 ; un t i l s imbo l = ' k ra j ' ; c lose (da t ) ; read ln ; end .
2. Slog o automobilu se sastoji iz njegove marke, registracije, imena i prezimena vlasnika. Za postojeću datoteku (AUTO.DAT) sa ovakvim slogovima, napisati procedure koje utvrćuju i štampaju:
a) prezimena vlasnika automobila date marke b) broj automobila svake marke.
a) p rogram au tomobi l ; uses c r t ; t ype au to=reco rd marka :s t r ing ; reg is ta r :s t r in g ; ime:s t r ing ; p rez ime: s t r ing ; end ;
var ko la :au to ; da t : f i l e o f au to ; i : in teger ; s imbo l :char ; marka1 :s t r ing ; beg in c l rsc r ; ass ign (da t , 'au to .da t ' ) ; rese t (da t ) ; wr i t e ln ( 'Une s i te ma rku a u tomobi la ko ju ze l i t e ' ) ; read ln (ma rka1 ) ; wr i t e ln ( ' V lasn ic i da te m arke su ' ) ; wh i le no t eo f (da t ) do eo f (da t ) – End Of F i le – k ra j d a to teke beg in w i th ko la do beg in read (da t ,ko la ) ; i f marka 1 = ma rka then beg in wr i t e ln ( ' ' , ime , ' ' ,p re z i me ) ; end ; end ; end ; c lose (da t ) ; read ln ; end .
b) p rogram au tomobi l ; uses c r t ; t ype au to=reco rd marka :s t r ing ; reg is ta r :s t r ing ; ime:s t r ing ; p rez ime: s t r ing ; end ; va r ko la :au to ; da t : f i l e o f au to ; i ,b r : in tege r ; s imbo l :char ; marka1 :s t r ing ; beg in c l rsc r ; ass ign (da t , 'au to .da t ' ) ; rese t (da t ) ;
wr i t e ln ( 'Une s i te ma rku a u tomobi la ko ju ze l i t e ' ) ; read ln (ma rka1 ) ; wh i le no t eo f (da t ) do w i th ko la do beg in read (da t ,ko la ) ; i f marka 1 = ma rka then b r :=br+ 1 ; end ; wr i t e ln ( 'B ro j au tomobi la da te marke je ' ,b r : 3 ) ; c lose (da t ) ; read ln ; end .
3. Za postojeću datoteku (BIBLIOTE.DAT) sa slogovima kojima se opisuju knjige biblioteke i da slog sadrži: ime autora, prezime autora, naziv i godinu izdanja, napisati procedure koje utvrđuju i štampaju nazive knjiga datog autora izdatih od 1970 g. nadalje.
program b ib l io teka ; uses c r t ; t ype kn j iga=record ime :s t r ing ; p rez ime: s t r ing ; naz iv :s t r ing ; god ina : in teger ; end ; va r de la :kn j iga ; da t : f i l e o f kn j iga ; i : in teger ; s imbo l :s t r ing ; beg in c l rsc r ; ass ign (da t , 'b ib l io te .da t ' ) ; rese t (da t ) ; wr i t e ln ( 'Une s i te p rez ime au tora ' ) ; read ln (s imbo l ) ; wr i t e ln ( ' ' , s imbo l , ' j e nap isao s ledec e kn j ige od 1 970 god ine ' ) ; wh i le no t eo f (da t ) do w i th de la do beg in read (da t ,de la ) ; i f s imbo l = p rez ime then i f god ina >= 197 0 t hen wr i t e ln (naz iv ) end ; end ; c lose (da t ) ; read ln ; end .