reseni zadaci iz programiranja (modula-2)

Upload: nikola-curcic

Post on 10-Jul-2015

4.879 views

Category:

Documents


9 download

DESCRIPTION

Решени задаци из програмског језика "Модула-2"... Ови задаци заправо представљају решења задатака са практичних и теоријских вежби као и колоквијума из предмета "Увод у програмирање" са Природно Математичког факултета у Новом Саду. Напомињем да је ова "збирка задатака" настала у тренутку спремања колоквијума. Задаци могу имати грешке а решења могу бити неоптимизирана.

TRANSCRIPT

Reeni zadaci - Uvod u programiranje I Kolokvijum

Reeni zadaci iz zbirke9.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 xb .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='A') AND (zn= '0') AND (zn-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.