You are on page 1of 64

Reeni zadaci - Uvod u programiranje I Kolokvijum

Reeni zadaci iz zbirke


9.Napisati program za izraunavanje razlike dva cela broja. MODULE zad9; FROM InOut IMPORT WriteLn,WriteString,ReadInt,WriteInt; VAR prvi,drugi,razlika:INTEGER; BEGIN (* ucitavanje prvog broja u promenljivu*) WriteString('Unesite prvi ceo broj:'); ReadInt(prvi); WriteLn; (* ucitavanje drugog broja u promenljivu drugi*) WriteString('Unesite drugi ceo broj:'); ReadInt(drugi); WriteLn; razlika:=prvi-drugi; (* stampanje ucitanih brojeva i rezultata*) WriteInt(prvi,1); WriteString(' - '); WriteInt(drugi,1); WriteString(' = '); WriteInt(razlika,1); END zad9. 10. Napisati program za izraunavanje vrednost x za zadati realan broj x i prirodan broj n. MODULE zad10; FROM InOut IMPORT ReadCard,WriteCard,WriteString,WriteLn; FROM RealInOut IMPORT ReadReal,WriteReal; VAR x,rez:REAL; n,i:CARDINAL; BEGIN (* ucitavanje realnog broja u promenljivu x *) WriteString('Unesite realan broj x:'); ReadReal(x); WriteLn; (* ucitavanje celog broja u promenljivu n*) WriteString('Unesite prirodan broj n:'); ReadCard(n); WriteLn; (* izracunavanje razultata u promenljivoj rez*) rez:=1.0; FOR i:=1 TO n DO rez:= rez*x; END; (* stampanje ucitanih brojeva i rezultata*) WriteReal(x,0); WriteString('^'); WriteCard(n,0); WriteString(' = '); WriteReal(rez,0); END zad10.
n

11. Napisati program za izraunavanje vrednosti funkcije 2 , < 0 0, = 0 ln , > 0

MODULE zad11; FROM InOut IMPORT WriteString,WriteLn; FROM RealInOut IMPORT ReadReal,WriteReal; FROM MathLib0 IMPORT ln; VAR x,rez:REAL; BEGIN WriteLn; WriteString('Unesite vrednosti argumenta funkcije: '); ReadReal(x); (* izracunavanje*) IF x<0.0 THEN rez:=x*x; ELSIF x=0.0 THEN rez:=0.0; ELSE rez:=ln(x); END; WriteLn; WriteString('Za vrednost argumenta'); WriteReal(x,5); WriteString(' vrednost funkcije iznosi:'); WriteReal(rez,5); END zad11.
12. Napisati program za izraunavanje vrednosti izraza

/
=

za zadatu vrednost n. Implementirati algoritam dat u zadatku 4. MODULE zad12; FROM InOut IMPORT ReadCard,WriteCard,WriteString,WriteLn; FROM RealInOut IMPORT WriteReal; VAR n,i:CARDINAL; rez:REAL; BEGIN WriteLn; WriteLn; WriteString('Unesite prirodan broj n:'); ReadCard(n); WriteLn; rez:=0.0; FOR i:=1 TO n DO rez:=rez+1.0/FLOAT(i); END; WriteString('Suma 1/i, i=1...'); WriteCard(n,0); WriteString(' je '); WriteReal(rez, 0); END zad12.

13. Napisati program za izraunavanje vrednosti funkcije u zavisnost od promenljive znak. Funkcija je zadata slededom formulom

14. Dati su realni brojevi a i b. Oba broja su veda od jedan. Napisati program za odreivanje najvedeg nenegativnog celog broja n takvog da n vai a>b .
FROM InOut IMPORT WriteCard,WriteString,WriteLn; FROM RealInOut IMPORT ReadReal; VAR a,b,bNaN:REAL; n:CARDINAL; BEGIN REPEAT WriteString('Unesite realan broj a>1.0 :'); ReadReal(a); WriteLn; UNTIL a > 1.0; REPEAT WriteString('Unesite realan broj b>1.0:'); ReadReal(b); WriteLn; UNTIL b > 1.0; n:=0; bNaN:=1.0; WHILE a>bNaN DO INC(n); bNaN:=bNaN*b END; WriteString('Najveci n takav da a>b^n je:'); WriteCard(n-1,0); END zad14.

(, )

sin , = cos , = arctan , = ln , = exp , =

MODULE zad13; FROM InOut IMPORT Read,Write,WriteString,WriteLn; FROM RealInOut IMPORT ReadReal,WriteReal; FROM MathLib0 IMPORT sin,cos,arctan,ln,exp; VAR x,rez:REAL; znak:CHAR; BEGIN WriteString('Unesite realan broj x:'); ReadReal(x); WriteLn; REPEAT WriteString('Unesite znak s,c,a,l ili e:'); Read(znak); WriteLn; UNTIL (znak='s') OR (znak='c') OR (znak='a') OR (znak='l') OR (znak='e'); CASE znak OF 's':rez:=sin(x)| 'c':rez:=cos(x)| 'a':rez:=arctan(x)| 'l':rez:=ln(x)| 'e':rez:=exp(x) END; WriteString('f('); WriteReal(x,0); WriteString(", ' "); Write(znak); WriteString("')="); WriteReal(rez,7); END zad13.

15. Napisati program za izraunavanje svih delitelja datog prirodnog broja n.


MODULE zad15; FROM InOut IMPORT ReadCard,WriteCard,WriteString,WriteLn; VAR n,i:CARDINAL; BEGIN WriteString('Unesite prirodan broj n:'); ReadCard(n); WriteLn; WriteString('Delitelji broja'); WriteCard(n,0); WriteString(' su:'); WriteLn; FOR i:=1 TO n DO IF n MOD i = 0 THEN WriteCard(i,0); WriteString(''); END END END zad15.

16.Napisati program za izraunavanje obima i povrine kruga zadatog poluprenika. MODULE zad16; FROM InOut IMPORT WriteString,WriteLn; FROM RealInOut IMPORT ReadReal,WriteReal; CONST Pi =3.142; VAR poluprecnik,povrsina,obim:REAL; BEGIN WriteLn; WriteLn; WriteString('Unesite poluprecnik kruga:'); ReadReal(poluprecnik); povrsina:=poluprecnik*poluprecnik*Pi; obim:=2.0 * poluprecnik*Pi; WriteLn; WriteString('Povrsina kruga sa unetim poluprecnikom je:'); WriteReal(povrsina,8); WriteString(' a njegov obim je:'); WriteReal(obim,8); END zad16.
17. Napisati program koji uitava dva broja, znak koji predstavlja operaciju (+ sabiranje, * mnoenje, / deljenje) i primenjuje datu operaciju nad uitanim brojevima i ispisuje rezultat izraunavanja.
MODULE zad17; FROM InOut IMPORT WriteLn,WriteString,Read; FROM RealInOut IMPORT ReadReal,WriteReal; VAR broj1,broj2:REAL; rezultat:REAL; op:CHAR; BEGIN WriteString('Unesite dva broja:'); ReadReal(broj1); WriteLn; ReadReal(broj2); WriteLn; WriteString('Unesite znak za operaciju (+,*,/):'); Read(op); WriteLn; IF (op = '+') OR (op= '*') OR (op= '/') THEN IF op = '+' THEN rezultat:=broj1+broj2 ELSIF op = '*' THEN rezultat:=broj1*broj2; ELSE IF broj2 <> 0.0 THEN rezultat:=broj1/broj2; ELSEa rezultat:=0.0 END; END; WriteString('Rezultat je:'); WriteReal(rezultat,8); ELSE WriteString('Operacija nije dobro zadata') END END zad17.

18. Napisati program koji sa ulaza uitava znak i odreuje da li je uitani znak slovo, cifra ili neki drugi specijalni znak, i na osnovu toga ispisuje odgovarajudu poruku.
MODULE zad18; FROM InOut IMPORT Read,Write, WriteLn, WriteString; VAR zn:CHAR; BEGIN WriteString('Unesite znak:'); Read(zn); WriteString('Uneti znak je:'); IF ((zn>='a') AND (zn<='z')) OR ((zn>='A') AND (zn<='Z')) THEN WriteString('slovo') ELSIF (zn >= '0') AND (zn<='9') THEN WriteString('cifra') ELSE WriteString('specijalan znak'); END END zad18. 21.Napisati program koji uitava tri prirodna broja, oreuje i tampa najmanji od njih (minimalnu vrednost). MODULE zad21; FROM InOut IMPORT ReadCard,WriteCard,WriteString,WriteLn,Done; VAR x,y,z,min: CARDINAL; ok: BOOLEAN; BEGIN WriteLn; WriteLn; REPEAT WriteString('Unesite prirodan broj x:'); ReadCard(x); ok:= Done; WriteLn; WriteString('Unesite prirodan broj y:'); ReadCard(y); ok:=ok AND Done; WriteLn; WriteString('Unesite prirodan broj z:'); ReadCard(z); ok:= ok AND Done; IF NOT ok THEN (* bar jedan broj je pogresno unet *) WriteLn; WriteString('Greska u unosu'); WriteLn; END UNTIL ok; (*Unos ce se ponavljati sve dok ne bude ispravan*) IF x<y THEN (* x je manji od y*) IF x<y THEN min:=x ELSE min:=z END ELSE (* y je manji od x*) IF y<z THEN min:=y ELSE min:=z END END; WriteLn; WriteString('Minimum je'); WriteCard(min,0) END zad21.

23. Napisati program za ispisivanje svih savrsenih brojeva nekog zadatog broja. Broj je savrsen ako je jednak zbiru svojih delitelja (osim sebe samog)
MODULE zad22; FROM InOut IMPORT WriteString,WriteLn,ReadCard,WriteCard,Done; VAR gornjaGr,i,broj,suma:CARDINAL; ok:BOOLEAN; BEGIN REPEAT WriteString('Dokle zelite ispis savrsenih brojeva:'); ReadCard(gornjaGr); ok:=Done; WriteLn; UNTIL ok; WriteString('SAVRSENI BROJEVI SU:'); WriteLn; FOR broj:=2 TO gornjaGr DO suma:=1; (* jer je 1 uvek delitelj broja*); FOR i:=2 TO broj DIV 2 DO (* nalazi sve delitelje broja osim 1 i samog broja*) IF broj MOD i = 0 THEN (* i je delitelj broja*) suma:=suma+i; END END; IF broj = suma THEN (* broj je savrsen*) WriteCard(broj,10); END END END zad22.

24. Napisati program koji simulira rad kalkulatora. Operandi i odgovarajude operacije se uitavaju sa ulaza naizmenino i predstavlja se da je ulazni izraz korektno zadat. Operadni su realni brojevi, a dozvoljene operacije su: + (za sabiranje dva broja), - za (oduzimanje dva broja), * (za mnoenje dva broja) i / (za deljenje dva broja). Parcijalni rezultati se ispisuju tokom itavog postupka izraunavanja a konaan rezultat se ispisuje na kraju rada. MODULE zad24; FROM InOut IMPORT WriteLn,WriteString,Read,Write; FROM RealInOut IMPORT WriteReal,ReadReal; VAR broj,rezultat:REAL; op:CHAR; ok:BOOLEAN; BEGIN WriteLn; WriteLn; ok:=TRUE; op:='+'; rezultat:=0.0; WriteString('KALKULATOR'); WriteLn; WHILE ok AND ((op='+') OR (op='-') OR (op='*') OR (op='/')) DO (* WriteString('Unesite broj: ');*) ReadReal(broj); CASE op OF '+':rezultat:=rezultat+broj| '-':rezultat:=rezultat-broj| '*':rezultat:=rezultat*broj| ELSE IF broj=0.0 THEN ok:=FALSE; ELSE

25. Napisati program koji za svaki prirodan broj iz nekog zadatog intervala utvrdjuje da li je on prost ili ne. Broj je prost ako nema delitelje razliite od 1 i samog sebe.
MODULE zad25; FROM InOut IMPORT WriteString,WriteLn,ReadCard,WriteCard; VAR delitelj, broj, maxBroj:CARDINAL; dobar:BOOLEAN; BEGIN WriteLn; WriteString('Dokle zelite proste brojeve:'); ReadCard(maxBroj); WriteLn; WriteString('Prosti brojevi su:'); WriteCard(2, 8); FOR broj:=3 TO maxBroj BY 2 DO (* samo neparni brojevi*) delitelj:=3; (* prvi neparan broj veci od jedan se uzima kao prvi potencijalni delitelj *) dobar:= TRUE; WHILE dobar AND (delitelj*delitelj <=broj) DO IF broj MOD delitelj = 0 THEN dobar:= FALSE (* broj nije prost*) END; INC(delitelj,1) (* sledeci neparan broj, potencijalan delitelj*) END; IF dobar THEN WriteCard(broj,8) END END END zad25.

rezultat:=rezultat/broj END END; IF ok THEN (* WriteString('Tekuci rezultat je: ');*) WriteReal(rezultat,10); WriteLn; (* WriteString('Unesite narednu operaciju ___ ');*) Read(op); Write(op); ELSE WriteString('Deljenje nulom nije moguce.'); END END; IF ok THEN WriteString('Konacan rezultat je: '); WriteReal(rezultat,10); END END zad24.

26. Napisti program koji za zadati prirodan broj izraunava njegov faktorijel. Za zadati broj n vai: n!=n*(n-1)! = n*(n-1)*(n-2)*....*2*1 Reenje iz zbirke... Treba pomnoiti brojeve 1,2,....n. Za te je najpogodnije koristiti FOR petlju. Ved i za manje vrednosti n dolazi do prekoraenja opsega pri mnoenju opsega pri mnoenju uzastopnih brojeva, stoga se u programu mora voditi rauna o ovoj mogudnosti i prijaviti odgovarajuda greka. Program se prekida ako doe do prekoraenja opsega ili ako broj nije dobro uitan.

27. Napisati program koji prevodi dati binarni broj u odgovarajudi dekadni. MODULE zad27; FROM InOut IMPORT Read,Write,WriteCard,WriteString,WriteLn,EOL; VAR cifra:CHAR; decBr:CARDINAL; BEGIN WriteLn; WriteLn; decBr:=0; WriteString('Unesite binarni broj:'); REPEAT Read(cifra); IF (cifra = '0') OR (cifra = '1') THEN Write(cifra); decBr:=2*decBr+ORD(cifra)-ORD('0') END UNTIL cifra = EOL; WriteLn; WriteCard(decBr,0) END zad27.

FROM InOut IMPORT Done,ReadCard,WriteCard,WriteString,WriteLn; VAR n,k,fakt:CARDINAL; BEGIN LOOP WriteString('Za koji broj zelite faktorijel:'); ReadCard(n); IF NOT Done THEN (* Broj nije ispravno unet *) (* Na ovaj nacin zaustavljamo program*) EXIT END; WriteLn; fakt:=1; (*pocetna vrednost za mnozenje*) FOR k:=2 TO n DO IF fakt > MAX(CARDINAL) DIV k THEN (* pri mnozenju sa narednim brojem*) (* doslo bi do prekoracenja opsega*) WriteString('Prekoracenje opsega'); EXIT END; fakt:=fakt*k END; WriteCard(n,0); WriteString('!= '); WriteCard(fakt,0); WriteLn END END zad26 .

28. Napisati program koji uitava prirodan broj i ispisuje njegove cifre u obrnutom redosledu. MODULE zad28; FROM InOut IMPORT ReadCard,WriteCard,WriteLn,WriteString; VAR broj,cifra:CARDINAL; BEGIN WriteLn; WriteLn; WriteString('Unesite prirodan broj:'); ReadCard(broj); WriteLn; WriteString('Obrnut broj je:'); REPEAT cifra:=broj MOD 10; (* izdvajanje krajnje desne cifre*) WriteCard(cifra,1); broj:= broj DIV 10; (* odbacivanje krajnje desne cifre*) UNTIL broj=0 END zad28.

29.Napisati program koji sa ulaza uitava niz znakova i ispisuje ih na izlaz tako to sva velika slova pretvara u mala, a ostle znakove ispunjuje neizmenjeno. Niz ulaznih znakova se zavrava taka.
Reenja: U reenja koristimo injenicu da u tipu CHAR slova abacede grupisana zajedno i ureene rastude, a rastojanje izmeu malog i velikog slova je jednako za svako slovo. Odnosno rastojanje slova A i a isto je kao i za sva ostala slova. MODULE zad29; FROM InOut IMPORT Read,Write,WriteLn,WriteString; VAR zn,tmp:CHAR; BEGIN WriteString('Unos znakova zavrsite tackom:'); WriteLn; WriteLn; WriteString('Unesite znak:'); Read(zn);Read(tmp); WHILE zn # '.' DO WriteString(' --- '); IF ('A' <=zn) AND ( zn <='Z') THEN Write(CHR(ORD(zn)+ORD('a')-ORD('A'))); ELSE Write(zn); (* ako znak nije slovo stampa se nepromenljivo*) END; WriteLn; WriteString('Unesite znak:'); Read(zn); Read(tmp); END END zad29.

Zadaci sa praktinih vebi


Praktine vebe 1

1.Napisati program koji izraunava srednju vrednost dva uneta cela broja.
MODULE zad1; FROM InOut IMPORT WriteString,WriteLn,ReadInt,WriteInt; VAR broj1,broj2,sred:INTEGER; BEGIN WriteString('Unesite broj1:'); ReadInt(broj1); WriteLn; WriteString('Unesite broj1:'); ReadInt(broj2); WriteLn; sred:=(broj1+broj2)/2; WriteString('Srednja vrednost je:'); WriteInt(sred,5); END zad1.

3. Napisati program koji od trocifrene unete sume novca odredjuje broj apoena u stotinama,pedeseticama,deseticama,peticama i jedinicama. Recimo za unetih 578 program de ispisati: Stotina ima: 5 Pedesetica ima: 1 Desetica ima: 2 Petica ima:1 Jedinica ima: 3
MODULE zad3; FROM InOut IMPORT WriteLn,WriteString,WriteInt,ReadInt; VAR svota,stotina,pedesetica,desetica,petica,jedinica:INTEGER; BEGIN WriteLn; WriteString('Unesite svotu novca:'); ReadInt(svota); stotina:= svota DIV 100; WriteString('Stotina ima:'); WriteInt(stotina,5); WriteLn; pedesetica:= (svota MOD 100) DIV 50; WriteString('Pedesetica ima:'); WriteInt(pedesetica,5); WriteLn; desetica:= ((svota MOD 100) MOD 50) DIV 10; WriteString('Desetica ima:'); WriteInt(desetica,5); WriteLn; petica:= (svota MOD 10) DIV 5; WriteString('Petica ima:'); WriteInt(petica,5); WriteLn; jedinica:=(((svota MOD 10) MOD 5) MOD 10) ; WriteString('Jedinica ima:'); WriteInt(jedinica,5); WriteLn; END zad3.

2. Napisati program koji sa ulaza uitava znak i odreuje da li je uitani znak slovo cifra ili neki drugi znak i na osnovu toga ispisuje odgovarajudu poruku.
MODULE zad2; FROM InOut IMPORT Read,Write,WriteLn,WriteString; VAR zn:CHAR; BEGIN WriteString('Unesite znak:'); Read(zn); Write(zn); WriteLn; WriteString('Uneti znak je: '); IF ((zn >='a') AND (zn<='z')) OR ((zn >='A') AND (zn<='Z')) THEN WriteString('slovo') ELSIF (zn >= '0') AND (zn <= '9') THEN WriteString('cifra') ELSE (* ostali znaci su specijalni znaci*) WriteString('specijalan znak') END END zad2.

Praktine vebe 2

1.Napisati program za izraunavanje svih delitelja datog prirodnog broja n.


MODULE zad1; FROM InOut IMPORT ReadCard,WriteCard,WriteString,WriteLn; VAR n,i:CARDINAL; BEGIN (*unos*) WriteString('Unesite prirodan broj n:'); ReadCard(n); WriteLn; (* izracunavanje rezultata i ispis*) WriteString('Delitelji broja:'); WriteCard(n,0); WriteString(' su:'); WriteLn; FOR i:=1 TO n DO IF n MOD i=0 THEN WriteCard(i,0); WriteString(' '); END END END zad1.

3. Napisati program koji utvruje koliko prirodni broj ima prostih delilaca.
MODULE zad3; FROM InOut IMPORT WriteString,WriteLn,ReadInt,WriteInt; VAR n,i,b:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); i:=2; b:=0; WHILE n <> 1 DO IF n MOD i = 0 THEN b:=b+1; END; WHILE n MOD i=0 DO n:=n DIV i; END; i:=i+1; END; WriteInt(b,9); END zad3.

2. Napisati program koji odredjuje da li je uneti broj prost ili nije. Broj je prost ako je delji samo sa samim sobom i jedan.
MODULE zad2; FROM InOut IMPORT WriteInt,ReadInt,WriteString,WriteLn; VAR n,i,b:INTEGER; BEGIN WriteLn; WriteString('Unesite prirodan broj:'); ReadInt(n); b:=0; FOR i:=1 TO n DO IF n MOD i = 0 THEN b:=b+1; END; END; IF b <= 2 THEN WriteString('Broj je prost'); ELSE WriteString('Broj je slozen'); END END zad2.

Praktine vebe 3

1.Napisati program koji ispisuje zbir cifara uitanog prirodnog broja.


MODULE zad3; FROM InOut IMPORT WriteString,WriteLn,WriteCard,ReadCard; VAR broj,n,zbir:CARDINAL; BEGIN WriteString('Uneiste broj:'); ReadCard(broj); zbir:=0; REPEAT n:=broj MOD 10; zbir:=zbir+n; broj:=broj DIV 10; UNTIL broj=0; WriteCard(zbir,5); WriteLn; END zad3.

3. Program koji uitava broj u sistemu sa osnovom m (2m40) i tampa ga u dekadnom sistemu. MODULE IzMUDek; FROM InOut IMPORT WriteString,WriteLn,WriteCard,ReadCard; VAR m,br,br1,m1,ostatak,dekBr,broj: CARDINAL; BEGIN REPEAT WriteString ('Unesite broj za osnovu brojevnog sistema (2<=m<=10): '); ReadCard (m); WriteLn; UNTIL (m >= 2) AND (m <= 10); WriteString ('Unesite broj koji zelite tranformisati: '); ReadCard(br); WriteLn; br1:=br; m1:=m; ostatak:= br MOD 10; dekBr:=ostatak; br:=br DIV 10; ostatak:= br MOD 10; dekBr:=dekBr + ostatak*m; br:=br DIV 10; WHILE br <> 0 DO m:=m*m1; ostatak:= br MOD 10; dekBr:=dekBr + ostatak*m; br:=br DIV 10; END; WriteString ('Vas broj '); WriteCard(br1,0); WriteString (' sa osnovom '); WriteCard (m1,0); WriteString (' u sistemu sa osnovom 10 je: '); WriteCard (dekBr,0); WriteLn; END IzMUDek.

2. Napisati program koji odreuje najvedi prirodan broj takav da je


=1

= 1 + 2 + 3 + +

manja od uitanog prirodnog

broja a. MODULE zad2; FROM InOut IMPORT WriteCard,ReadCard,WriteString,WriteLn; VAR a,suma,n:CARDINAL; BEGIN WriteString('Unesite broj a:'); ReadCard(a); suma:=0; n:=0; WHILE a>suma DO suma:=suma+(suma+1); n:=n+1; END; WriteCard(n-1,5); WriteLn; END zad2.

1.Napisati program koji za dva razliite promenljive A i B ispisuje da li je veda od njih deljiva sa manjom bez ostatka. MODULE zad1; FROM InOut IMPORT WriteString,WriteLn,ReadInt; VAR broj1,broj2:INTEGER; BEGIN WriteLn; WriteString('Unesite broj 1:'); ReadInt(broj1); WriteString('Unesite broj 2:'); ReadInt(broj2); IF broj1>broj2 THEN IF broj1 MOD broj2 = 0 THEN WriteString('Broj 1 je deljiv brojem 2'); ELSE WriteString('Broj 1 nije deljiv brojem 2'); END ELSE IF broj2>broj1 THEN IF broj2 MOD broj1 = 0 THEN WriteString('Broj 2 je deljiv brojem 1'); ELSE WriteString('Broj 2 nije deljiv brojem 1'); END ELSE IF broj1 = broj2 THEN WriteString('Brojevi su jednaki'); END END END END zad1. 2. Za vrednosti od 1 do n unetog broja napisati program za uitavanje, sumiranje i tampanje njihove sume. MODULE zad2; FROM InOut IMPORT WriteString,WriteInt,ReadInt,WriteLn,Write; FROM RealInOut IMPORT WriteReal,ReadReal;

3. Napisati program koji rauna zbir brojeva koji od 1 do 100 koji su deljiva sa 7 i sa 3. MODULE zad3; FROM InOut IMPORT WriteString,WriteInt,WriteLn; VAR s,i:INTEGER; BEGIN WriteLn; WriteLn; s:=0; FOR i:=1 TO 100 DO IF (( i MOD 7 =0) AND (i MOD 3=0)) THEN s:=s+i; END; END; WriteString('Zbir brojeva je:'); WriteInt(s,5) END zad3. 4. Napisati program koji se za dato n izraunava faktorijel prirodnog broja n. Faktorijel je n!=1*2*3...*n MODULE zad4; FROM InOut IMPORT WriteString,WriteInt,ReadInt,WriteLn; VAR fakt,i,n:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite prirodan broj:'); ReadInt(n); fakt:=1; FOR i:=1 TO n DO fakt:=fakt*i; END; WriteString('Faktorijel broja '); WriteInt(i,1); WriteString(' je: '); WriteInt(fakt,3); WriteLn; END zad4.

VAR a,suma:REAL; i,n:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite n:'); ReadInt(n); suma:=0.0; FOR i:=1 TO n DO WriteString('Unesite broj'); WriteInt(i,2); WriteString(': ' ); ReadReal(a); suma:=suma+a; END; WriteLn; WriteString('Suma je: '); WriteReal(suma,10); WriteLn; END zad2.

5.Napisati program kojim se izraunava suma faktorijela. MODULE zad5; FROM InOut IMPORT WriteString,WriteInt,ReadInt,WriteLn; VAR fakt,i,n,suma:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite prirodan broj:'); ReadInt(n); fakt:=1; suma:=0; FOR i:=1 TO n DO fakt:=fakt*i; suma:=suma+fakt; END; WriteString('Suma faktorijela '); WriteInt(i,1); WriteString(' je: '); WriteInt(suma,3); WriteLn; END zad5. 6. Napisati program kojim se N uitava ocena uenika i izraunava njegova prosena ocena. MODULE zad6; FROM InOut IMPORT WriteString,ReadInt,WriteInt,WriteLn; FROM RealInOut IMPORT WriteReal; VAR n,i,x,s:INTEGER; prosek:REAL; BEGIN WriteLn; WriteLn; WriteString('Unesite broj predmeta:'); ReadInt(n); s:=0; FOR i:=1 TO n DO WriteString('Unesite ucenu iz predmeta '); WriteInt(i,1); WriteString(':'); ReadInt(x); s:=s+x; END; WriteString('Prosecna ocena je:'); prosek:=(FLOAT(s)/FLOAT(n)); WriteReal(prosek ,5); END zad6.

7.Napisati program kojim se izraunava zbir prvih n lanova red: + + + +

MODULE zad7; FROM InOut IMPORT WriteString,WriteLn,ReadInt; FROM RealInOut IMPORT WriteReal; VAR n,i:INTEGER; suma:REAL; BEGIN WriteLn; WriteLn; WriteString('Unesite broj clanova:'); ReadInt(n); suma:=0.0; FOR i:=1 TO n DO suma:=suma+1.0/FLOAT(i); END; WriteString('s='); WriteReal(suma,4); END zad7. 8. Napisati program koji izraunava zbir prvi n lanova reda. + + + +

MODULE zad8; FROM InOut IMPORT WriteString,WriteLn,ReadInt; FROM RealInOut IMPORT WriteReal; VAR n,i:INTEGER; suma:REAL; BEGIN WriteLn; WriteLn; WriteString('Unesite broj clanova:'); ReadInt(n); suma:=0.0; FOR i:=1 TO n DO suma:=suma+1.0/(FLOAT(2*i)-1.0); END; WriteString('s='); WriteReal(suma,4); END zad8.

9.Napisati program kojim se izraunava zbir prvih n lanova reda... = + .

11.Napisati program koji izraunava zbir lanova aritmetike progresije koji nisu vedi od N, ako je prvi lan jedan,a razlikuju se za 3. MODULE zad11; FROM InOut IMPORT WriteString,WriteInt,ReadInt,WriteLn; VAR s,n,i:INTEGER; BEGIN

MODULE zad9; FROM InOut IMPORT WriteString,ReadInt,WriteLn; FROM RealInOut IMPORT WriteReal; VAR n,i,z:INTEGER; suma:REAL; BEGIN WriteLn; WriteLn; WriteString('Unesite n:'); ReadInt(n); suma:=0.0; z:=1; FOR i:=1 TO n DO suma:=suma+FLOAT(z)/(FLOAT(2*i)-1.0); z:=-z; END; WriteString('Suma je:'); WriteReal(suma,4); END zad9. 10.Napisati program kojim se odreuje zbir prvih N lanova aritmetike progresije na osnovu vrednosti prvog lana A i razlike progresije D. MODULE zad10; FROM InOut IMPORT WriteString,WriteInt,ReadInt,WriteLn; VAR n,a,d,i,s:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite prvi clan aritmeticke progresije:'); ReadInt(a); WriteString('Unesite razliku progresije:'); ReadInt(d); WriteString('Unesite broj clanova sume:'); ReadInt(n); s:=0; FOR i:=1 TO n DO s:=s+a; a:=a+d; END; WriteString('Zbir prvih '); WriteInt(n,1); WriteString(' aritmeticke progresije je:'); WriteInt(s,1); WriteLn; END zad10.

WriteLn; WriteLn; WriteString('Unesite n:'); ReadInt(n); s:=0; i:=1; WHILE i<=n DO i:=i+3; s:=s+i; END; WriteString('Suma je:'); WriteInt(s,3); END zad11.

12. Napisati program koji za dati n ispituje da li je stepen broja 3. MODULE zad12; FROM InOut IMPORT WriteString,ReadInt,WriteLn; VAR n:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite n:'); ReadInt(n); WHILE n MOD 3 = 0 DO n:=n DIV 3; END; IF n=1 THEN WriteString('Broj je stepena tri') ELSE WriteString('Broj nije stepena tri'); WriteLn; END END zad12.

13. Odrediti zbir neparnih prirodnih brojeva na intervalu od 1 do n MODULE zad13; FROM InOut IMPORT WriteString,ReadInt,WriteInt,WriteLn; VAR n,i,s:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite n:'); ReadInt(n); i:=1; s:=0; WHILE i<=n DO s:=s+i; i:=i+2; END; WriteString('s='); WriteInt(s,4); WriteLn; END zad13.

15.Napisati program za izraunavanje n-tog stepena celog broja a. MODULE zad15; FROM InOut IMPORT WriteString,WriteLn,WriteInt,ReadInt; VAR a,n,i,stepen:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite izlozilac:'); ReadInt(a); WriteString('Unesite eksponent:'); ReadInt(n); stepen:=1; i:=1; (* promenljiva koja odbrojava ponavljanje ciklusa*); WHILE i<=n DO stepen:=stepen*a; i:=i+1; END; WriteString('Stepen je:'); WriteInt(stepen,5); END zad15. 16.Napisati program koji se od datog prirodnog broja n formira broj sa istim ciframa, ali u inverznom poretku. MODULE zad16; FROM InOut IMPORT WriteString,WriteLn,ReadInt,WriteInt; VAR

14. Napisati program kojim se odreuje najvedi zajedniki delilac prirodnih brojeva m i n. MODULE zad14; FROM InOut IMPORT WriteString,WriteInt,ReadInt,WriteLn; VAR m,n,r:INTEGER; BEGIN WriteLn; WriteString('Unesite m:'); ReadInt(m); WriteString('Unesite n:'); ReadInt(n); WHILE m MOD n <> 0 DO r:=m MOD n; m:=n; n:=r; END; WriteString('Najveci zajednicki delilac je:'); WriteInt(n,5); WriteLn; END zad14.

n,inverz:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); inverz:=0; (* pocetna vrednost promenljive u formiranju*) REPEAT inverz:=inverz*10+n MOD 10; (* dopisivanje cifre*) n:= n DIV 10; (* odbacivanje dopisane cifre*) UNTIL n=0; (* dok se ulazni broj ne transformise do nule*) WriteString('Inverzan broj je:'); WriteInt(inverz,5); END zad16.

17. Napisati program kojim se tampaju svi trocifreni Armstrongovi brojevi. Broj je Armstrongov, ako je jednak zbiru kubova svojih cifara. MODULE zad17; FROM InOut IMPORT WriteInt,WriteLn; VAR a,b,c,m:INTEGER; BEGIN WriteLn; WriteLn; FOR m:=100 TO 999 DO a:=m DIV 100; (* izdvajanje leve cifre *) b:=m MOD 100 DIV 10; (* izdvajanje srednje cifre*) c:=m MOD 10; (* izdvajanje desne cifre*) IF m=a*a*a+b*b*b+c*c*c THEN WriteInt(m,4); END END END zad17. 18. Za broj 135 je ispunjeno 135=1+3*3+5*5*5. Ispitati sve trocifrene brojeve koji imaju ovo svojstvo tj. abc=a+b*b+c*c*c MODULE zad18; FROM InOut IMPORT WriteInt,WriteLn;

19.

VAR i,a,b,c:INTEGER; BEGIN WriteLn; WriteLn; FOR i:=100 TO 999 DO c:=i MOD 10; b:=(i DIV 10) MOD 10; a:=i DIV 100; IF i=a+b*b+c*c*c THEN WriteInt(i,4); END; END END zad18.

Reeni zadaci - Uvod u programiranje II Kolokvijum (nizovi, matrice )

Primeri iz knjige
1.Napisati program koji odreuje namanji element u nizu brojeva. MODULE zad6; FROM InOut IMPORT ReadInt, WriteInt, WriteString, WriteLn; CONST maxBrojeva = 100; TYPE DijapazonVel = INTEGER[1..maxBrojeva]; VAR i, brojeva: DijapazonVel; min, tmp: INTEGER; nizBr: ARRAY DijapazonVel OF INTEGER; BEGIN WriteString('Unesite broj ulaznih brojeva:'); ReadInt(tmp); brojeva := tmp; WriteString('Unesite ulazne brojeve:'); FOR i:=1 TO brojeva DO ReadInt(nizBr[i]); WriteLn; END; min:=nizBr[1]; (* nizBr[1] daje vrednost pocetnog elementa niza*) FOR i:=2 TO brojeva DO IF nizBr[i] <min THEN (*novi minimum*) min:=nizBr[i] (*novi minimum*) END END; (*FOR*) WriteString('Minimalna vrednost u nizu je:'); WriteInt(min,6); END zad6.

2. Napisati program koji uitava niz i neki broj a zatim odreuje da li se uneti broj nalazu u nizu? Broj elemenata u nizu je deklarisan i iznosi 5. MODULE Sadrzan; FROM InOut IMPORT ReadCard, WriteCard, WriteString, WriteLn, Done; CONST duzina = 5; VAR brojevi: ARRAY[1..duzina] OF CARDINAL; i, broj:CARDINAL; BEGIN WriteString('Unesite elemente niza:'); WriteLn; FOR i:=1 TO duzina DO ReadCard(brojevi[i]); WriteLn; END; WriteString('Unesite broj:'); ReadCard(broj); WHILE Done DO i:=1; WHILE (i<= duzina) AND (brojevi[i] <> broj) DO INC(i); END; IF (i<= duzina) THEN WriteString('Broj je sadrzan u nizu') ELSE WriteString('Broj nije sadrzan u nizu') END; ReadCard(broj); END END Sadrzan.

3. Napisati program koji uitava niz i neki broj a zatim odreuje da li se uneti broj nalazu u nizu? Broj elemenata u nizu je deklarisan i iznosi 5. Drugo reenje prethodnog zadatka.

MODULE zad2; FROM InOut IMPORT WriteString,ReadCard,WriteLn; CONST Duzina=5; VAR brojevi:ARRAY[1..Duzina] OF CARDINAL; i,j,broj,s:CARDINAL; BEGIN WriteLn; WriteString('Unesite elemente niza:'); WriteLn; FOR i:=1 TO Duzina DO ReadCard(brojevi[i]); WriteLn; END; WriteString('Unesite broj:'); ReadCard(broj); s:=0; FOR i:=1 TO Duzina DO IF broj = brojevi[i] THEN INC(s); END; END; IF s>0 THEN WriteString('Broj je sadrzan u nizu') ELSE WriteString('Broj nije sadrzan u nizu') END; END zad2.

4. Napisati program koji izraunava zbir dve matrice. MODULE SabiranjeMat; FROM InOut IMPORT ReadInt,WriteInt,WriteString,WriteLn; CONST dim =50; TYPE Matrica = ARRAY[1..dim],[1..dim] OF INTEGER; VAR i,j:INTEGER; d:INTEGER; mat1,mat2,mat3:Matrica; BEGIN WriteLn; WriteString('Unesite dimenziju matrica:'); ReadInt(d); WriteLn; WriteString('Unesite prvu matricu po vrstama:'); WriteLn; (* Unos prve matrice*) FOR i:=1 TO d DO FOR j:=1 TO d DO ReadInt(mat1[i,j]) END; WriteLn END; (* unos 2. matrice*) FOR i:=1 TO d DO FOR j:=1 TO d DO ReadInt(mat2[i,j]) END; WriteLn; END; (* racunanje zbira*) FOR i:=1 TO d DO FOR j:=1 TO d DO mat3[i,j]:=mat1[i,j]+mat2[i,j] END; END; (* ispis matrice*) FOR i:=1 TO d DO FOR j:=1 TO d DO WriteInt(mat3[i,j],5) END; WriteLn END; END SabiranjeMat.

5. Napisati program za mnoenje matrica.... MODULE MnozMat; FROM InOut IMPORT ReadInt, WriteInt, WriteString, WriteLn; CONST dim1 = 5; dim2 = 4; dim3 = 3; TYPE matrica1 = ARRAY[1..dim1], [1..dim2] OF INTEGER; matrica2 = ARRAY[1..dim2], [1..dim3] OF INTEGER; matrica3 = ARRAY[1..dim1], [1..dim3] OF INTEGER; VAR i: [1..dim1]; j: [1..dim3]; k: [1..dim2]; A: matrica1; B: matrica2; C: matrica3; (* razultujuca matrica*) BEGIN (* unos elemenata prve matrice po vrstama*) WriteLn; WriteString('Unesite matricu A'); WriteLn; FOR i:=1 TO dim1 DO FOR k:=1 TO dim2 DO WriteString(' '); ReadInt(A[i,k]) END; WriteLn; END; WriteLn; (* unos elemenata druge matrice po vrstama*) WriteString('Unesite matricu B:'); WriteLn; FOR k:=1 TO dim2 DO FOR j:=1 TO dim3 DO WriteString(' '); ReadInt(B[k,j]) END; WriteLn END;

(* racunanje proizvoda*) FOR i:=1 TO dim1 DO (* fiksira se vrsta prve matrice*) FOR j:=1 TO dim3 DO (* fiksira se kolona druge matrice*) C[i,j]:=0; FOR k:=1 TO dim2 DO (* mnoze se odgovarajuci elementi fiksirane vrste i kolone i akumulira se vrednost rezultujuceg elementa*) C[i,j]:=C[i,j]+A[i,k]*B[k,j] END END END; (* ispis proizvoda*) WriteLn; WriteString('Rezulutujca matrica je:'); FOR i:=1 TO dim1 DO WriteLn; FOR j:=1 TO dim3 DO WriteInt(C[i,j],5) END END END MnozMat.

Zadaci sa praktinih vebi Praktine vebe 4


1.Napisati program koji uitava prirodan broj n (n<100) , n celih brojeva, te smeta te brojeve u niz i izraunava prosek (aritmetiku sredinu) elemente niza. MODULE zad1; FROM InOut IMPORT ReadCard, WriteLn,WriteInt, WriteString; FROM RealInOut IMPORT WriteReal; TYPE niz=ARRAY [1..100] OF CARDINAL; VAR a:niz; suma,i,n:CARDINAL; prosek:REAL; BEGIN WriteString ('Unesite duzinu niza: '); ReadCard (n); FOR i:=1 TO n DO WriteString ('Unesite broj '); WriteInt(i,1); WriteString(':'); ReadCard (a[i]); END; suma:=0; FOR i:=1 TO n DO suma:=suma+a[i]; END; prosek:=FLOAT(suma)/FLOAT(n); WriteLn; WriteString('Prosek elemenata niza je: '); WriteReal(prosek, 8); WriteLn; END zad1. 2. Napisati program koji dva uitana stringa poredi leksikografski.
MODULE zad2; FROM InOut IMPORT WriteString, ReadString,WriteLn; FROM Str IMPORT Length; TYPE niz=ARRAY[1..100] OF CHAR; VAR str1,str2:niz; br1,br2,br3,i:CARDINAL; BEGIN WriteLn; WriteString('Unesite prvi string:'); WriteLn; ReadString(str1); WriteString('Unesite drugi string:'); WriteLn; ReadString(str2); br1:=0; br2:=0; br3:=0; FOR i:=1 TO Length(str1) DO IF CAP(str1[i]) = CAP (str2[i]) THEN br1:=br1+1; ELSIF (str1[i])<(str2[i]) THEN br2:=br2+1; ELSE br3:=br3+1; END; END; IF br1 = Length(str1) THEN WriteString('Stringovi su jednaki:') ELSIF br2<>0 THEN WriteString('Prvi string je prvi po redu'); ELSE WriteString('Prvi string je drugi po redu'); END; END zad2.

Praktine vebe 5
1. Napisati program koji dva stringa i proverava da li su jednaki. Mala i velika slova ne razlikuje. MODULE zad1; FROM InOut IMPORT WriteString, WriteLn, ReadString; FROM Str IMPORT Length; TYPE str = ARRAY [1..100] OF CHAR; VAR a,b : str; pom,i : CARDINAL; slovoa,slovob : CHAR; BEGIN WriteString ('Unesite string A:'); WriteLn; ReadString (a); WriteLn; WriteString ('Unesite string B:'); WriteLn; ReadString (b); WriteLn; pom:=0; IF Length(a) = Length(b) THEN FOR i:=1 TO Length (a) DO slovoa:= a[i]; slovob:= b[i]; IF CAP(a[i]) = CAP(b[i]) THEN pom := pom+1 END; END; IF Length (a)=pom THEN WriteString ('Stringovi su jednaki.') ELSE WriteString ('Stringovi nisu jednaki.') END; ELSE WriteString ('Stringovi nisu jednaki.'); END; END zad1.

3. Napisati program koji uitava prirodan broj n (dimenziju) i matricu A celih brojeva nxn i ispisuje najvedi element matrice.
MODULE zad3; FROM InOut IMPORT WriteString,WriteLn,ReadInt,WriteInt; VAR a:ARRAY[1..20],[1..20] OF INTEGER; i,j,n,max:INTEGER; BEGIN WriteLn; WriteString('Unesite dimenziju matrice:'); ReadInt(n); WriteLn; WriteString('Unos clanova matrice:'); WriteLn; FOR i:=1 TO n DO FOR j:=1 TO n DO ReadInt(a[i,j]); END; END; max:=a[1,1]; FOR i:=1 TO n DO FOR j:=1 TO n DO IF a[i,j]>max THEN max:=a[i,j]; END; END; END; WriteString('Najveci clan matrice je:'); WriteInt(max,5); WriteLn; END zad3.

Vebe 6

Praktine vebe 6

1a. Napisati program koji uitava matricu celih brojeva formata nxn i proverava da li je simetrina po glavnoj dijagonali.
MODULE zad1a; FROM InOut IMPORT WriteString, ReadCard, WriteCard, WriteLn; TYPE matrica = ARRAY [1..15], [1..15] OF CARDINAL; VAR mat: matrica; i, j, x : CARDINAL; pom : BOOLEAN; BEGIN pom:= TRUE; WriteLn; WriteString ('Unesite prvu dimenziju matrice: '); ReadCard (x); FOR i:=1 TO x DO FOR j:=1 TO x DO WriteString ('Unesite clan na poziciji: '); WriteCard (i,0); WriteString (','); WriteCard (j,0);WriteLn; ReadCard (mat[i,j]);WriteLn; END; END; FOR i:=2 TO x DO FOR j:=2 TO x DO IF mat[i,j] <> mat[j,i] THEN pom:= FALSE END; END; END; IF pom THEN WriteString ('Matrica je simetricna po glavnoj dijagonali'); ELSE WriteString ('Matrica nije simetricna po glavnoj dijagonali'); END; END zad1a.

2. Napisati program koji uitava nizove A i B prirodnih brojeva sa n elemenata i ispisuje sve prirodne brojeve (a,b) gde je element niza B deli element niza A bez ostatka.
MODULE zad2; FROM InOut IMPORT Done, ReadCard, WriteCard, WriteLn, WriteString; TYPE niz = ARRAY[1..50] OF CARDINAL; VAR i,duz:CARDINAL; nizA,nizB :niz; izlaz,izlazz:CHAR; pom:BOOLEAN; BEGIN WriteLn; WriteString('Unesite duzinu nizove:'); ReadCard(duz); FOR i:=1 TO duz DO REPEAT (* unos prvo niza s proverom*) WriteLn; WriteString('Unesite:'); WriteCard(i,1); WriteString('.element prvog niza:'); ReadCard(nizA[i]); UNTIL Done; END; FOR i:=1 TO duz DO REPEAT (* unos drugog niza s proverom*); WriteLn; WriteString('Unesite '); WriteCard(i,1); WriteString('.element drugog niza:'); ReadCard(nizB[i]); UNTIL Done; END; pom:=FALSE; WriteString('Parovi elemenata su:'); WriteLn; FOR i:=1 TO duz DO IF nizA[i] MOD nizB[i] =0 THEN WriteCard(nizA[i],4); WriteCard(nizB[i],4); WriteLn; END; END; END zad2.

Reeni zadaci iz zbirke zadataka


33. Data su dva niza iji su elementi prirodni brojevi. Napisati program koji ispisuje sve brojeve koji se nalaze u oba niza. MODULE zad16; FROM InOut IMPORT WriteString,WriteLn,WriteCard,ReadCard; TYPE Niz = ARRAY [1..500] OF CARDINAL; VAR PrviNiz,DrugiNiz: Niz; DimPrvog, DimDrugog, i, j: CARDINAL; nadjen: BOOLEAN; BEGIN (* unos prvog niza*) WriteString('Unesite dimenziju prvog niza:'); ReadCard(DimPrvog); FOR i:=1 TO DimPrvog DO WriteLn; WriteString('Unesite '); WriteCard(i,3); WriteString('. element niza:'); ReadCard(PrviNiz[i]) END; (* unos drugog niza*) WriteLn; WriteString('Unesite dimenziju drugog niza:'); ReadCard(DimDrugog); FOR i:=1 TO DimDrugog DO WriteLn; WriteString('Unesite '); WriteCard(i,3); WriteString('. element drugog niza:'); ReadCard(DrugiNiz[i]) END; (* trazenje *) WriteLn; WriteString('Sledeci elementi se nalaze u oba niza:'); WriteLn; FOR i:=1 TO DimPrvog DO (* sa i fiksiramo elemente prvog niza *) j:=1; nadjen:=FALSE; WHILE (j<= DimDrugog) AND NOT nadjen DO (* sa j idemo po indeksima drugog niza*) IF DrugiNiz[j]= PrviNiz[i] THEN nadjen:= TRUE; WriteCard(PrviNiz[i],6) ELSE INC(j) END END END END zad16.

47. Napisati program koji prevodi iz dekadnog brojnog sistema u brojni sistem sa zadatom osnovom m. MODULE zad47; FROM InOut IMPORT WriteString,WriteLn,WriteCard,ReadCard; VAR duz,broj,m,i:CARDINAL; cifre:ARRAY[1..100] OF CARDINAL; BEGIN WriteString('Unesite broj i osnovu m:'); WriteLn; ReadCard(broj); WriteLn; ReadCard(m); WriteLn; WriteString('Broj '); WriteCard(broj, 1); WriteString(' u brojnom sistemu sa osnovom '); WriteCard(m,1); WriteString(' je:'); duz:=0; REPEAT (* primena standardnog postupka za odvajanje poslednje cifre*) INC(duz); cifre[duz]:=broj MOD m; broj:=broj DIV m UNTIL broj=0; (* cifre se u nizu nalaze u obrnutom poretku*) FOR i:=duz TO 1 BY -1 DO WriteCard(cifre[i],4) END END zad47.

30. Crvenkapa je krenula kod bake i ubrala joj n1 ljubiica, n2 belih rada, n3 visibaba, n4 zumbula, n5 karanfila, n6 rua i n7 bosiljaka. Koliko cvetova de dobiti baka? MODULE zad17; FROM InOut IMPORT WriteString, WriteLn, ReadCard, WriteCard; TYPE Cvece = (ljubicica, belaRada, visibaba, zumbul, karanfil, ruza, bosiljak); VAR cv:Cvece; br:CARDINAL; cvet: ARRAY Cvece OF CARDINAL; BEGIN WriteString('Unesite broj cvetova za redom ljubicicu, belu radu, visibabu, '); WriteLn; WriteString('zumbul, karanfil, ruzu i bosiljak:'); WriteLn; FOR cv:= ljubicica TO bosiljak DO ReadCard(cvet[cv]); (* za svaki cvet u odgovarajuci element niza se stavlja*) (* ukupan broj primeraka koji je Crvenkapa ubrala *) WriteLn END; br:=0; FOR cv:= bosiljak TO ljubicica BY -1 DO br:=br+cvet[cv] (* sumiranje brojeva*) END; WriteString('Crvenkapa je ubrala '); WriteCard(br,1); WriteString(' cvetova') END zad17.

32. Napisati program za mnoenje dve celobrojne matrice tj. matrice ije su vrednosti celi brojevi. Rezultujudu matricu ispitati po vrstama. Reenje: Proizvod matrice realizujemo uobiajnim postupkom za mnoenje matrica. To jest da bismo u rezultujudoj matrici dobili element u i-toj vrsti i j-toj kolini moramo da mnoimo elemente i-te vrste prve matrice elementima j-te kolone druge matrice, i da proizovode odgovarajudih parova sabiramo tj:

mat3

Pri mnoenju formati matrica moraju biti usklaeni da bi se mnoenje moglo realizovati, tj. Prva matrica je formata dim1xdim2, druga dim2xdim3 , da bi rezultujuda matrica bila formata dim1 x dim3 MODULE zad32; FROM InOut IMPORT ReadInt,WriteInt,WriteString,WriteLn; CONST dim1 = 5; dim2 = 4; dim3 = 3; TYPE matrica1 = ARRAY [1..dim1],[1..dim2] OF INTEGER; matrica2 = ARRAY [1..dim2],[1..dim3] OF INTEGER; matrica3 = ARRAY [1..dim1],[1..dim3] OF INTEGER; VAR i: [1..dim1]; j: [1..dim3]; k: [1..dim2]; A: matrica1; B: matrica2; C: matrica3; (* rezultujuca matrica*) BEGIN (* unos elemenata prve matrice po vrstama*) WriteString('Unesite matricu A:'); WriteLn; FOR i:=1 TO dim1 DO FOR k:=1 TO dim2 DO WriteString(' '); ReadInt(A[i,k]) END; WriteLn; END; WriteLn; (* unos elemenata druge matrice po vrstama*) WriteString('Unesite matricu B:'); WriteLn; FOR k:=1 TO dim2 DO FOR j:=1 TO dim3 DO WriteString(' '); ReadInt(B[k,j]) END; WriteLn; END;

(* racunanje proizvoda *) FOR i:=1 TO dim1 DO (* fiksira se vrsta prve matrice*) FOR j:=1 TO dim3 DO (* fiksira se kolona druge matrice*) C[i,j]:=0; FOR k:=1 TO dim2 DO (* mnoze se odgovarajuci elementi fiksirane *) (* vrste i kolone i akumulira se vrednost *) (* rezultujuceg elementa*) C[i,j] := C[i,j] + A[i,k] * B[k,j] END END END; (* ispis proizvoda*) WriteLn; WriteString('Rezultujuca matrica je:'); FOR i:=1 TO dim1 DO WriteLn; FOR j:=1 TO dim3 DO WriteInt(C[i,j], 5) END END END zad32.

36. Napisti program koji uitava dva kompleksna broja (iji su realni i imaginarni delovi celi brojevi) i izvrava nad njima zadatu operaciju. Dopustive operacije su: + za sabiranje - za oduzimanje * za mnoenje MODULE zad36; FROM InOut IMPORT WriteLn,WriteString,Read,Write,ReadInt,WriteInt; TYPE KomplBr = RECORD Re,Im:INTEGER; END; skZn= SET OF CHAR; CONST operatori = skZn{'+','-','*'}; (* umesto ovakvog nacina,skup je mogao biti prikazan skupovnom *) (* promenljivom kojoj bi pocetna vrednost bila *) (* dodeljena na pocetku tela programa naredbom dodele*) VAR x,y,z:KomplBr; op: CHAR; BEGIN WriteLn; (* unos kompleksnih brojeva*) WriteString('Unesite realni i imaginarni deo prvog kompleksnog broja:'); WriteLn; ReadInt(x.Re); WriteLn; ReadInt(x.Im); WriteLn; WriteString('Unesite realni i imaginarni deo drugog kompleksnog broja:'); WriteLn; ReadInt(y.Re); WriteLn; ReadInt(y.Im); (* unos operacije*) REPEAT WriteLn; WriteString('Unesite znak operacije (+,-,*): '); Read(op); UNTIL op IN operatori; CASE op OF (* primena odgovarajuce operacije*) '+' : z.Re := x.Re + y.Re; (* sabiranje kompleksnih brojeva*) z.Im := x.Im + y.Im; | '-' : z.Re := x.Re - y.Re; (* oduzimanje kompleksnih brojva*) z.Im := x.Im - y.Im | '*' : z.Re := x.Re * y.Re - x.Im * y.Im; (* mnozenje komplesknih brojeva *) z.Im := x.Re * y.Im + x.Im * y.Re END; (* stampanje rezultata *) WriteLn; WriteString('Izlazna vrednost je:'); Write('('); WriteInt(x.Re,1); Write(','); WriteInt(x.Im,1); WriteString(')'); Write(op); Write('('); WriteInt(y.Re,1); Write(','); WriteInt(y.Im,1); WriteString(') = ('); WriteInt(z.Re,1); Write(','); WriteInt(z.Im,1); Write(')'); END zad36.

35. Napisati program koji uitava niz znakova i ispisuje sve samoglasnike, suglasnike i cifre koje se javljaju u uitanom nizu znakova. MODULE zad35; FROM InOut IMPORT WriteString,WriteLn,Read,Write; TYPE skupZn = SET OF CHAR; CONST svisamog = skupZn{'A','E','I','O','U','a','e','i','o','u'}; svisug = skupZn{'A'..'Z','a'..'z'} - svisamog; (* skupovna razlika *) svecif = skupZn{'0'..'9'}; VAR samog,sug,cif:skupZn; ch:CHAR; BEGIN (* na pocetku su skupovi suglasnika, samoglasnika i cifara prazni *) samog := skupZn{}; sug:=skupZn{}; cif:=skupZn{}; WriteString('Unesite tekst, zavrsite tackom:'); WriteLn; LOOP (* ucitava se niz znakova sve dok se ne ucita tacka*) Read(ch); IF ch='.' THEN EXIT ELSIF ch IN svisamog THEN INCL(samog,ch) (* ili samog :=samog+slova{ch}*) ELSIF ch IN svisug THEN INCL(sug,ch) ELSIF ch IN svecif THEN INCL(cif,ch); END END; WriteLn; WriteString('U tekstu se pojavljuju sledeci samoglasnici:'); WriteLn; (* ispis skupova*) FOR ch:= MIN(CHAR) TO MAX(CHAR) DO (* Kako se ne moze pristupati pojedinacnim elementiam skupa da bismo odstampali elemente skupa to radimo tako sto proverimo da li je znak u skupu. Ako je znak u skupu on se stampa a u suprotnom se nestampa*) IF ch IN samog THEN Write(ch); Write('') END zad35.

END END; WriteLn; WriteString('U tekstu se pojavljuju sledeci suglasnici:'); WriteLn; FOR ch:= MIN(CHAR) TO MAX(CHAR) DO IF ch IN sug THEN Write(ch); Write('') END; END; WriteLn; WriteString('U tekstu se pojavljuju sledece cifre:'); WriteLn; FOR ch:='0' TO '9' DO IF ch IN cif THEN Write(ch); Write(''); END END

37.Napisati program koji iz niza elemenata (1..n) odreuje sve proste brojeve, koristedi algoritam Eratostenovo sito. Reenje: Poznati algoritam za odreivanje prostih brojeva se realizuje slededim postukom. Uoe se svi prirodni brojevi iz intervala od 2 do zadatog n. Potom se nad tim brojevima ponavlja slededi postupak: 1) Prvi element raspoloivog niza brojeva se proglaava prostim 2) Iz niza brojeva se iskljue svi brojevi koji predstavljaju umnoke tog prostog broja 3) Postupak se ponavlja poevi od prvog koraka, sve dok u skupu ima brojeva
MODULE zad37; FROM InOut IMPORT WriteCard; CONST n=100; TYPE sk =SET OF [2..n]; VAR Sito, Prosti:sk; j,Sledeci: CARDINAL; BEGIN Sito:=sk{2..n}; (* sadrzi sve brojeve iz intervala 2..n*) Prosti:=sk{}; (* skup prostih brojeva je na pocetku prazan*) Sledeci:=2; REPEAT (* trazi sledeci broj kojim sito pocinje*) WHILE NOT (Sledeci IN Sito) DO INC(Sledeci) END; (* prvi element sita je prost broj*) INCL(Prosti,Sledeci); j:=Sledeci; (* izbaci iz sita sve umnoske*) WHILE j<=n DO EXCL(Sito,j); j:=j+Sledeci (* formira sledeci umnozak*) END; UNTIL Sito = sk{}; (* stampaj sve proste brojeve*) FOR j:=2 TO n DO IF j IN Prosti THEN WriteCard(j,8) END END END zad37.

34. Napisati program za transpotovanje zadate kvadratne matrice, i to tako da rezultujuda matrica bude u originalnoj matrici. Pri reenju problema ne koristiti nikakve pomodne nizove ili matrice. MODULE zad34; FROM InOut IMPORT WriteLn,WriteString,WriteCard,ReadCard; CONST dim=50; (* maksimalna dimenzija matrice*) TYPE indeks = [1..dim]; mat = RECORD el:ARRAY indeks OF ARRAY indeks OF CARDINAL; Dim:indeks (* stvarna dimenzija*) END; VAR A:mat; PROCEDURE Unos(VAR A:mat); VAR i,j:indeks; pom:CARDINAL; BEGIN WriteLn; WriteString('Unesite dimenziju matrice:'); ReadCard(pom); A.Dim :=pom; FOR i:=1 TO A.Dim DO FOR j:=1 TO A.Dim DO WriteLn; WriteString('Unesite element u '); WriteCard(i,1); WriteString('. vrsti i'); WriteCard(j,1); WriteString('. koloni:'); ReadCard(A.el[i,j]) END; END END Unos; PROCEDURE Stampa(A:mat); VAR i,j:indeks; BEGIN FOR i:=1 TO A.Dim DO WriteLn; FOR j:=1 TO A.Dim DO WriteCard(A.el[i,j],5) END END END Stampa;

PROCEDURE Stampa(A:mat); VAR i,j:indeks; BEGIN FOR i:=1 TO A.Dim DO WriteLn; FOR j:=1 TO A.Dim DO WriteCard(A.el[i,j],5) END END END Stampa; PROCEDURE Transp(VAR B:mat); VAR i,j: indeks; pom:CARDINAL; BEGIN WITH B DO (* elementi sa glavne dijagonale nece ni u rezultujucoj matrici*) (* promeniti mesta te se one ne transportuju jer se za to nema potrebe*) FOR i:=2 TO Dim DO FOR j:=1 TO i-1 DO (* za zamenu pozicija dva elementa matrice koristi se *) (* pomocna promenljiva pom*) pom:=el[i,j]; el[i,j]:=el[j,i]; el[j,i]:=pom; END END END END Transp; BEGIN Unos(A); Transp(A); WriteLn; WriteString('Transportovana matrica je:'); Stampa(A); END zad34.

(* za zamenu pozicija dva elementa matrice koristi se *) (* pomocna promenljiva pom*)

37.Napisati program koji iz niza elemenata (1..n) odreuje sve proste brojeve, koristedi algoritam Eratostenovo sito. Reenje: Poznati algoritam za odreivanje prostih brojeva se realizuje slededim postukom. Uoe se svi prirodni brojevi iz intervala od 2 do zadatog n. Potom se nad tim brojevima ponavlja slededi postupak: 4) Prvi element raspoloivog niza brojeva se proglaava prostim 5) Iz niza brojeva se iskljue svi brojevi koji predstavljaju umnoke tog prostog broja 6) Postupak se ponavlja poevi od prvog koraka, sve dok u skupu ima brojeva
MODULE zad37; FROM InOut IMPORT WriteCard; CONST n=100; TYPE sk =SET OF [2..n]; VAR Sito, Prosti:sk; j,Sledeci: CARDINAL; BEGIN Sito:=sk{2..n}; (* sadrzi sve brojeve iz intervala 2..n*) Prosti:=sk{}; (* skup prostih brojeva je na pocetku prazan*) Sledeci:=2; REPEAT (* trazi sledeci broj kojim sito pocinje*) WHILE NOT (Sledeci IN Sito) DO INC(Sledeci) END; (* prvi element sita je prost broj*) INCL(Prosti,Sledeci); j:=Sledeci; (* izbaci iz sita sve umnoske*) WHILE j<=n DO EXCL(Sito,j); j:=j+Sledeci (* formira sledeci umnozak*) END; UNTIL Sito = sk{}; (* stampaj sve proste brojeve*) FOR j:=2 TO n DO IF j IN Prosti THEN WriteCard(j,8) END END END zad37.

31. Napisati program koji za dati niz znakova utvruje da li je palindrom. Palindrom je niz znakova (re ili reenica) koja je kada se ita i sleva u desno i zdesna u levo ista. Zadatak retiti iterativno.
MODULE zad31; FROM InOut IMPORT ReadString,WriteString,WriteLn; FROM Str IMPORT Length; CONST MaxDuzina = 100; TYPE rec=ARRAY[1..MaxDuzina] OF CHAR; VAR Poli:rec; poc,kraj:CARDINAL; BEGIN WriteLn; WriteString('Unesite recenicu:'); ReadString(Poli); poc:=1; kraj:=Length(Poli); WHILE (poc<kraj) AND (Poli[poc] = Poli[kraj]) DO DEC(kraj); INC(poc); END; WriteLn; WriteString('Uneta recenica:'); IF poc>= kraj THEN WriteString('jeste palindrom') ELSE WriteString('nije palindrom'); END END zad31.

68.Dat je prirodan broj n. Usitniti sumu od n dinara najmanjom koliinom moneta od 1,2,3,5,10,15 i 50 dinara. Predpostavlja se da datih apoena ima u dovoljnoj koliini. Reenje: Ovaj problem je pogodan za reavanje gramzivnim algoritmom. Krenudemo od najvedeg apoena i uzeti koliko je god mogude novanica od datog apoena n. Preostalu sumu demo isplatiti koliko je mogude novanicama od najvedeg po vrednosti neiskoridenog apoena i tako dalje, dok cela suma ne bude ispladena.
MODULE zad68; FROM InOut IMPORT WriteString, WriteLn, ReadCard, WriteCard; VAR a:ARRAY[1..8] OF CARDINAL; (* vrednost apoena*) i,suma:CARDINAL; BEGIN a[1]:=50; a[2]:=20; a[3]:=15; a[4]:=10; a[5]:=5; a[6]:=3; a[7]:=2; a[8]:=1; WriteString('Unesite sumu novca:'); ReadCard(suma); WriteLn; FOR i:=1 TO 8 DO WriteString('Novacanica od:'); WriteCard(a[i],1); WriteString(' dinara treba '); WriteCard(suma DIV a[i], 1); (* uzimamo od najveceg preostalog apoena koliko mozemo*) WriteLn; suma:=suma MOD a[i]; (* treba jos isplatiti ono sto ostane*) END; WriteLn; END zad68.

Razni zadaci - Nizovi

1.Napisati program kojim se za uneti prirodan broj n (1n20) i unosi n relanih brojeva, a potom se uneti brojevi ispisuju u redosledu u kom su uneti i u obrnutom redosledu. MODULE zad1; FROM InOut IMPORT WriteString,ReadInt,WriteInt,WriteLn; FROM RealInOut IMPORT ReadReal,WriteReal; VAR a:ARRAY[1..20] OF REAL i,n:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); FOR i:=1 TO n DO WriteString('Unesite broj '); WriteInt(i,1); WriteString(':'); ReadReal(a[i]); END; WriteString('Niz u unetom redosledu:'); WriteLn; FOR i:=1 TO n DO WriteReal(a[i],5); WriteLn; END; WriteString('Niz u obrnutom redosledu:'); WriteLn; FOR i:=1 TO n DO WriteReal(a[n-i+1],5); WriteLn; END; END zad1.

2. Napisati program koji za uneti niz od n (1n50) celih brojeva odreuje i ispisuje broj parnih elemenata niza. MODULE zad2; FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt; VAR a:ARRAY[1..50] OF INTEGER; i,n,b:INTEGER; BEGIN WriteString('Unesite n:'); ReadInt(n); FOR i:=1 TO n DO ReadInt(a[i]); b:=0; END; FOR i:=1 TO n DO IF a[i] MOD 2 = 0 THEN b:=b+1; END; END; WriteString('Broj parnih elemenata je:'); WriteInt(b,5); END zad2.

3.Napisati algoritam i program kojim se za uneti niz od n (1 ) odreuje vrednost i pozicija (prvog) najmanjeg elementa niza. MODULE zad3; FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt; VAR a:ARRAY[1..150] OF INTEGER; i,n,min,p:INTEGER; BEGIN WriteLn; WriteString('Unesite broj n:'); ReadInt(n); FOR i:=1 TO n DO ReadInt(a[i]); min:=a[1]; p:=1; END; FOR i:=2 TO n DO IF a[i] < min THEN min:=a[i]; p:=i; END; END; WriteString('Najmanji broj niza je:'); WriteInt(min,5); WriteLn; WriteString(Index najmanjeg niza je:'); WriteInt(p,5); WriteLn; END zad3.

4.Napisati program kojim se za uneti niz od n (1n30) celih brojeva odreuje proizvod najvedeg pozitivnog i najmanjeg negativnog elementa niza. Ukoliko u nizu nema pozitivnih ili negativnih brojeva, rezultat je 0. FROM InOut IMPORT WriteString,WriteLn,WriteInt,ReadInt; VAR a:ARRAY[1..30] OF INTEGER; i,n,min,max,p:INTEGER; BEGIN WriteLn; WriteString('Unesite broj n:'); ReadInt(n); FOR i:=1 TO n DO ReadInt(a[i]); END; min:=0; max:=0; FOR i:=1 TO n DO IF (a[i]<0) AND (a[i]<min) THEN min:=a[i]; END; IF (a[i]>0) AND (a[i]>max) THEN max:=a[i]; END; END; p:=min*max; WriteString('Rezultat je:'); WriteInt(p,1) END zad4.

5. Napisati program koji uitava realne brojeve sve dok se ne unese 0. Na kraju ispisati kvadrate unetih brojeva. MODULE zad5; FROM InOut IMPORT WriteString,WriteLn; FROM RealInOut IMPORT WriteReal,ReadReal;

6. Dat je niz a od n cellih brojeva (1n200) i ceo broj x. Napisati program koji transformie niy a tako da se na poetku nalaze sve elementi niza koji su vedi od x, a zatim oni elementi koji su manji ili jednaki od x. Posle transformacije ispisati niz. Primer: Ulaz n = 5 a: 7, -5 1 9 4 x=2 Izlaz 7,9,4,1, -5 Ulaz n=6 a:2,7,3,-2,9,10 x=5 Izlaz 7 9 10 -2 2 3 MODULE zad6; FROM InOut IMPORT WriteString, WriteLn, ReadInt, WriteInt; VAR a:ARRAY[1..100] OF INTEGER; i,n,x,b,t:INTEGER; BEGIN WriteLn; WriteLn; WriteString('Unesite n:'); ReadInt(n); FOR i:=1 TO n DO WriteString('Unesite broj '); WriteInt(i,1); WriteString(':'); ReadInt(a[i]); END; WriteLn; WriteString('Unesite x:'); ReadInt(x); b:=0; FOR i:=1 TO n DO IF a[i]>x THEN b:=b+1; t:=a[i]; a[i]:=a[b]; a[b]:=t END; END; FOR i:=1 TO n DO WriteInt(a[i],5); WriteLn; END; END zad6.

VAR a:ARRAY[1..100] OF REAL; i,n:INTEGER; x,kvadrat:REAL; BEGIN n:=0; WriteLn; WriteString('Unesite broj x:'); WriteLn; ReadReal(x); WHILE x <> 0.00 DO n:=n+1; a[n]:=x; ReadReal(x); END; WriteString('Kvadrati unetih brojeva su:'); WriteLn; FOR i:=1 TO n DO kvadrat:= a[i]*a[i]; WriteReal(kvadrat,8); WriteLn; END; END zad5.

7. Napisati program u kome se unosi broj n (n 100), a zatim nizovi a i b od n realnih brojeva. Formirati niz c tako da je Ci = max{ai+bi} + ai/bi. Na ekranu ispisati unete nizove i dobijeni niz.
MODULE zad7; FROM InOut IMPORT WriteString,WriteLn,WriteInt,ReadInt; FROM RealInOut IMPORT ReadReal,WriteReal; VAR a,b,c:ARRAY[1..100] OF REAL; i,n:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); WriteString('Prvi niz'); WriteLn; FOR i:=1 TO n DO WriteString('Unesite '); WriteInt(i,1); WriteString('. clan 1. niza:'); ReadReal(a[i]); END; WriteString('Drugi niz '); WriteLn; FOR i:=1 TO n DO WriteString('Unesite '); WriteInt(i,1); WriteString('.clan 2.niza:'); ReadReal(b[i]); END; FOR i:=1 TO n DO IF a[i]<b[i] THEN c[i]:=b[i]+a[i]/b[i]; ELSE c[i]:=a[i]+a[i]/b[i]; END; END; WriteLn; WriteString('Niz C '); WriteLn; FOR i:=1 TO n DO WriteReal(c[i],4); WriteLn; END; END zad7.

8. Napisati program u kome se za uneti niz a n (n100) realnih brojeva, formira niz b na slededi nain: b1=a1 b2=a1+a2 b2=a1+a1+a3 MODULE zad8; FROM InOut IMPORT WriteString,WriteLn,WriteInt,ReadInt; FROM RealInOut IMPORT ReadReal,WriteReal; VAR a,b:ARRAY[1..100] OF REAL; i,n:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); WriteLn; ReadInt(n); WriteLn; WriteString('Unos niza '); WriteLn; FOR i:=1 TO n DO WriteString('Unesite broj '); WriteInt(i,1); WriteString(': '); ReadReal(a[i]); b[1]:=a[1]; END; FOR i:=2 TO n DO b[i]:=b[i-1]+a[i]; END; FOR i:=1 TO n DO WriteReal(b[i],8); END; END zad8.

9. Napisati program koji za uneti niz a od n (n100) celih brojeva kreira novi niz b koji sadri samo neparne elemente niza a. Za dobijeni niz izraunati srednju vrednost i ispisati na ekranu dobijeni niz i njegovu srednju vrednost.
MODULE zad9; FROM InOut IMPORT WriteLn, WriteString, WriteInt, ReadInt; FROM RealInOut IMPORT WriteReal; VAR a,b:ARRAY[1..100] OF INTEGER; i,n,k:INTEGER; bsr:REAL; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); FOR i:=1 TO n DO WriteString('Unesite broj '); WriteInt(i,1); WriteString(': '); ReadInt(a[i]); END; k:=0; FOR i:=1 TO n DO IF a[i] MOD 2 =1 THEN k:=k+1; b[k]:=a[i]; END; END; bsr:=0.00; FOR i:=1 TO k DO bsr:=bsr+FLOAT(b[i]); END; bsr:=bsr/FLOAT(k); FOR i:=1 TO k DO WriteInt(b[i],4); END; WriteLn; WriteString('Srednja vrednost novog niza je:'); WriteReal(bsr,4); END zad9.

10.Napisati program koji za uneti niz a od n (n100) celih brojeva i uneti ceo broj k (1kn) izbacuje element niza koji se nalazi na poziciji k. Na ekranu ispisati dobijeni niz. MODULE zad10; FROM InOut IMPORT WriteString,WriteLn,ReadInt,WriteInt; VAR a:ARRAY[1..100] OF INTEGER; i,n,k:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); FOR i:=1 TO n DO ReadInt(a[i]); END; WriteString('Unesite k:'); ReadInt(k); WriteLn; FOR i:=k TO n-1 DO a[i]:=a[i+1]; END; FOR i:=1 TO n-1 DO WriteInt(a[i],5); WriteLn; END; END zad10.

11. Napisati program koji u uneti niz a od n (n100) celih brojeva, koji je ureen u neopadajudem redosledu ubacuje ceo broj m, tako da se ne narui poredak u nizu. FROM InOut IMPORT WriteString,WriteLn,WriteInt,ReadInt; VAR a:ARRAY[1..100] OF INTEGER; i,n,m,k:INTEGER; BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); FOR i:=1 TO n DO ReadInt(a[i]); END; WriteString('Unesite m:'); ReadInt(m); k:=1; WHILE (m>a[k]) AND (k<=n) DO k:=k+1; END; FOR i:=n TO k BY -1 DO a[i+1]:=a[i]; END; a[k]:=m; FOR i:=1 TO n+1 DO WriteInt(a[i],7); WriteLn; END; END zad11.

12. Napisati program u kome se unosi re kao niz. Za unetu re ispisati svako malo slovo engleske abecede koje se u reenici pojavljuje, ispitati broj pojavljivanja. MODULE zad12; FROM InOut IMPORT WriteString,WriteCard,Write,ReadString,WriteLn; FROM Str IMPORT Length; TYPE str = ARRAY[1..100] OF CHAR; VAR s:ARRAY['a'..'z'] OF CARDINAL; i:CARDINAL; c:CHAR; rec:str; BEGIN WriteLn; WriteString('Unesite neku rec:'); ReadString(rec); FOR c:='a' TO 'z' DO s[c]:=0; END; FOR i:=1 TO Length(rec) DO c:= rec[i]; IF (c>='a') AND (c<='z') THEN s[c]:=s[c]+1; END; END; FOR c:='a' TO 'z' DO IF s[c]>0 THEN Write(c); WriteCard((s[c]),4); WriteLn; END; END; END zad12.

13. Napisati program koji uitava dva niza duine n. A zatim izraunava sumu proizvoda nizova meusobno. Primer za uita broj n=3 korisnik upisuje za prvi niz Jedan niz Drugi niz 1 2 2 4 3 5 Rezultat je: 25 MODULE zad13; FROM InOut IMPORT Done, ReadCard, WriteCard, WriteLn, WriteString, Read; TYPE niz = ARRAY [1..50] OF CARDINAL; VAR i, duz, pom, rez : CARDINAL; niz1, niz2 : niz; izlaz, izlazz : CHAR; BEGIN REPEAT REPEAT WriteLn; WriteString('Unesite duzinu nizova(prirodan broj): '); ReadCard(duz); (*ucitavanje duzine niza*) UNTIL Done; FOR i := 1 TO duz DO REPEAT (*unos prvog niza, s' proverom*) WriteLn; WriteString('Unesite '); WriteCard(i,1); WriteString('. element prvog niza: '); ReadCard(niz1[i]); UNTIL Done; END; FOR i := 1 TO duz DO REPEAT (*unos drugog niza, s' proverom*) WriteLn; WriteString('Unesite '); WriteCard(i,1); WriteString('. element drugog niza: '); ReadCard(niz2[i]); UNTIL Done; END; rez := 0; (*resetujemo vrednost rezultata*) FOR i := 1 TO duz DO pom := niz1[i]*niz2[i]; rez := rez + pom; END; WriteLn; WriteString('Rezultat je '); WriteCard(rez,1); WriteLn; WriteLn; WriteString('Da li zelite da izadjete iz programa(D/N)? '); Read(izlaz); Read(izlazz); UNTIL (CAP(izlaz)) = 'D'; END zad13.

14.Napisati program koji iscrtava histogram koridnosnosti slova u unetom stringu. MODULE zad14; FROM InOut IMPORT WriteLn, WriteString, ReadString, Read, Write; TYPE str1 = ARRAY [1..50] OF CHAR; str2 = ARRAY ['a'..'z'] OF CARDINAL; VAR string : str1; rezultat : str2; i, duzina, pom : CARDINAL; izlaz, izlazz, k : CHAR; BEGIN REPEAT WriteLn; WriteString('Unesite string za analizu(bez razmaka): '); ReadString(string); (*ucitavanja stringa za obradu*) FOR k := 'a' TO 'z' DO rezultat[k] := 0; (*resetovanje vrednosti u stringu*) END; duzina := LENGTH(string); FOR i := 1 TO duzina DO FOR k := 'a' TO 'z' DO IF string[i] = k THEN INC(rezultat[k]); END; END; END; FOR k := 'a' TO 'z' DO IF rezultat[k] # 0 THEN WriteLn; Write(k); WriteString(' : '); pom := rezultat[k]; FOR i := 1 TO pom DO WriteString('@'); END; END; END; WriteLn; WriteString('Da li zelite da izadjete iz programa(D/N)? '); Read(izlaz); Read(izlazz); UNTIL (CAP(izlaz)) = 'D'; END zad14.

15. Napisati program koji ispisuje tablici mnoenja za unete brojeve. MODULE zad15; FROM InOut IMPORT ReadInt, Read, Done, WriteLn, WriteString, WriteInt; CONST maxduzina = 50; TYPE niz = ARRAY [1..maxduzina] OF INTEGER; VAR niza, nizb : niz; i, j, duz : INTEGER; izlaz : CHAR; BEGIN REPEAT REPEAT WriteLn; WriteString('Unesite duzinu nizova a i b: '); ReadInt(duz); (*ucitavanje duzine nizova*) UNTIL (duz > 0) AND Done; FOR i := 1 TO duz DO WriteLn; WriteString('Unesite '); (*Unos niza a*) WriteInt(i,1); WriteString('. element niza a: '); REPEAT ReadInt(niza[i]); UNTIL Done; END; FOR i := 1 TO duz DO WriteLn; WriteString('Unesite '); (*unos niza b*) WriteInt(i,1); WriteString('. element niza b: '); REPEAT ReadInt(nizb[i]); UNTIL Done; END; WriteLn; WriteString('Tablica mnozenja unesenih nizova je: '); FOR i := 1 TO duz DO (*izpis resenja u vidu tabele*) WriteLn; FOR j := 1 TO duz DO WriteInt(niza[i]*nizb[j], 7); END; END; WriteLn; WriteString('Da li zelite da izadjete iz programa(D/N)? '); Read(izlaz); UNTIL (CAP(izlaz)) = 'D'; END zad15.

16. Neka su prva dva elementa niza A[1]=5 i A[2]=7 a svaki sledeci element se dobija kao poslednja cifra zbira dva prethodna elementa niza. Napisati program koji izracunava prvih 100 elemenata niza i zatim ih ispisuje na ekran. MODULE zad16; FROM InOut IMPORT Read, WriteLn, WriteString, WriteCard; CONST maxduzina = 100; TYPE nizbr = ARRAY [1..maxduzina] OF CARDINAL; VAR niz : nizbr; i : CARDINAL; izlaz : CHAR; BEGIN niz[1] := 5; niz[2] := 7; WriteLn; WriteString('Trazeni niz je: '); WriteCard(niz[1],4); WriteCard(niz[2],4); FOR i := 3 TO maxduzina DO niz[i] := (niz[i-1] + niz[i-2]) MOD 10; WriteCard(niz[i],4); END; WriteString('Pritisnite bilo koji taster za izlazak iz programa'); Read(izlaz); END zad16.

17. Napisati program koji ucitava niz duine n i odreuje broj indeksa najvedeg elementa. MODULE zad17; FROM InOut IMPORT WriteString,WriteLn,WriteInt,ReadInt; VAR x:ARRAY[1..50] OF INTEGER; i,n,MaxX,IndMax:INTEGER;

BEGIN WriteLn; WriteString('Unesite n:'); ReadInt(n); WriteLn; FOR i:=1 TO n DO WriteString('Unesite '); WriteInt(i,1); WriteString('. clan niza:'); ReadInt(x[i]); END; MaxX:=x[1]; (* pred.se da je vrednost x[1] najveca u nizu*) IndMax:=1; FOR i:=2 TO n DO IF MaxX<x[i] THEN (* kada se u nizu nadje element veci od MaxX*) (* zamenjuje se vrednost MaxX sa x[i], a IndMax sa i*) MaxX:=x[i]; IndMax:=i; END; END; WriteString('Indeks najveceg elementa je:'); WriteInt(IndMax,5); WriteLn; END zad17.

Razni zadaci - matrice


1.Sabiranje dve matrice. MODULE zad1; FROM InOut IMPORT ReadInt,WriteInt,WriteString,WriteLn; CONST dim =50; TYPE Matrica = ARRAY[1..dim],[1..dim] OF INTEGER; VAR i,j:INTEGER; d:INTEGER; mat1,mat2,mat3:Matrica; BEGIN WriteLn; WriteString('Unesite dimenziju matrica:'); ReadInt(d); WriteLn; (* Unos prve matrice*) WriteString('Unesite prvu matricu po vrstama:'); WriteLn; FOR i:=1 TO d DO FOR j:=1 TO d DO ReadInt(mat1[i,j]) END; WriteLn; END; (* unos 2. matrice*) WriteString('Unesite drugu matricu:'); WriteLn; FOR i:=1 TO d DO FOR j:=1 TO d DO ReadInt(mat2[i,j]) END; WriteLn; END;

(* racunanje zbira*) FOR i:=1 TO d DO FOR j:=1 TO d DO mat3[i,j]:=mat1[i,j]+mat2[i,j] END; END; (* ispis matrice*) WriteString('Zbir matrice je:'); WriteLn; FOR i:=1 TO d DO FOR j:=1 TO d DO WriteInt(mat3[i,j],5) END; WriteLn END; END zad1.

2. Napisati program za mnoenje dve celobrojne matrice tj. matrice ije su vrednosti celi brojevi. Rezultujudu matricu ispitati po vrstama. Reenje: Proizvod matrice realizujemo uobiajnim postupkom za mnoenje matrica. To jest da bismo u rezultujudoj matrici dobili element u i-toj vrsti i j-toj kolini moramo da mnoimo elemente i-te vrste prve matrice elementima j-te kolone druge matrice, i da proizovode odgovarajudih parova sabiramo tj:

mat3

Pri mnoenju formati matrica moraju biti usklaeni da bi se mnoenje moglo realizovati, tj. Prva matrica je formata dim1xdim2, druga dim2xdim3 , da bi rezultujuda matrica bila formata dim1 x dim3 MODULE zad32; FROM InOut IMPORT ReadInt,WriteInt,WriteString,WriteLn; CONST dim1 = 5; dim2 = 4; dim3 = 3; TYPE matrica1 = ARRAY [1..dim1],[1..dim2] OF INTEGER; matrica2 = ARRAY [1..dim2],[1..dim3] OF INTEGER; matrica3 = ARRAY [1..dim1],[1..dim3] OF INTEGER; VAR i: [1..dim1]; j: [1..dim3]; k: [1..dim2]; A: matrica1; B: matrica2; C: matrica3; (* rezultujuca matrica*) BEGIN (* unos elemenata prve matrice po vrstama*) WriteString('Unesite matricu A:'); WriteLn; FOR i:=1 TO dim1 DO FOR k:=1 TO dim2 DO WriteString(' '); ReadInt(A[i,k]) END; WriteLn; END; WriteLn; (* unos elemenata druge matrice po vrstama*) WriteString('Unesite matricu B:'); WriteLn; FOR k:=1 TO dim2 DO FOR j:=1 TO dim3 DO WriteString(' '); ReadInt(B[k,j]) END; WriteLn; END;

(* racunanje proizvoda *) FOR i:=1 TO dim1 DO (* fiksira se vrsta prve matrice*) FOR j:=1 TO dim3 DO (* fiksira se kolona druge matrice*) C[i,j]:=0; FOR k:=1 TO dim2 DO (* mnoze se odgovarajuci elementi fiksirane *) (* vrste i kolone i akumulira se vrednost *) (* rezultujuceg elementa*) C[i,j] := C[i,j] + A[i,k] * B[k,j] END END END; (* ispis proizvoda*) WriteLn; WriteString('Rezultujuca matrica je:'); FOR i:=1 TO dim1 DO WriteLn; FOR j:=1 TO dim3 DO WriteInt(C[i,j], 5) END END END zad32.

3. Napisati program kojim se za unete prirodne brojeve m i n (1m,n20) koji predstavljaju dimenzije matrice, unose se celi brojevi koji predstavljaju elemente matrice po vrstama, a zatim za unetu matricu rauna prosena vrednost svih elemenata matrice. MODULE zad3; FROM InOut IMPORT WriteString,WriteLn,ReadInt; FROM RealInOut IMPORT WriteReal,ReadReal; VAR a:ARRAY[1..20],[1..20] OF REAL; i,j,m,n:INTEGER; s:REAL;

4.Napisati program kojim se za unete prirodne brojeve m i n (1m, n20) koji predstavljaju dimenzije matrice, unose celi brojevi koji predstavljaju elemente matrice po vrstama, a zatim formira niz koji sadri zbir elemenata po vrstama. MODULE zad4; FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt; VAR a:ARRAY[1..20],[1..20] OF INTEGER; s:ARRAY[1..20] OF INTEGER; i,j,m,n:INTEGER; BEGIN

BEGIN WriteLn; WriteString('Unesite m:'); ReadInt(m); WriteString('Unesite n:'); ReadInt(n); WriteString('Unesite vrednosti matrice:'); WriteLn; FOR i:=1 TO m DO FOR j:=1 TO n DO ReadReal(a[i,j]); END; END; FOR i:=1 TO m DO FOR j:=1 TO n DO s:=s+a[i,j]; END; END; s:=s/FLOAT((m*n)); WriteString('Prosecna vrednost elemenata matrice:'); WriteReal(s,6); END zad3.

WriteLn; WriteString('Unesite m:'); ReadInt(m); WriteString('Unesite n:'); ReadInt(n); WriteString('Unesite elemente po vrstama:'); WriteLn; FOR i:=1 TO m DO FOR j:=1 TO n DO ReadInt(a[i,j]); END; END; FOR i:=1 TO m DO FOR j:=1 TO n DO s[i]:=s[i]+a[i,j]; END; END; WriteString('Zbir elemenata po vrstama je:'); WriteLn; FOR i:=1 TO m DO WriteInt(s[i],5); WriteLn; END; END zad4.

5. Napisati program koji ucitava prirodan broj n i matricu celih brojeva A dimenzija n x n i nakon toga za svaku kolonu matrice a izracunava i ispisuje zbir svih elemenata te kolone. MODULE zad5; FROM InOut IMPORT Done, WriteLn, WriteString, WriteInt, ReadInt, Read; CONST maxduzina = 20; TYPE matrica = ARRAY [1..maxduzina], [1..maxduzina] OF INTEGER; VAR mata : matrica; i, j, zbir, duz : INTEGER; izlaz : CHAR; BEGIN REPEAT REPEAT (*unos dimenzija matrice*) WriteLn;WriteString('Unesite dimenziju kvadratne matrice nxn: '); ReadInt(duz); UNTIL (duz > 0) AND Done; FOR i := 1 TO duz DO FOR j := 1 TO duz DO REPEAT (*unos brojeva u matricu*) WriteLn; WriteString('Unesite element u '); WriteInt(i,1); WriteString('. redu i '); WriteInt(j,1); WriteString('. koloni: '); ReadInt(mata[i,j]); UNTIL Done; END; END; WriteLn; WriteLn; WriteString('Trazeni zbirovi su: '); FOR i := 1 TO duz DO zbir :=0; FOR j := 1 TO duz DO zbir := zbir + mata[j,i]; END; WriteInt(zbir, 5); END; WriteLn; WriteString('Da li zelite da izadjete iz programa(D/N)'); Read(izlaz); UNTIL (CAP(izlaz)) = 'D'; END zad5.

Reeni zadaci Uvod u programiranje - IV kolokvijum ( Polinomi )

1/93. Neka je dat polinom P(x) iji su koeficienti realni brojevi i neka je dat broj t. Napisati program koji pronalazi koeficiente polinoma q(x) = p(x+t) i tampa rezultujudi polinom. MODULE zad20; FROM PolinomN IMPORT maxSt,Polinom,Ucitaj,Anuliraj,Puta,BrojPuta,Saberi,Stampaj; FROM IO IMPORT WrStr, WrLn, WrCard, WrReal, RdReal; PROCEDURE Kompozicija(a,b : Polinom; VAR rez:Polinom;VAR ok:BOOLEAN); (* odreduje polinom rez(x) tako da vazi rez(x)=a(b(x)) *) (* u ovom slucaju je b(x) = x+t *) VAR bNaN, bNaNPutaKoef: Polinom; n:INTEGER; BEGIN IF (a.st >0) AND (b.st>0) AND (a.st*b.st>maxSt) THEN ok:=FALSE (* suvise velik stepen rezultujuceg polinoma*) ELSE ok:=TRUE; Anuliraj(rez); IF a.st > -1 THEN rez.st:=0; (* na pocetku je rez = a.k[0] *) rez.k[0] := a.k[0]; Anuliraj(bNaN); bNaN.st :=0; (* b na 0 = 1.0 *) bNaN.k[0] :=1.0; FOR n:=1 TO a.st DO Puta(b,bNaN,bNaN,ok); (* racunamo novo bNaN tj. b^n*b *) BrojPuta(bNaN, a.k[n], bNaNPutaKoef); (* novi sabirak k_n * b^n *) Saberi(rez,bNaNPutaKoef, rez) (* dodajmo ga u rez - rezultujuci polinom *) END END (* inace je a nula polinom i rezultat je nula polinoma sto dobijamo *) END (* anuliranjem polinoma rez*) END Kompozicija; .

VAR p,xt,q:Polinom; (* xt = x+t *) t:REAL; ok:BOOLEAN; BEGIN (* glavni program *) WrStr('Unesite t:'); t:=RdReal(); WrStr('Unesite polinom p:'); WrLn; Ucitaj(p); WrStr('p(x) = '); Stampaj(p,4); WrLn; Anuliraj(xt); xt.st:=1; (* formira xt = x+t *) xt.k[0] := t; xt.k[1] := 1.0; Kompozicija(p,xt,q,ok); (* q(x) = p(x+t) *) IF ok THEN WrStr('q(x) = p(x + '); WrReal(t,4,1); WrStr( ') = '); Stampaj(q,4) ELSE WrStr('Poliom p mora imati stepen manji od '); WrCard(maxSt,1) END END zad20.

2/97. Napisati program koji izraunava koeficiente realnih polinoma a(x) i b(x) ako vai: f17(x) =f9(x)a(x) + b(x) i stepen polinoma b(x) je manji od stepena polinoma f9(x). Niz polinoma fn je definisan na slededi nain: fn(x)=x2fn-1(x) + x(fn-1(x) fn-2(x)) + x f2n-1(x), n>1 f0(x)=4 f1(x) = 1-x
MODULE zad21; FROM PolinomN IMPORT Polinom, Anuliraj, Stampaj, Puta, Saberi, Oduzmi, Deli; FROM IO IMPORT WrStr, WrLn; PROCEDURE Izvod(p:Polinom; VAR rez:Polinom); VAR i:INTEGER; BEGIN Anuliraj(rez); WITH rez DO IF p.st > 0 THEN st:=p.st-1; FOR i:=0 TO st DO (* izvod svakog pojedinacnog monoma*) k[i]:=p.k[i+1]* FLOAT(i+1) END END END END Izvod; VAR f0,f1,fn,x2,x,a,b,f9,izv,izv2,razlIzvoda,prviSab,drugiSab,treciSab,temp,f02:Polinom; n:CARDINAL; ok:BOOLEAN; BEGIN Anuliraj(f0); (* formiranje polinoma f0 = 4*) f0.st :=0; f0.k[0]:=4.0; Anuliraj(f1); (* formiranje polinoma f1=1-x *) f1.st :=1; f1.k[0]:=1.0; f1.k[1]:=-1.0; Anuliraj(x2); (* formiranje polinoma x^2 *) x2.st :=2; x2.k[2]:=-1.0; Anuliraj(x); (* foramiranje polinoma x *) x.st:=1; x.k[0]:=1.0; Izvod(f0,izv); (* da ne bi dva puta trazili isti izvod *)

FOR n:=2 TO 17 DO (* izracunavanje polinoma fn do 17 jer nam trebaju polinomi f9 i f17 *) Izvod(izv, izv2); Izvod(f1,izv); Oduzmi(izv,izv2,razlIzvoda); Puta(x,razlIzvoda,drugiSab,ok); Puta(x2,f1,prviSab,ok); Puta(f0,f0,f02,ok); Puta(x,f02,treciSab,ok); Saberi(prviSab,drugiSab,temp); Saberi(temp,treciSab,fn); IF n=9 THEN (* ako je izracunat polinom f9, terba ga zapamtiti *) f9:=fn; END; f0:=f1; f1:=fn; END; (* na kraju se u polinomu fn nalazi polinom f17*) Deli(fn,f9,a,b,ok); (* ovde je fn = f17*) WrStr('a(x) = '); Stampaj(a,5); WrLn; WrLn; WrStr('b(x)='); Stampaj(b,5); END zad21.

3/1. Koristedi modul PolinomN, napisati program koji a) uitava polinome p(x) i q(x) i tampa njihov proizvod, b) tampa polinom r(x) = q(x) p(x) 2p(x) + 3x2 4. Napisati i testirati na polinomu r(x) proceduru koja: c) odstranjuje iz polinoma sve monome sa negativnim koeficijentom, d) tampa sve monome (svaki u novom redu) iji je koeficijent vedi od stepena.
MODULE Pol1; FROM PolinomN IMPORT Polinom, Anuliraj, Ucitaj, Stampaj, Saberi, Oduzmi, Puta, BrojPuta, NadjiStepen; FROM InOut IMPORT WriteString, WriteLn; PROCEDURE Izvod(p: Polinom; VAR rez: Polinom); VAR i: INTEGER; BEGIN Anuliraj(rez); WITH rez DO IF p.st > 0 THEN st := p.st - 1; FOR i := 0 TO st DO k[i] := p.k[i+1] * FLOAT(i+1) END END END END Izvod; (* (c) *) PROCEDURE OdstraniNegativne(VAR p: Polinom); VAR i: INTEGER; BEGIN FOR i := 0 TO p.st DO IF p.k[i] < 0.0 THEN p.k[i] := 0.0 END END; NadjiStepen(p) END OdstraniNegativne; (* (d) *) PROCEDURE StampajMonomeKVS(p: Polinom); VAR i: INTEGER; pom: Polinom; BEGIN FOR i := 0 TO p.st DO IF p.k[i] > FLOAT(p.st) THEN Anuliraj(pom); pom.st := i; pom.k[i] := p.k[i]; WriteLn; Stampaj(pom, 5) END END; END StampajMonomeKVS;

VAR p, q, r, pq, pom, pizv, dvap: Polinom; ok: BOOLEAN; BEGIN (* (a) *) WriteString("Unesite polinom p:"); WriteLn; Ucitaj(p); WriteLn; WriteString("Unesite polinom q:"); WriteLn; Ucitaj(q); Puta(p, q, pq, ok); WriteLn; IF ok THEN WriteString("p(x)q(x) = "); Stampaj(pq, 5) ELSE WriteString("Polinom p(x)q(x) je prevelikog stepena.") END; (* (b) *) Anuliraj(pom); pom.st := 2; pom.k[2] := 3.0; pom.k[0] := -4.0; Izvod(p, pizv); BrojPuta(p, 2.0, dvap); Oduzmi(q, pizv, r); Oduzmi(r, dvap, r); Saberi(r, pom, r); WriteLn; WriteString("r(x) = "); Stampaj(r, 5); (* (c) *) OdstraniNegativne(r); WriteLn; WriteString("r(x) bez negativnih koeficijenata = "); Stampaj(r, 5); (* (d) *) WriteLn; WriteString("Monomi sa koeficijentom vecim od stepena su:"); StampajMonomeKVS(r) END Pol1.

4/2. Koristedi modul PolinomN, napisati program koji

a) uitava polinome p(x) i q(x) i tampa njihov kolinik i ostatak pri deljenju, 2 3 b) tampa polinom r(x) = q(x1) + q(1)p(x) + p (x) x 3x + 2. Napisati i testirati na polinomu r(x) proceduru koja: c) uvedava stepen monoma sa najvedim stepenom za 3, d) tampa monom sa najvedim proizvodom koeficijenta i stepena.
MODULE Pol2; FROM PolinomN IMPORT maxSt, Polinom, Anuliraj, Ucitaj, Stampaj, Deli, Saberi, Puta, BrojPuta, Izracunaj; FROM InOut IMPORT WriteString, WriteLn; PROCEDURE Kompozicija(a, b: Polinom; VAR rez: Polinom; VAR ok: BOOLEAN); VAR bNaN, bNaNPutaKoef: Polinom; n: INTEGER; BEGIN IF (a.st > 0) AND (b.st > 0) AND (a.st * b.st > maxSt) THEN ok := FALSE ELSE ok := TRUE; Anuliraj(rez); IF a.st > -1 THEN rez.st := 0; rez.k[0] := a.k[0]; Anuliraj(bNaN); bNaN.st := 0; bNaN.k[0] := 1.0; FOR n := 1 TO a.st DO Puta(b, bNaN, bNaN, ok); BrojPuta(bNaN, a.k[n], bNaNPutaKoef); Saberi(rez, bNaNPutaKoef, rez) END END END END Kompozicija; (* (c) *) PROCEDURE UvecajStepenZa3(VAR p: Polinom; VAR ok: BOOLEAN); BEGIN IF p.st+3 > maxSt THEN ok := FALSE ELSE ok := TRUE; p.k[p.st+3] := p.k[p.st]; p.k[p.st] := 0.0; p.st := p.st+3 END END UvecajStepenZa3; (* (d) *) PROCEDURE StampajMonomNajveciProiz(p: Polinom); VAR i: INTEGER; max: Polinom; BEGIN Anuliraj(max); IF p.st > -1 THEN max.st := p.st; max.k[p.st] := p.k[p.st]; FOR i := p.st-1 TO 0 BY -1 DO IF p.k[i]*FLOAT(i) > max.k[max.st]*FLOAT(max.st) THEN Anuliraj(max); max.st := i; max.k[i] := p.k[i]; END END END; Stampaj(max, 5) END StampajMonomNajveciProiz;

VAR p, q, r, kol, ost, pom, xm1, sab1, sab2, sab3: Polinom; q1: REAL; ok: BOOLEAN; BEGIN (* (a) *) WriteString("Unesite polinom p:"); WriteLn; Ucitaj(p); WriteLn; WriteString("Unesite polinom q:"); WriteLn; Ucitaj(q); Deli(p, q, kol, ost, ok); WriteLn; IF ok THEN WriteString("p(x)/q(x) = "); Stampaj(kol, 5); WriteString(", ostatak "); Stampaj(ost, 5); ELSE WriteString("Polinom q(x) ne moze biti nula-polinom.") END; (* (b) *) Anuliraj(pom); pom.st := 3; pom.k[3] := -1.0; pom.k[1] := -3.0; pom.k[0] := 2.0; Anuliraj(xm1); xm1.st := 1; xm1.k[1] := 1.0; xm1.k[0] := -1.0; Kompozicija(q, xm1, sab1, ok); Izracunaj(1.0, q, q1); BrojPuta(p, q1, sab2); Puta(p, p, sab3, ok); Saberi(sab1, sab2, r); Saberi(r, sab3, r); Saberi(r, pom, r); WriteLn; WriteString("r(x) = "); Stampaj(r, 5); (* (c) *) UvecajStepenZa3(r, ok); WriteLn; IF ok THEN WriteString("r(x) sa uvecanim stepenom je: "); Stampaj(r, 5); ELSE WriteString("Polinom r(x) je prevelikog stepena."); END; (* (d) *) WriteLn; WriteString("Monom sa najvecim proizvodom koeficijenta i stepena je: "); StampajMonomNajveciProiz(r) END Pol2.

5. (Sa praktinih vebi) Koristedi modul PolinomN napisati program koji formira i tampa polinom. 2 a) p(x) = 3x b) q(x) = 6 2 c) r(x) = 4x -2.5x+8 d) s(x) = polinom unet sa tastature e) t(x) = (p(x)+q(x)(r(x) s(x)) f) u(x) = 2*t(x) g) v(x) = u(1) h) m(x) = u(x) i) c(x) = m(p(x))

MODULE Polinomi; FROM PolinomN IMPORT Polinom,Anuliraj,Ucitaj,Stampaj,Saberi,Oduzmi,Puta,BrojPuta, Izracunaj,maxSt; FROM InOut IMPORT WriteString,WriteLn; FROM RealInOut IMPORT WriteReal; PROCEDURE Izvod(p:Polinom; VAR rez:Polinom); VAR i:INTEGER; BEGIN Anuliraj(rez); WITH rez DO IF p.st > 0 THEN st:=p.st-1; FOR i:=0 TO st DO k[i]:=p.k[i+1]*FLOAT(i+1) END END END END Izvod; PROCEDURE Kompozicija(a,b:Polinom; VAR rez:Polinom; VAR ok:BOOLEAN); VAR bNaN,bNaNPutaKoef:Polinom; n:INTEGER; BEGIN IF (a.st>0) AND (b.st>0) AND (a.st*b.st > maxSt) THEN ok:=FALSE ELSE ok:=TRUE; Anuliraj(rez); IF a.st > -1 THEN rez.st :=0; rez.k[0]:=a.k[0]; Anuliraj(bNaN); bNaN.st :=0; bNaN.k[0]:=1.0; FOR n:=1 TO a.st DO Puta(b,bNaN,bNaN,ok); BrojPuta(bNaN,a.k[n],bNaNPutaKoef); Saberi(rez,bNaNPutaKoef,rez) END END END END Kompozicija;

VAR p, q, r, s, zbir, razlika, rez,u,m,kompozicija : Polinom; v:REAL; ok:BOOLEAN; BEGIN WriteLn; WriteLn; WriteLn; WriteString('@@@ PROGRAM POLINOMI @@@'); WriteLn; WriteLn; (* (a) - Ispis polinoma p(x)= 3x^2 Anuliraj(p); p.st:=2; p.k[0]:=0.0; p.k[1]:=0.0; p.k[2]:=3.0; WriteString('p(x) = '); Stampaj(p,4); WriteLn; (* (b) - Ispis q(x)=6 *) Anuliraj(q); q.st:=0; q.k[0]:=6.0; WriteString('q(x) = '); Stampaj(q,4); WriteLn; (* (c) - r(x)= 4x^2 - 2.5x + 8 *) Anuliraj(r); r.st:=2; r.k[0]:=8.0; r.k[1]:=2.5; r.k[2]:=4.0; WriteString('r(x)='); Stampaj(r,4); (* (d) - s(x)- polinom unet sa tastature *) WriteLn; WriteString('Unesite polinom s(x):'); Ucitaj(s); WriteString('s(x) = '); Stampaj(s,4); WriteLn; *)

(* (e) t(x)=(p(x)+q(x))*(r(x)-s(x)) *) Saberi(p,q,zbir); Oduzmi(r,s,razlika); Puta(zbir,razlika,rez,ok); WriteString('t(x) = '); Stampaj(rez,4); WriteLn; (* (f) u(x)=2*t(x) *) BrojPuta(rez,2.0,u); WriteString('u(x)= '); Stampaj(u,4); WriteLn; (* (g) v(x) = u(1) *) Izracunaj(1.0,u,v); WriteString('v(1)= '); WriteReal(v,5); WriteLn; (* h) m(x) = u'(x) *) Izvod(u,m); WriteString("u'(x) = "); Stampaj(m,4); WriteLn; (* c(x)=m(p(x) *) Kompozicija(m,p,kompozicija,ok); WriteString('m(p(x)) = '); Stampaj(kompozicija,4); WriteLn; END Polinomi.

6/2. Koristedi modul PolinomN, napisati program koji a) Uitava polinome p(x) i q(x) i tampa njihov zbir b) tampa polinom r(x) = q(x) 3p(x) + 2x4+3x Napisati i testirati program r(x) procedura kojia c) uvedava svaki ne nula koeficient polinoma za 1 d) tampa monom sa najmanjim koeficientom
MODULE zad2; FROM PolinomN IMPORT Polinom,Anuliraj,Ucitaj,Stampaj,Saberi,Oduzmi,BrojPuta, NadjiStepen; FROM InOut IMPORT WriteString,WriteLn; (* (d) *) PROCEDURE StampajMonomSaNajmanjimKoef(p:Polinom); VAR i:INTEGER; min:Polinom; BEGIN Anuliraj(min); IF p.st >-1 THEN min.st :=p.st; min.k[p.st]:=p.k[p.st]; FOR i:= p.st - 1 TO 0 BY -1 DO IF p.k[i] < min.k[min.st] THEN Anuliraj(min); min.st:=i; min.k[i]:=p.k[i] END END END; Stampaj(min,5) END StampajMonomSaNajmanjimKoef; (* (c) *) PROCEDURE UvecajNeNulaKoeficient (VAR p:Polinom); VAR i:INTEGER; BEGIN FOR i:=0 TO p.st DO IF p.k[i] <> 0.0 THEN p.k[i]:=p.k[i]+1.0 END END; NadjiStepen(p); END UvecajNeNulaKoeficient;

VAR p,q,rez,pom,zbir,trip:Polinom; BEGIN (* (a) *) WriteString('Unesite polinom p:'); WriteLn; Ucitaj(p); WriteLn; WriteString('Unesite polinom q:'); WriteLn; Ucitaj(q); Saberi(p,q,zbir); WriteString('p(x)+q(x) = '); Stampaj(zbir,5); WriteLn; (* (b) *) Anuliraj(pom); pom.st:=4; pom.k[1]:=3.0; pom.k[4]:=2.0; BrojPuta(p,3.0,trip); Oduzmi(q,trip,rez); Saberi(rez,pom,rez); WriteString('r(x)='); Stampaj(rez,5); WriteLn; (* (c) *) UvecajNeNulaKoeficient(rez); WriteString('Uvecani ne nula koeficent:'); Stampaj(rez,5); WriteLn;

(* (d) *) WriteString('Monom sa najmanjim koeficentom:'); StampajMonomSaNajmanjimKoef(rez); WriteLn;

END zad2.

DEFINITION MODULE PolinomN; CONST maxSt = 100; (* maksimalni stepen polinoma *) TYPE Polinom = RECORD k : ARRAY [0 .. maxSt] OF REAL; st : INTEGER; END; PROCEDURE Ucitaj(VAR p: Polinom); (* Ucitava polinom 'p'. *) PROCEDURE Anuliraj(VAR p: Polinom); (* Anulira polinom 'p'. *) PROCEDURE NadjiStepen(VAR p : Polinom); (* Pronalazi stepen polinoma i smesta ga u strukturu. *) PROCEDURE Izracunaj(x: REAL; VAR p: Polinom; VAR rezultat: REAL); (* Izracunava vrednost 'rezultat' polinoma 'p' za 'x'.*) PROCEDURE Stampaj(VAR p: Polinom; d: CARDINAL); (* Stampa polinom 'p', pri cemu se svaki koeficijent stampa u polju sirine 'd'. *) PROCEDURE Saberi(p1, p2: Polinom; VAR zbir: Polinom); (* Sabira polinome 'p1' i 'p2' dajuci 'zbir'. *) PROCEDURE Oduzmi(p1, p2: Polinom; VAR razlika: Polinom); (* Oduzima polinom 'p2' od polinoma 'p1' dajuci 'razliku'. *) PROCEDURE Puta(p1, p2: Polinom; VAR proizvod: Polinom; VAR ok : BOOLEAN); (* Mnozi polinom 'p1' sa 'p2' dajuci 'proizvod'. 'ok' je TRUE, ako pri racunanju nije bilo greske. *) PROCEDURE BrojPuta(p: Polinom; c: REAL; VAR proizvod: Polinom); (* Mnozi broj 'c' sa polinomom 'p' dajuci 'proizvod'. *) PROCEDURE Deli(p1, p2: Polinom; VAR kolicnik, ostatak : Polinom; VAR ok : BOOLEAN); (* Deli dva polinoma, dajuci 'kolicnik' i 'ostatak'. 'ok' je TRUE, ako pri racunanju nije bilo greske. *) END PolinomN.

You might also like