zadaci iz pasqala

75
METODIČKA ZBIRKA REŠENIH ZADATAKA I KRATKE TEORIJE IZ PROGRAMSKOG JEZIKA PASCAL Autor Radoica Nikolić Leskovac 2015.

Upload: -

Post on 08-Sep-2015

82 views

Category:

Documents


8 download

DESCRIPTION

Metodicka zbirka resenih zadataka i kratke teorije iz programskog jezika pasqal

TRANSCRIPT

  • METODIKA ZBIRKA REENIH ZADATAKA I

    KRATKE TEORIJE IZ PROGRAMSKOG JEZIKA

    PASCAL

    Autor

    Radoica Nikoli

    Leskovac 2015.

  • PASCAL

    2

    Zbirka je namenjena:

    Za srednje kole i gimnazije

    Za pripremu prijemnog ispita iz informatike

    Za uenje osnova iz programskog jezika PASCAL

  • PASCAL

    3

    Predgovor

    Paskal (Pascal) je imperativni programski jezik, koji je 1974. godine razvio Niklaus Virt, kao jezik pogodan za uenje strukturnog programiranja. Imenovan je po uvenom francuskom matematiaru i filozofu Blezu Paskalu, tvorcu prve raunske maine koja je imala mogudnost izvoenja operacije sabiranja. Standardizovan je 1983. godine od strane Meunarodnog komiteta za standardizaciju. Paskal se danas koristi kao poetni program za obuku bududih programera, naruito onih koji nameravaju da rade na programskom jeziku C. Osnovni znakovi jezika:

    U paskalu se koriste ASCII slova

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

    a b c d e f g h i j k l m n o p q r s t u v w x y z

    brojevi: 0 1 2 3 4 5 6 7 8 9

    i specijalni znakovi: + - * / = < > *+ . , ; : ^ () , -

    Meu specijalne znakove se ubraja i razmak (spejs). Rezervisane rei u paskalu:

    Begin - se koristi za poetak bloka.

    End - se koristi za kraj bloka.

    Var - se koristi za poetak definisanja promenljivih.

    Type - se koristi za definisanje tipova promenljivih.

    Const - se koristi za definisanje konstanti.

    Procedure - se koristi za definisanje procedure.

    Function - se koristi za definisanje funkcije. Standardne funkcije jezika paskal

    Read(a), Readln(a) - je funkcija koja uitava vrednost za promenljivu a.

    Write(a), Writeln(a) - je funkcija koja ispisuje vrednost promenljive a. Paskal ne razlikuje velika i mala slova (tj. nije case sensitive).

    U programskom jeziku paskalu svaka promenjiva se karakterie tipom. Za svaki tip postoji razliiti skup operacija i vrednosti. Tipovi podataka u paskalu mogu biti prosti i sloeni. Standardni tipovi podataka: Celobrojni (integer), realni (real), logiki (boolean) i znakovni (char).

    Neke od najkorienijih operacija u pascal-u su + : sabiranje; - : oduzimanje; * : mnoenje; / : deljenje; abs : absolutna vrednost broja (bez predznaka); div : celobrojno deljenje; mod : deljenje s ostatkom; sqr : kvadrat; sqrt : kvadratni koren; ln : prirodni logaritam;

    sin :sinus; cos : kosinus; tan : tangens; pred : prethodnik integera; succ : sledbenik integera; trunc: celi deo razlomka (integer); int : celi deo razlomka (real); frac : decimalni deo razlomka (real);

  • PASCAL

    4

    Sadraj:

    Linijska struktura 5.

    Razgranata struktura 10.

    Case naredba 21.

    Naredbe petlje 25.

    While ciklus 39.

    Repeat ciklus 46.

    Nizovi 48.

    Matrice 62.

    Stringovi 72.

  • PASCAL

    5

    UVOD

    Linijska struktura

    Naredbe za unos su read i readln; read se koristi s navodjenjem varijable u zagradi, i uvek se upotrebljava za oitavanje unosa, dok se readln moe koristiti i samostalno, jer ona prenosi kursor u novi red te eka bilo kakav odgovor za nastavak ili prekid izvrenja programa. Za izpis koriste se naredbe write i writeln. Razlika izmedju njih je u tome to ova druga izpisuje tekst u novi red (liniju), te se moe koristiti samostalno, bez sadraja izpisa, za sam prelazak u novi red, za razliku od prve koja zahteva dodatni parametar.

    begin

    writeln ('Zdravo ');

    readln

    end.

    Primer: Napisati program koji ispisuje poruku Zdravo. Begin {Begin oznaava poetak programa} writeln(Zdravo); {writeln komanda ispisuje tekst izmedju zagrada} readln ,readln koji bez zagrada stoji ispred poslednje end. komande slui kako bi videli rezultat programa prilikom njegovog izvravanja,ukoliko ne stoji opcija readln program se automatski gasi , i nedemo biti u mogudnosti da vidimo rezultat.} end. ,naredba end. je naredba koja nam pokazuje da je kraj programa.-

    Primer zadataka koji sadri aritmetike operacije u njemu:

    Napisati program koji izraunava zbir dva uneta broja. var {var oznaava varijablu odnosno promenljive} broj1,broj2,rez:integer; {u ovom bloku se unose promenljive i definie im se tip , ukoliko koristimo operacije +,-,*,div,mod mozemo koristiti integer, u suprotnom koristimo real} begin writeln('Unesite broj1:'); readln(broj1); {Uitavamo vrednost prvog broja} writeln('Unesite broj2:'); readln(broj2); {Uitavamo vrednost drugog broja} rez:=broj1+broj2; {Pridruivanje vrednosti se vri komandom := } writeln('Broj1+Broj2=',rez); readln end.

  • PASCAL

    6

    Primeri zadataka sa linijskom strukturom

    1. Napisati program koji izraunava zapreminu na osnovu unete duine,irine i visine. var duzina,sirina,visina,zapremina:integer; begin writeln ('Unesite duzinu:'); readln(Duzina); writeln ('Unesite sirinu:'); readln(Sirina); writeln ('Unesite visinu:'); readln(Visina); Zapremina:=Duzina*Sirina*Visina; writeln('Zapremina bazena iznosi:',zapremina,'m^2'); readln end.

    2. Napisati program koji odredjuje koliko se puta prvi uneti broj sadri u drugom unetom broju kao i njihov ostatak deljenja. var broj1,broj2,brojDiv,BrojMod:integer; begin writeln ('Unesite broj1:'); readln(broj1); writeln ('Unesite broj2:'); readln(broj2); BrojDiv:=Broj1 div Broj2; {koliko se broj 2 puta sadri u broju 1} brojMod:=Broj1 mod Broj2; {ostatak pri deljenju broja 1 brojem 2} writeln('Broj1 sadrzi broj2:',BrojDiv,'puta'); writeln('Ostatak deljenja je:',BrojMod); readln end.

    3. Napisati program koji unetu veliinu u galonima pretvara u litre. 1 galon = 4.54 l var galon,litri:real; begin writeln ('Unesite kolicinu tecnosti u galonima:'); readln(galon); litri:=galon*4.54; writeln(litri:5:2); readln end.

    4. Automobil sa punim rezervoarom kapaciteta V litara predje put od S kilometara.Napisati program kojim se rauna potronja u litrima na 100 km. var v,s:real; begin writeln ('Unesite kapacitet rezervoara:'); readln(v); writeln('Unesite predjeni put:'); readln(s); writeln('Potrosnja na 10 km je:',V*100/s:6:2,' l'); readln end.

  • PASCAL

    7

    5. Napisati program kojim se rauna hipotenuza i povrina pravouglog trougla na osnovu zadatih kateta. var a,b,c,P:real; begin writeln ('Unesite a katetu:'); readln(a); writeln ('Unesite b katetu:'); readln(b); c:=sqrt(sqr(a)+sqr(b)); p:=(a*b)/2; writeln('Hipotenuza je:',c:6:2,'Povrsina je:',P:5:2); readln end.

    6. Napisati program koji prevodi teinu iz funti u kg (1 funta = 400g) var kg,funta:real; begin writeln('Unesite tezinu u funtama:'); readln(funta); kg:=funta*0.4; writeln('Tezina je:',kg:10:2); readln end.

    7. Napisati program koji izraunava cenu porcije sira x grama,ako je 1kg sira 165 dinara. var x:real; begin writeln ('Unesite tezinu porcije:'); readln(x); writeln('Cena porcije je:',0.165*x:10:2,'din'); readln end.

    8. Napisati program koji pomae kasirki da obrauna kusur,tako to od nje trai da unese jedininu cenu artikla i koliko novca dobije od kupca. var cena,kolicina,iznos:real; begin writeln ('Unesite cenu aritkla:'); readln(cena); writeln ('Unesite kolicinu artikla:'); readln(kolicina); writeln ('Unesite iznos koji daje kupac:'); readln(iznos); writeln('Kusur je:',iznos-cena*kolicina:10:2); readln end.

  • PASCAL

    8

    9. Napisati program kojim se rauna potrebno vreme za download unete veliine fajla,pri unetoj brzini. Program treba da ispie za koliko de se sati, minuta i sekundi skinuti fajl. var kolicina,brzina:real; sat,sek,min,rez:integer; begin writeln ('Unesite kolicinu mb za download:'); readln(kolicina); writeln ('Unesite brzinu downloada u KB/s:'); readln(brzina); rez:=Trunc(((Kolicina*1024)/brzina)); writeln(rez); sat:=rez div 3600; sek:=rez mod 3600; min:=sek div 60; sek:=sek mod 60; writeln('Potrebno je vreme:',sat:5,' h',min:5,' min',sek:5,' sek'); readln end.

    10. Napisati program koji izraunava obim i povrinu kvadrata i program koji izraunava povrinu i obim pravougaonika. a)Povrina i obim kvadrata var a,p,o:real; begin writeln ('Unesite duzinu stranice:'); readln(a); p:=sqr(a); o:=4*a; writeln('Povrsina kvadrata je:',p:6:2,' Obim je:',o:6:2); readln end. b) Povrina i obim pravougaonika var a,b,p,o:real; begin writeln ('Unesite a:'); readln(a); writeln ('Unesite b:'); readln(b); p:=a*b; o:=2*(a+b); writeln('Povrsina je:',p:6:2,' Obim je:',o:6:2); readln end.

    11. Dat je ugao u stepenima na dve decimale. Napisati program koji za date vrednosti ugla izraunava ugao u stepenima i minutama. var s:real; step,min:integer; begin writeln ('Unesite ugao u stepenima:'); readln(s); step:=trunc(s); {trunc se koristi za zaokruivanje brojeva , jer integer razume samo cele brojeve} min:=trunc(s-step*60); writeln(s:10:2,' stepeni je:',step,' stepeni ',Min,' minuta'); readln end.

    12. Napisati program kojim se vri preraunavanje amerikih dolara u Euro, ako su poznate dinarske vrednosti ovih valuta. var D, KursDolara, KursEura : real; begin writeln ('Koliko dolara treba konvertovati u Eure: '); readln(D); writeln ('Uneti kurs dolara izrazen u dinarima: '); readln(KursDolara); writeln ('Uneti kurs Eura izrazen u dinarima: '); readln(KursEura); writeln(D:10:2, ' $ =', D*KursDolara/KursEura:8:2, ' Eura'); readln end.

  • PASCAL

    9

    13. Napisati program koji reava slededi matematiki izraz: (x2+y2)2 var x, y, resenje : real; begin writeln ('Unesite vrednosti promenljivih x i y: '); readln(x, y); resenje := sqr((sqr(x)+sqr(y))); writeln('Resenje izraza je: ', resenje:6:2); readln end.

    14. Uitanom trocifrenom broju razdvojiti sve cifre. var a,b,c,m:integer; begin writeln('Unesite m:'); readln(m); begin a:=m div 100; b:=m mod 100 div 10; c:=m mod 10; end; writeln(a,' ',b,' ',c); readln end.

    15. Napisati program koji datom cetvorocifrenom celom broju izracunava zbir kvadrata cifara.

    var broj: integer; j, d, s, h, zbir: real; begin writeln('Unesite cetvorocifren broj: '); readln(broj); h:=broj div 1000; s:=broj div 100 mod 10; d:=broj div 10 mod 10; j:=broj mod 10; j:=j*j; d:=d*d; s:=s*s; h:=h*h; zbir:=s+d+j+h; writeln('Zbir cifara je ', zbir:0:0); readln end.

    16. Izraunati dijagonale d i D kocke (za poznatu stranicu a) var a, d, D: real; begin writeln('Unesite stranicu kocke'); readln(a); d:= a * sqrt(2); D:= a * sqrt(3); writeln('a=', a, ' d=', d, ' D=',D); readln end.

  • PASCAL

    10

    Razgranata struktura

    If,else if,else,then,case

    If-Then

    If-Then se koristi kad se eli odluiti o jednome mogudem ishodu toka programa u sluaju ako je ispunjen

    odredjeni uslov naveden nakon kljune rei "if". Ako je uslov ispunjen, izvrava se slededa naredba

    nakon kljune rei "then", a ako nije, programski tok ne ini nita, to jest prelazi na izvravanje sledede

    naredbe koja nije u sklopu If-Then izraza, ili se zavrava ukoliko nema nikakvih naredbi koje se mogu

    izvriti nakon izraza.

    IF {logiki izraz} THEN {naredba};

    Ako se eli uslovljeno pokrenuti vie naredbi u sluaju izvrenja zadanih uslova, sve se navode u "begin

    ,...- end" bloku, inae de program izvriti sve to dolazi nakon prve take-zareza (prve naredbe), bez

    obzira jesu li uslovi ispunjeni ili nisu:

    IF {logiki izraz} THEN

    begin

    {naredba 1};

    {naredba 2};

    {naredba 3};

    {...}

    end;

    IF then else

    Ako se eli odluiti izmedju nekoliko moguih tokova programa ili procedure, koristi se If-Then-Else

    izraz grananje; prvi tok izvrava se u sluaju da je izpunjen uslov napisan izmedju "if" (ako) i "then"

    (onda), drugi u sluaju da nije, a dolazi nakon kljune rei "else" (inae):

    IF {logiki izraz} THEN {naredba 1} ELSE {naredba 2};

  • PASCAL

    11

    Ovde vredi isto pravilo o zatvaranju blokova viestrukih naredbi izmedju "begin {...} end;" izraza:

    IF {logiki izraz} THEN

    begin

    {naredba 1};

    {naredba 2};

    {naredba 3};

    {...}

    end {ovde ne ide

    ";"}

    ELSE

    begin

    {naredba 4};

    {naredba 5};

    {naredba 6};

    {...}

    end;

    IF {logiki izraz} THEN

    begin

    {naredba 1};

    {naredba 2};

    {naredba 3};

    {...}

    end {ovde ne ide ";"}

    ELSE IF {logiki izraz} THEN

    begin

    {naredba 4};

    {naredba 5};

    end {ovde ne ide ";"}

    ELSE

    begin

    {naredba 6};

    {naredba 7};

    {naredba 8};

    {...}

    end;

  • PASCAL

    12

    Primeri zadataka sa razgranatom strukturom

    17. Napisati program kojim se odredjuje koji je od dva uneta broja vedi i ispisuje poruku o tome. Ako su brojevi jednaki , ispii poruku o tome. var broj1,broj2:integer; begin writeln ('Unesite broj1:'); readln(broj1); writeln ('Unesite broj2:'); readln(broj2); if broj1>broj2 then writeln('Broj1 je veci od broja2') else if broj1=broj2 then writeln('Brojevi su jednaki') else writeln('Broj2 je veci od broja1'); readln end.

    18. Imamo da je C = 5. Korisnik unosi vrednost A i B. Ako je A vede od B vrednost C de se uvedati za 12. U suprotnom C de ostati 5. var a,b,c:integer; begin c:=5; writeln('Unesite a:'); readln(a); writeln('Unesite b:'); readln(b); if a>b then c:=c+12; writeln('C=',C:2); readln end.

    19. Napisati program kojim se promenljivoj max dodeljuje vrednost vedeg od dva uneta broja. var a,b,max:integer; begin writeln ('Unesite a i b:'); readln(a,b); if a>b then max:=a else max:=b; writeln('Max=',max); readln end.

    20. Napisati program kojim se proverava da li je uneti broj paran ili nije. var broj:integer; begin writeln ('Unesite broj:'); readln(broj); if broj mod 2=0 then writeln('Broj je paran') else writeln('Broj je neparan'); readln end.

  • PASCAL

    13

    21. Napisati program kojim se unose dve promenljive sa tastature , promenljivoj max dodaje vrednost vedeg od ta dva broja , a promenljivoj min ,vrednost manjeg od ta dva broja. var a,b,max,min:integer; begin writeln ('Unesite a i b:'); readln(a,b); if a>b then begin max:=a; min:=b; end else begin max:=b; min:=a; end; writeln('Max=',max, 'min=',min); readln end.

    22. Napisati program koji izraunava kv.koren unetog broja.Ako je ulazni podatak nekorektan (x=0 then writeln('Kvadratni koren iz x= ',x:0:2,' je ',sqrt(x):0:2) else writeln('Ne postoji kvadratni koren negativnog broja'); readln end.

    23. Napisati program koji zavisno od uitane vrednosti,izraunava vrednost funkcije ili daje

    poruku da je funkcija nedefinisana y = var x:real; begin writeln ('Unesite broj:'); readln(x); if sqr(x)>=1 then writeln('y=',sqrt(sqr(x)-1):0:2) else writeln('Nekonkretan ulazni podatak'); readln end.

    24. Napisati program koji uitava dva broja I proverava da li su istog znaka. var a,b:integer; begin writeln ('Unesite A:'); readln(a); writeln ('Unesite B:'); readln(b); if A*B>0 then writeln('DA') else writeln('NE'); readln end.

  • PASCAL

    14

    25. Za tri uitana broja ispitati da li je jedan do njih jednak sumi druga dva broja. var a,b,c:integer; begin writeln('Unesite A:'); readln(A); writeln('Unesite B:'); readln(B); writeln('Unesite C:'); readln(C); if (A=B+C) or (B=A+C) or (C=A+B) then writeln('DA') else writeln('NE'); readln end.

    26. Napisti niz naredbi kojim se sumiraju samo pozitivne vrednosti promenljivih a,b,c. var a,b,c,suma:integer; begin suma:=0; writeln('Unesite a:'); readln(a); writeln('Unesite b:'); readln(b); writeln('Unesite c:'); readln(c); if a>0 then suma:=suma+a; if b>0 then suma:=suma+b; if c>0 then suma:=suma+c; writeln('Suma je:',suma); readln end.

    27. Napisati program koji izraunava povrinu krunog poprenog preseka na osnovu spoljanjeg i unutranjeg poluprenika (kontroliudi tanost unetih podataka). var r1,r2,p:real; begin writeln ('Unesite spoljasnji poluprecnik:'); readln(r1); writeln ('Unesite unutrasnji poluprecnik:'); readln(r2); if r1>r2 then begin p:=2*pi* (sqr (r1)-sqr(r2)); writeln('Povrsina kruznog prstena je:',P:0:2); end else writeln('Greska! Spoljasnji poluprecnik mora biti veci od unutrasnjeg!'); readln end.

    28. Napisati program koji na osnovu trajanja telefonskog razgovora i cene u minutama izraunava cenu telefonskog razgovora,ako je vikendom popust od 10%.U programu treba predvideti unos indikatora za dan razgovora 1-radni dan,2-vikend. var trajanje,cenaPoMin,Cena:real; Dan:integer; begin writeln ('Unesite vreme trajanja razgovora:'); readln(trajanje); writeln ('Unesite cenu po minutama:'); readln(CenaPoMin); writeln ('Unesi:1-Radni dan,2-Vikend:'); readln(dan); cena:=Trajanje*CenaPoMin; if dan=2 then cena:=cena*0.90; writeln('Cena razgovora je:',Cena:0:2,'din'); readln end.

  • PASCAL

    15

    29. Napisati program koji izraunava iznos poreza za unetu platu. Ako je bruto plata veda od iznosa 1000e porez je 20%,inae je porez 15%. var plata,porez:real; begin writeln ('Unesite platu:'); readln(Plata); if plata > 1000 then porez:=plata*0.2 else porez:=plata*0.15; writeln('Porez je:',porez:0:2); readln end.

    30. Napisati program koji na osnovu visine osobe odredjuje teinu.Idealna teina osobe mukog pola je manja od visine za 100,a enskog pola za 110.Predvideti unos identifikatora pola 1-muski,2-enski pol. var visina,idealnatezina:real; pol:integer; begin writeln('Unesi visinu:'); readln(visina); writeln ('Pol(1-Muski,2-Zenski)->'); readln(pol); if pol=1 then idealnatezina:=visina-100 else idealnatezina:=visina-110; writeln('Idealna tezina je:',idealnatezina:0:2); readln end.

    31. Napisati program koji na osnovu unete visine,teine i indikatora pola osobe ispisuje odgovarajudu poruku: Vi imate idealnu teinu,treba da se popravite,treba da smrate ... var v,t,it:real; p:integer; begin writeln ('Unesite visinu:'); readln(v); writeln ('Unesite tezinu:'); readln(t); writeln ('Pol(1-muski,2-zenski)->'); readln(p); if p=1 then it:=v-100 else it:=v-110; if it=t then writeln('Imate idealnu tezinu:') else if it>t then writeln('Treba da se popravite:',it-t:0:2,'kg') else writeln('Treba da smrsate:',t-it:0:2,'kg'); readln end.

    32. Napisati program kojim se izraunava ukupan otpor R koji daju otpornici R1 i R2 zavisno od tipa veze i to: 1-redno,2-paralelno var r1,r2,r:real; v:integer; begin writeln ('Unesite R1:'); readln(r1); writeln ('Unesite R2:'); readln(r2); writeln('Tip veze (1-redno,2-paralelno)->'); readln(v); if v=1 then r:=r1+r2 else r:=r1*r2/(r1+r2); writeln('Ukupni otpor je:',r:0:2); readln end.

  • PASCAL

    16

    33. Napisati niz naredbi kojima se odredjuje koliko je vrednosti unetih promenljivih a,b,c jednako nuli. var a,b,c,br:integer; begin writeln ('Unesite a:'); readln(a); writeln ('Unesite b:'); readln(b); writeln ('Unesite c:'); readln(c); br:=0; if a=0 then br:=br+1; if b=0 then br:=br+1; if c=0 then br:=br+1; writeln('Zbir promenljivih jednakih nuli:',br); readln end.

    34. Napisati program koji od korisnika uitava godinu (broj izmedju 1538 i 10000) i utvrdjuje da li je ona prestupna. Po gregorijanskom kalendaru prestupne godine odredjuju se na slededi nain: -ako je godina deljiva sa 400,prestupna je (npr.2000 godina je prestupna) -ako godina nije deljiva sa 400,ali je deljiva sa 100,nije prestupna (npr.1900. godina nije prestupna) -ako godina nije deljiva sa 100,ali je deljiva sa 4,prestupna je (npr.2004 godina je prestupna) -ako godina nije deljiva nije 100 deljiva sa 4,nije prestupna (npr.2001. nije prestupna) var g:integer; begin readln(g); if (g10000) then writeln('Unesite broj izmedju 1538 i 10000') else if g mod 400=0 then writeln('Prestupna je') else if g mod 100 = 0 then writeln('Nije prestupna') else if g mod 4 = 0 then writeln('Prestupna je') else writeln('Nije prestupna'); readln end.

    35. Napisati program kojim se reava jednaina ax+b=0 var a,b,x:real; begin writeln ('Unesite a:'); readln(a); writeln ('Unesite b:'); readln(b); x:=-b/a; writeln('Resenje jednacine je x=',x:8:2); readln end.

    36. Napisati program kojim se dati brojevi a,b i c udvostruuju,ako je abc ,a u protivnom se zamenjuju njihovim apsolutnim vrednostima. var a,b,c:integer; begin writeln ('Unesite a,b,c:'); readln(a,b,c); if (a>=b) and (b>=c) then begin a:=2*a;b:=2*b;c:=2*c; end else a:=abs(a);b:=abs(b);c:=abs(c); writeln('a=',a,' b=',b,' c=',c); readln end.

  • PASCAL

    17

    37. Ako se molekul sumporne kiseline H2SO4 sastoji od dva atoma vodonika,jednog atoma atoma sumpora I etiri atoma kiseonika, napisati program koji odredjuje maksimalan broj molekula sumporne kiseline koji se moe formirati od datih A atoma vodonika,B atoma sumpora i C atoma kiseonika. Traeni broj molekula je min (A div 2,B,C div 4) na emu se bazira reenje . var min,A,B,C:integer; begin writeln ('Unesite broj molekula vodonika,sumpora i kiseonika:'); readln(a,b,c); min:=A div 2; if By) and (y+z>x) then begin p:=(x+y+z)/2; s:=sqrt(p*(p-x)*(p-y)*(p-z)); writeln('Povrsina trougla je:',s:6:2); readln end else writeln('Ne moze se konsturisati trougao'); readln end.

    39. Napisati program kojim se y izraunava u zavisnosti od uslova koje ispunjava promenljiva x.

    {

    }

    var x,y:real; begin writeln ('Unesite argument:'); readln(x); if x

  • PASCAL

    18

    41. Napisati program kojim se dva data realna broja premetaju tako da vai poredak AB var a,b,p:real; begin writeln ('Unesite u jednoj liniji A,B:'); readln(a,b); if a>b then begin p:=a; a:=b; b:=p; end; writeln(a:10:2,b:10:2); readln end.

    42. Napisati program kojim se vrednosti tri broja premetaju tako da vai poredak ABC var a,b,c,p:real; begin writeln ('Unesite a,b,c:'); readln(a,b,c); if a>b then begin p:=a;a:=b;b:=p; end; if a>c then begin p:=a;a:=c;c:=p; end; if b>c then begin p:=b;b:=c;c:=p; end; writeln(a:10:2,b:10:2,c:10:2); readln end.

    43. Napisati naredbu uslovnog prelaska kojom se vrednosti promenljive f izraunavaju po formuli.

    {

    }

    var a,b,f:integer; begin writeln ('Unesite a:'); readln(a); writeln ('Unesite b:'); readln(b); if a mod 2 0 then begin f:=a+b; end else if a mod 2 = 0 then begin f:=a*b; end; writeln(f); readln end.

    44. .Napisati naredbu uslovnog prelaska kojom se za dato x po formuli izraunava y.

    {

    }

    var x,y:integer; begin writeln ('Unesite x:'); readln(x); if x

  • PASCAL

    19

    45. Napisati program koji za tri uneta broja A,B,C odredjuje zbir dva najmanja. var a,b,c,p:real; begin writeln ('Unesite a,b,c:'); readln(a,b,c); if a>b then begin p:=a;a:=b;b:=p; end; if a>c then begin p:=a;a:=c;c:=p; end; if b>c then begin p:=b;b:=c;c:=p; end; writeln(a+b:10:2); readln end.

    46. Napisati program koji za dve razliite promenljive A i B ispituje da li je veda od njih deljiva sa manjom bez ostatka. var broj1,broj2:integer; begin writeln ('Unesite broj1:'); readln(broj1); writeln ('Unesite broj2:'); readln(broj2); if broj1>broj2 then begin if broj1 mod broj2 = 0 then writeln('Broj1 je deljiv brojem2') else writeln('Broj1 nije deljiv brojem2') end else if broj2>broj1 then begin if broj2 mod broj1 = 0 then writeln('Broj2 je deljiv brojem1') else writeln('Broj2 nije deljiv brojem1') end; readln end.

    47. Napisati naredbu uslovnog prelaska koijm se za dato x izrauava y po formuli:

    y= ( )

    ( )

    var x,y,z:real; begin writeln ('Unesite x i y:'); readln(x,y); if x0 then if a

  • PASCAL

    20

    49. Napisati program koji izraunava realna reenja

    kvadratne jednaine ax2+bx+c = 0 (a0) var a,b,c,x1,x2,D:real; begin writeln ('Unesite koeficiente jednacine:'); readln(a,b,c); D:=b*b-4*a*c; if D=3) and (n1 =3) and (n2 then =3) and (n3 =2) and (prva=2) and (druga=2) and (treca=2) and (cetvrta

  • PASCAL

    21

    Case naredba

    Case grananje koristi se kod postojanja potrebe za determiniranjem vie od dva moguda ishoda toka

    programa, i to svakoga od njih pod razliitim uslovima (odnosno pod razliitom dodelom vrednosti

    varijabli do kojih programski izraz moe dodi pripadnom I/O funkcijom).

    CASE Varijabla of

    1: {naredba 1};

    2: {naredba 2};

    3: {naredba 3};

    4: {naredba 4};

    {...etc.}

    END; {case}

    Za koridenje strukture Case potrebno je da vrednost kondicionalne varijable bude ved poznata, odnosno

    izraunata u trenutku evaluacije Case grananja, za razliku od If-Then-Else strukture gde se kondicionalna

    varijabla moe izraunati u okviru samog izraza, odnosno moe se navesti izraz koji rauna vrednost

    varijable umesto njene konkretne vrednosti. Npr:

    IF (abs(broj)>=10) THEN naredba;

    ...za razliku od:

    CASE broj of

    0: {naredba 1};

    5: {naredba 2};

    10: {naredba 3};

    20: {naredba 4};

    {...etc.}

    END; {case}

    ...gde je potrebno navesti konkretne vrednosti koje inicijaliziraju neku proceduru.

  • PASCAL

    22

    Primeri zadataka sa case naredbom

    52. Dodeliti vrednost max vedem od dva uneta broja. var a,b,max:integer; begin writeln ('Unesite a,b:'); readln(a,b); case a>b of true:max:=a; false:max:=b; end; writeln('Najveci je:',max); readln end.

    53. Napisati case naredbu kojom se na osnovu brojnih ocena 5,4,3,2,1 ispisuju opisne ocene odlian,vr.dobar,dobar var ocena:integer; begin writeln ('Unesite ocenu:'); readln(ocena); case ocena of 5:writeln('odlican'); 4:writeln('vrlo dobar'); 3:writeln('dobar'); 2:writeln('dovoljan'); 1:writeln('nedovoljan'); end; readln end.

    54. Napisati program koji za dati redni broj dana u nedelji tampa ime dana. var d:integer; begin writeln ('Unesite broj rednog dana u nedelji:'); readln(d); writeln ('To je:'); case d of 1:writeln('ponedeljak'); 2:writeln('utorak'); 3:writeln('sreda'); 4:writeln('cetvrtak'); 5:writeln('petak'); 6:writeln('subota'); 7:writeln('nedelja'); end; readln end.

    55. Napisati program koji ispisuje mogude vrednosti koordinata x i y zavisno od broja kvadranta koji se unosi. var broj:integer; begin readln(broj); case broj of 1:writeln('x i y su veci od nule'); 2:writeln('x je manje od nule,y je vece od nule'); 3:writeln('x i y su manji od nule'); 4:writeln('x je vece od nule,y je manje od nule'); end; readln end.

  • PASCAL

    23

    56. Napisati program koji za dati mesec ispisuje njegov broj dana.U sluaju meseca februrar pitati korisnika da li je godina prestupna. var mesec:integer; prestupna:char; begin writeln ('Unesite broj meseca 1 i 12:'); readln(mesec); if (mesec12) then writeln('Broj meseca je nekonkretan') 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 dana') else writeln('28 dana'); end; end; readln end.

    57. Napisati program koji zavisno od vrednosti indikatora N izraunava povrinu geometrijskih figura: 1-pravougaonik , 2 trougao, 3-trapez, 4 krug. Nakon izbora gemetrijske figure unose se odgovarajudi podaci. var a,b,h,r,s:real; n:integer; begin writeln ('Unesite tip:(1-pravougaonik,2-trougao,3-trapez,4-krug):'); readln(n); case n of 1:begin writeln ('Unesite duzine stranice pravougaonika:'); readln(a,b); s:=a*b; end; 2:begin writeln ('Unesite osnovicu i visinu trougla:'); readln(a,h); s:=a*h/2; end; 3:begin writeln ('Unesite osnovice i visinu trapeza:'); readln(a,b,h); s:=(a+b)*h/2; end; 4:begin writeln ('Unesite poluprecnik kruga:'); readln(r); s:=sqr(r)*pi; end; end; writeln('Povrsina je:',s:0:2); readln end.

  • PASCAL

    24

    58. Ako se sa ulaza uitavaju tri prirodna broja k1,k2,k3, koji oznaavaju redni broj dana u godini, ispitati da li oznaavaju isti dan u nedelji.Na primer isti dan oznaavaju 2,16 i 30 ili 344,351 i 358. var k1,k2,k3,n1,n2,n3:integer; begin writeln ('Unesite tri dana u nedelji:'); readln(k1,k2,k3); n1:=k1 mod 7; n2:=k2 mod 7; n3:=k3 mod 7; if (n1=n2) and (n2=n3) then writeln('Oznacavaju isti dan u nedelji') else writeln('Ne oznacavaju isti dan u nedelji'); readln end.

    59. Napisati program kojim se za uitani ugao u stepenima koji moe biti vedi od 360 odredjuje kvadrant kome pripada. var u:integer; begin writeln ('Unesite ugao u stepenima:'); readln(u); u:=u mod 360; case u div 90 of 0:writeln('Prvi kvadrant'); 1:writeln('Drugi kvadrant'); 2:writeln('Treca kvadrant'); 3:writeln('Cetvrti kvadrant'); end; readln end.

    60. Napisati program kojim se uitava znak za operaciju (+,-,*,/) i dva realna operanda, a zatim tampa rezultat. Program treba da simulira kalkulator. var broj1,broj2,rezultat:real; operator:char; def:boolean; begin writeln ('Unesite broj1:'); readln(broj1); writeln ('Unesite operaciju:'); readln(operator); writeln ('Unesite broj1:'); readln(broj2); def:=true; case operator of '+':rezultat:=broj1+broj2; '-':rezultat:=broj1-broj2; '*':rezultat:=broj1*broj2; '/':if broj2 = 0 then begin def:=false; writeln('Nedefinisano je deljenje sa nulom') end else rezultat:=broj1/broj2; end; if def then writeln('Rezultat=',rezultat:10:3); readln end.

  • PASCAL

    25

    Naredbe petlje

    FOR,WHILE,REPEAT

    Naredbe ponavljanja su for, while i repeat, a oblici i pravila njihova koristjenja su:

    FOR broja = x TO y DO {...};

    WHILE {...} DO {...}; {dok je istinit uslov ... -> ponavljaj ...}

    REPEAT {...} UNTIL {...}; {ponavljaj ... -> sve dok ne bude ...}.

    FOR petlja

    Naredba for umogudava bezuslovno ponavljanje nekog dela programa odreeni broj puta. U okviru for petlje neophodno je definisati brojaku promenljivu (broja) koja de se u svakom prolasku kroz petlju (iteraciji) uvedavati ili umanjivati za jedan u zavisnosti od toga da li je u okviru for naredbe navedena rezervisana re to (za uvedavanje) ili downto (za umanjivanje). Pored toga potrebno je navesti i poetnu i krajnju vrednost brojake promenljive. Naredbe unutar for petlje se izvravaju za svaku vrednost brojake promenljive, sve dok ona ne dostigne krajnju vrednost. Upravljaka promenljiva moe biti integer, boolean ili char tipa. U Pascal-u nije mogude definisati za koliko se uvedava ili umanjuje brojaka promenljiva. Korak promene je uvek 1 (u sluaju to), odnosno -1 (u sluaju downto). Poetna i krajnja vrednost se izraunavaju na poetku petlje i ne mogu se menjati tokom njenog izvravanja.

    Algoritam

    1. Uitati n

    2. Za i = 1 do n radi

    2.1 tampaj vrednost i

    2.2 idi na i = 2

  • PASCAL

    26

    Primeri zadataka sa FOR petljom

    61. Napisati program kojim se ispisuju velika slova latininog alfabeta i njihovi redni brojevi. var slovo:char; begin for slovo:='A' to 'Z' do writeln(slovo,' ',ord(slovo)); readln end.

    62. Za vrednost od 1 do n unetog broja napisati i program za uitavanje,sumiranje i tampanje njihove sume. var a,s:real; i,n:integer; begin writeln ('Unesite n:'); readln(n); s:=0; for i:=1 to n do begin writeln ('Unesite broj',i,':'); readln(a); s:=s+a; end; writeln(s); readln end.

    63. Napisati program koji ispisuje sve parne brojeve od 1 do unetog n. var broj,n:integer; begin writeln('Unesite n:'); readln(n); for broj:=1 to n do if broj mod 2 = 0 then writeln('Parni brojevi su:',broj); readln

    end.

    64. Sa tastature se unose 10 brojeva.Napisati program koji rauna njihov zbir i proizvod. var a,zbir,proizvod:real; i:integer; begin zbir:=0;proizvod:=1; for i:=1 to 10 do begin writeln ('Unesi ',i,'-broj:'); readln(a); zbir:=zbir+a; proizvod:=proizvod*a; end; writeln('Zbir brojeva je:',Zbir:5:2,' Proizvod je:',proizvod:5:2); readln end.

  • PASCAL

    27

    65. Preduzede plada honorarno zaposlene sa X dinara po satu.Napisati program koji za n radnika uitava ime kao podatak tipa string (ne dui od 20 znakova) broj sati provedenih na radu i za svakog radnika ispisuje njegovo ime,bruto zaradu,iznos poreza (16% bruto zarade),iznos doprinosa (26% bruto zarade) i neto zaradu (bruto zarada umanjena za porez i doprinos). var cenasata,porez,doprinos,brutozarada,netozarada:integer; n,i,brojsati:integer; imeradnika:string[20]; begin writeln ('unesite broj radnika:'); readln(n); writeln ('unesite cenu za sat rada:'); readln(cenasata); for i:=1 to n do begin writeln ('unesite ime radnika:'); readln(imeradnika); writeln ('koliko je sati radio:'); readln(brojsati); brutozarada:=cenasata*brojsati; porez:=round(brutozarada*0.16); doprinos:=round(brutozarada*0.26); netozarada:=brutozarada-porez-doprinos; writeln('ime':20,'brutozarada':13,'porez':12,'doprinos':12,'netozarada':12); writeln(imeradnika:20,brutozarada:13,porez:12,doprinos:12,netozarada:12); end; readln end. 66. Napisati program kojim se za dato n izraunava faktorijel prirodnog broja n . n!=1*2*3*....*n var fakt,i,n:integer; begin writeln ('Unesite prirodan broj:'); readln(n); fakt:=1; for i:=2 to n do fakt:=fakt*i; writeln(fakt); readln end.

    67. Napisati program kojim se izraunava suma faktorijela s=1!+2!+3!...+n! var fakt,n,i,s:integer; begin writeln ('Unesite broj:'); readln(n); s:=0; fakt:=1; for i:=1 to n do begin fakt:=fakt*i; s:=s+fakt; end; writeln(fakt,' ',s); readln end.

  • PASCAL

    28

    68. Napisati program kojim se izraunava zbir brojeva od 1 do 100 ija je zadnja cifra 9. var s,i:integer; begin s:=0; for i:=1 to 100 do if (i mod 10 = 9 ) then s:=s+i; writeln('Trazeni zbir je:',s:5); readln end.

    69. Napisati program koji proverava da li je uneti broj savren ili nije i ispisuje poruku o tome. Broj je savren ako je jednak sumi svojih delitelja iskljuujudi njega samog. Naprimer 28 je savren broj,jer je: 28=1+2+4+7+14 var n,i,suma,a:integer; begin writeln ('Unesite broj:'); readln(n); suma:=0; for i:=1 to n div 2 do if n mod i =0 then suma:=suma+i; if n=suma then writeln('Broj je savrsen') else writeln('Broj nije savrsen'); readln end.

    69. Napisati program kojim se odredjuju i ispituju svi savreni brojevi od 2 do m.Broj je savren ako je jednak sumi svojih delitelja iskljuujudi njega samog. Naprimer 28 je savren broj,jer je: 28=1+2+4+7+14 var n,m,i,suma:integer; begin writeln ('Unesite broj:'); readln(m); for n:=2 to m do begin suma:=1; for i:=2 to n div 2 do if n mod i = 0 then suma:=suma+i; if suma=n then writeln(n); end; readln

    end.

    70. Napisati program kojim se uitavaju ocene uenika za n predmeta i izraunava njegova prosena ocena. var n,i,x:integer; s:real; begin writeln ('Unesite broj predmeta:'); readln(n); s:=0; for i:=1 to n do begin writeln ('Unesite iz predmeta:',i,'.'); readln(x); s:=s+x; end; writeln('Prosecna ocena je:',s/n:0:2); readln

    end.

  • PASCAL

    29

    71. N predavaa u centru za talente dri predavanje po ceni asa (c).Napisati program kojim se za svakog predavaa uitava koliko je odrao asova u toku meseca i ispisuje njegova zarada.Odrediti i ukupan iznos za isplatu. var cena,zarada,svega:real; n,i,brcasova:integer; begin writeln ('Unesite broj predavaca:'); readln(n); writeln ('Unesite cenu po casu predavanja:'); readln(cena); svega:=0; writeln('Unesite za svakog predavaca broj odrzanih casova:'); for i:=1 to n do begin writeln ('Unesite broj odrazanih casova predavaca ',i,'.je:'); readln(brcasova); zarada:=cena*brcasova; writeln('Zarada predavaca:',i,'.je:',zarada:10:2); svega:=svega+zarada; end; writeln('Ukupan iznos za isplatu:',svega:10:2); readln end. 72. Sa tastature se uitavaju temperature za n dana u godini. Napisati program koji de odrediti maksimalnu temperaturu za unete dane i redni broj dana kada je temperatura bila maksimalna. var t,maxt,n,dan,maxtdan:integer; begin writeln ('unesi broj dana za koje je merena temp:'); readln(n); writeln ('unesite temperaturu na dan1:'); readln(maxt); maxtdan:=1; for dan:=2 to n do begin writeln ('unesite temp na dan',dan,':'); readln(t); if maxt

  • PASCAL

    30

    73. Napisati program kojim se izraava zbir od 1 do n brojeva. var i,n,s:integer; begin writeln ('Unesite neki broj:'); readln(n); s:=0; for i:=1 to n do begin s:=s+i; end; writeln(s); readln end.

    74. Napisati program kojim se izraunava zbir od 1 do n ali samo parnih brojeva. var i,n,s:integer; begin writeln ('Unesite broj:'); readln(n); s:=0; for i:=1 to n do if i mod 2 = 0 then s:=s+i; writeln (s); readln end.

    75. Napisati program za proveru tanosti matematikih formula za izraunavanje sume. 1 + 3 + 5 ++ (2n-1)=n2

    var n,i,s,r:integer; begin writeln ('Unesite n:'); readln(n); s:=0; for i:=1 to n do s:=s+2*i-1; r:=n*n; writeln('s=',s,'r=',r); if s=r then writeln('Vazi jednakost') else writeln('Ne vazi jednakost'); readln end.

    76. Napisati program za proveru tanosti matematikih formula za izraunavanje sume. 12 + 32 + 52 ++ (2n-1)2 = n*(4n2-1)/3 var n,i,s:integer; r:real; begin writeln ('Unesite n:'); readln(n); s:=0; for i:=1 to n do s:=s+sqr(2*i-1); r:=n*(4*sqr(n)-1) / 3; writeln('s=',s,'r=',r:5:2); if s=r then writeln('Vazi jednakost') else writeln('Ne vazi jednakost'); readln end.

  • PASCAL

    31

    77. Napisati program kojim se izraunava zbir prvih n lanova reda:

    1+

    +

    +

    +

    var n,i:integer; s:real; begin writeln ('Unesite broj clanova:'); readln(n); s:=0; for i:=1 to n do s:=s+1/i; writeln('s=',s:10:2); readln end.

    78. Napisati program koji se izraunava zbir prvih n lanova reda.

    var n,i:integer; s:real; begin writeln ('Unesite broj clanova sume:'); readln(n); s:=0; for i:=1 to n do s:=s+1/(2*i-1); writeln('s=',s:10:2); readln end.

    79. Napisati program kojim se izraunava zbir prvih n lanova reda.

    var n,i,z:integer; s:real; begin writeln ('Unesite broj clanova sume:'); readln(n); s:=0; z:=1; for i:=1 to n do begin s:=s+z/(2*i-1); z:=-z; end; writeln('s=',s:10:2); readln end.

    80. Napisati program kojim se rauna stepen broja dva od prvog stepena do n-tog stepena. var n,i:integer; p:longint; Begin writeln ('Unesite n:'); readln(n); p:=1; for i:=1 to n do begin writeln(i:10,p:10); p:=p*2; end; readln end.

  • PASCAL

    32

    81. Napisati program kojim se izraunava suma: S = 2 + 22 + 23 + + 2n

    var n,i:integer; p,s:longint; begin writeln ('Unesite n:'); readln(n); p:=1; s:=0; for i:=1 to n do begin p:=p*2; s:=s+p; end; writeln('s=',s); readln end.

    82. Napisati program kojim se za realno x izraunava suma: S = x + x2 + x3 + + xn

    var n,i:integer; p,s,x:real; begin writeln ('Unesite n:'); readln(n); writeln ('Unesite x:'); readln(x); p:=1; s:=0; for i:=1 to n do begin p:=p*x; s:=s+p; end; writeln('s=',s:0:2); readln end.

    82. Napisati program kojim se za realno x izraunava suma: S = x + 2x2 + 3x3 + + nxn

    var n,i:integer; p,s,x:real; begin writeln ('Unesite n:'); readln(n); writeln ('Unesite x:'); readln(x); p:=1; s:=0; for i:=1 to n do begin p:=p*x; s:=s+i*p; end; writeln('s=',s:0:2); readln end.

    83. Napisati program kojim se za realno x izraunava suma:

    var n,i:integer; p,s,x:real; begin writeln ('Unesite n:'); readln(n); writeln ('Unesite x:'); readln(x); p:=1; s:=1; for i:=1 to n do begin p:=p*x; s:=s+1/p; end; writeln('s=',s:0:2); readln end.

  • PASCAL

    33

    (

    ) (

    ) (

    ) (

    )

    84. . Napisati program kojim se izraunava proizvod:

    var i,n,q:integer; p:real; begin writeln ('Unesite n:'); readln(n); q:=1; p:=1; for i:=2 to n do begin q:=q*i; p:=p*(1+1/q); end; writeln('p=',p:0:2); readln end.

    (

    ) (

    ) (

    ) (

    )

    85. Napisati program kojim se izraunava proizvod:

    var i,n:integer; p:real; begin writeln ('Unesite n:'); readln(n); p:=1; for i:=2 to n+1 do p:=p*(1-1/i); writeln('p=',p:0:2); readln end.

    86. Napisati program kojim se za dati prirodan broj n izraunava:

    var i,n,fakt:integer; s,q:real; begin writeln ('Unesite n:'); readln(n); s:=0; q:=0; fakt:=1; for i:=1 to n do begin fakt:=fakt*i; q:=q+1/(i+1); s:=s+fakt/q; end; writeln('s=',s:10:2); readln end.

    87. Napisati program kojim se za dati prirodan broj n izraunava: S = 3! 6! + 9! +(-1)n+1(3n)! var i,n,s,z:integer; begin writeln ('Unesite n:'); readln(n); s:=0; z:=-1; for i:=1 to n do begin z:=-z*3*i*(3*i-1)*(3*i-2); s:=s+z; end; writeln('s=',s:10); readln end.

  • PASCAL

    34

    88. Dat je slededi niz: S = sin(x) + sin2(x) + sin3(x) + + sinn(x) Napisati program koji rauna zbir ako se sa tastature unose n i broj x: var zbir,pro,x:real; n,i:integer; begin writeln ('Unesite zadati broj n:'); readln(n); writeln ('Unesite broj x:'); readln(x); zbir:=0; pro:=1; for i:=1 to n do begin pro:=pro*sin(x); zbir:=zbir+pro; end; writeln('Trazeni zbir niza je:',zbir:8:5); readln end.

    89. Napisati program kojim se,ako su dati prirodan broj n i realan broj x izraunava. S = cos(x) + cos(x2) + + cos(xn) var i,n:integer; s,p,x:real; begin writeln ('Ucitaj n:'); readln(n); writeln ('Ucitaj x:'); readln(x); s:=0; p:=1; for i:=1 to n do begin p:=p*x; s:=s+cos(p); end; writeln('s=',s:10:2); readln end.

    90. Napisati program kojim se,ako su dati prirodan broj n i realan broj x izraunava. S = sin(x) + sin(sin(x)) + + sin(sin(sin(x))) var i,n:integer; s,p,x:real; begin writeln ('Ucitaj n:'); readln(n); writeln ('Ucitaj x:'); readln(x); s:=0; p:=x; for i:=1 to n do begin p:=sin(p); s:=s+p; end; writeln('s=',s:10:4); readln end.

    91. Napisati program kojim se izraunava proizvod prvih n faktora izraza:

    var i,n:integer; p:real; begin writeln ('Unesite n:'); readln(n); p:=1; for i:=1 to n do p:=p*(2*i-1)/(2*i); writeln('p=',p:0:2); readln end.

  • PASCAL

    35

    ( )

    92. Priblina vrednost broja moe se odrediti pomodu formule 4Pk gde je:

    var pi,p:real; k,i,znak:integer; begin writeln ('Unsite k:'); readln(k); p:=0.0; znak:=1; for i:=1 to k do begin pi:=pi+znak/(2*i-1); znak:=-znak; end; pi:=4*pi; writeln('pi=',pi:10:8); readln end.

    93. Napisati program koji od korisnika uitava realan broj x i ceo broj n2 i potom rauna i tampa vrednost.

    var x,stepen,brojilac:real; i,n,imenilac:integer; begin writeln ('Unesite x:'); readln(x); writeln ('Unesite n:'); readln(n); imenilac:=n*(n+1) div 2; brojilac:=1;stepen:=1; for i:=1 to n do begin stepen:=stepen*x; brojilac:=brojilac+i*stepen; end; writeln(brojilac/imenilac:10:2); readln; end.

    94. Napisati program koji od korisnika uitava ceo broj n 3, a potom n realnih brojeva i utvrdjuje i tampa najvedi od tih brojeva kao i koliko se on puta pojavio. Npr za n=5 1,13 ; 2,56 ; 2.56; 3 ; 7,2; ispisuje da je najvedi 7,2 i da se pojavio jednom.

    var n,i,br:integer; a,max:real; begin writeln ('Unesite n>=3:'); readln(n); if nmax then begin max:=a; br:=1; end else if a = max then br:=br+1; end; writeln('Max je:',max:6:2); writeln('Pojavljuje se ',br,' puta'); readln end.

  • PASCAL

    36

    ( )

    95. Napisati program kojim se za uneto n izraunava slededa suma:

    var i, j, n, b: integer; suma_g, suma_d, suma_s, suma_k: real; begin writeln('Unesite broj N: '); readln(n); suma_s:=0; suma_g:=0; suma_d:=1; for j:=1 to n do begin b:=-1; for i:=1 to j do begin suma_g:=suma_g+i; suma_d:=suma_d*i; b:=b*(-1); end; suma_s:=suma_s+b*suma_g/suma_d; suma_k:=suma_k+suma_s; suma_s:=0; suma_g:=0; suma_d:=1; end; writeln('Suma za uneto N je: ',suma_k:2:3); readln end.

  • PASCAL

    37

    96. Napisati program kojim se za uneto n izraunava slededi proizvod:

    S 12 234 .....N (N 1) .... (2N)

    var i, j, n, k: integer; suma_1, suma_k: real; begin writeln('Unesite broj N: '); readln(n); suma_1:=1; for j:=1 to n do begin k:=2*j;

    suma_1:=1; fo i:=j to k do suma_1:=suma_1*i; suma_k:=suma_k+suma_1; end; writeln('Suma za uneto N je: ',suma_k:0:0); readln end.

    ( ) ( )

    97. Napisati program kojim se izraunava suma:

    var i j, n: integer; suma_1, suma_k: real; begin writeln('Unesite broj N: '); readln(n); suma_1:=1; for j:=1 to n do begin for i:=j to (j+2) do suma_1:=suma_1*i; suma_k:=suma_k+1/suma_1; suma_1:=1; end; writeln('Suma za uneto N je: ',suma_k:2:3); readln end.

    98. Napisati program kojim se nalazi suma svih trocifrenih brojeva iji je zbir cifara paran broj.

    var j, d, s, i, suma_i, provera: integer; suma: longint; begin suma:=0; suma_i:=0; for i:=100 to 999 do begin j:=i mod 10; s:=i div 100; d:I div 10 mod 10; suma_i:=j+d+s; provera:=suma_i mod 2; if (provera=0) then suma:=suma+i; suma_i:=0; end; writeln('Suma svih trocifrenih brojeva ciji je zbir cifara paran broj je: ', suma); readln end.

    99. Napisati program kojim se tampaju svi etvorocifreni brojevi koji su jednaki proizvodu svojih cifara.

    var j, d, s, h, i, suma: integer; begin writeln('Svi cetvorocifreni brojevi koji su jednaki proizvodu svojih cifara su: '); suma:=1; for i:=100 to 9999 do begin j:=i mod 0; h:=i div 1000; s:=i div 100 mod 10; d:=i div 10 mod 10; suma:=j*d*s*h; if (suma=i) then writeln(i); suma:=1; end; readln end.

  • PASCAL

    38

    100. Napisati program kojim se za uneto n izraunava slededa suma:

    var i, j, n: integer; suma_g, suma_d, suma_k, x: real; begin writeln('Unesite broj N: '); readln(n); writeln('Unesite broj x: '); readln(x); suma_d:=1; suma_g:=1; for j:=1 to ndo begin for i:=1 to j do egin suma_d:=suma_d*x; suma_g:=suma_g*i; end; suma_d:=suma_d+j; suma_k:=suma_k+suma_g/suma_d; suma_d:=1; suma_g:=1; end; writeln('Suma za uneto N je: ',suma_k:2:3); readln

    end.

    101. Napisati program koji od korisnika uitava prirodne brojeve n i k i potom rauna zbir k-tih stepena prvih n prirodnih brojeva tj: 1k + 2k + 3k + + nk var n,k,s,i,j,p:integer; begin writeln('Unesite n i k:'); readln(n,k); s:=0; for i:=1 to n do begin p:=1; for j:=1 to k do begin p:=p*i; end; s:=s+p; end; writeln (s); readln end.

  • PASCAL

    39

    WHILE Ciklus

    Da bi se koristila naredba for neophodno je znati taan broj ponavljanja pre poetka izvravanja petlje. Pored toga, za vreme izvravanja petlje nije mogude menjati poetnu i krajnju vrednost brojake promenljive. Meutim, veoma esto je sluaj da odreeni deo programa elimo ponavljati sve dok je neki uslov ispunjen. Na taj nain iteracije se mogu ponavljati manji ili vedi broj puta u zavisnosti od rezultata izvravanja naredbi unutar petlje. Jedna od naredbi koja omogudava realizaciju ovakvih ciklusa je naredba while. Osnovna karakteristika while petlje je da je to petlja sa preduslovom, to znai da se ispunjenost uslova proverava pre izvravanja svake iteracije. Posledica toga je da je mogude da se naredbe unutar petlje ne izvre ni jednom, ukoliko uslov u startu nije zadovoljen. Naredba while omogudava ponavljanje odreenog dela programa sve dok je navedeni uslov ispunjen. Na poetku svake iteracije proverava se da li je uslov ispunjen, tj. da li je vrednost logikog iskaza tano (true), a zatim, ukoliko je jeste, izvrava se jedna naredba ili blok naredbi navedenih unutar komande while. Nakon izvrenja naredbi unutar while petlje otpoinje nova iteracija i nova provera uslova. U trenutku kada na poetku neke iteracije vrednost logikog izraza postane netano (false), prekida se izvravanje petlje i nastavlja se izvravanje ostatka programa.

    NAPOMENA: While petlja mora biti tako napisana da garantuje da de u konanom broju iteracija navedeni logiki izraz postati netaan (false). Na taj nain obezbeuje se mehanizam izlaska iz petlje nakon konanog broja iteracija. Ukoliko logiki izraz nikada ne bi dobio vrednost false dolo bi do beskonanog broja ponavljanja (tzv. mrtva petlja), odnosno do blokade izvrenja ostatka programa.

  • PASCAL

    40

    Primeri zadataka sa while petljom

    102. Napisati program koji uitani broj n transformie tako da mu se uklanjaju nule sa desne strane. var n:integer; begin writeln ('Unesite broj:'); readln(n); while n mod 10 = 0 do n:=n div 10; writeln('Broj je transformisan u:',n); readln end.

    103. Napisati program koji za dati broj n ispituje da li je stepen broja 3. var n:integer; begin writeln ('Unesite n:'); readln(n); while n mod 3 = 0 do n:=n div 3; if n=1 then writeln('Broj je stepen broja 3') else writeln('Broj nije stepen broja 3'); readln end.

    104. Napisati program za izraunavanje suma s kvadrata parnih i kubova neparnih prirodnih brojeva od n do m. var n,m,i,s:integer; begin writeln ('Unesite n,m:'); readln(n,m); s:=0;i:=n; while i

  • PASCAL

    41

    106. . Napisati program koji broj transformie na proste faktore. Na primer, za 15 ispisade 5 3. var broj,faktor:integer; begin writeln ('Unesite broj:'); readln(broj); faktor:=2; while faktor

  • PASCAL

    42

    108. drugi nain (sa FOR petljom) var p1,p2,p,i,n:integer; begin writeln('Unesite broj do kojeg racunate fibonacijev niz'); readln(n); p1:=1; p2:=1; p:=0; for i:=3 to n do begin p:=p1+p2; p1:=p2; p2:=p; end; writeln(p); readln end.

    109. Napisati program koji tampa stepene dvojke ne vede od n. var n,y:integer; begin writeln ('Unesite n:'); readln(n); y:=1; while y

  • PASCAL

    43

    112. Odrediti najmanji broj uzastopnih parnih brojeva poevi od 2 ije je suma vede od n. var n,k,a,s:integer; begin writeln ('Unesite n:'); readln(n); s:=0; k:=0; a:=0; while s0 do begin n:=n div 10; k:=k+1; end; writeln('Broj cifara je:',k); readln end.

    114. Napisati program koji za dati prirodan broj n odredjuje sumu cifara broja n. var n,s:integer; begin writeln ('Unesite n:'); readln(n); while n>0 do begin s:=s+n mod 10; n:=n div 10; end; writeln('Suma cifara je:',s-1); readln end.

    115. Napisati program koji za dati prirodan broj n ispituje da li je n palindrom (Broj je palindrom ako je redosled cifara gledano unazad isti kao i gledano unapred , na primer 123321 , 1331, 2442 , 11 itd) var n,s,m:integer; begin writeln ('Unesite n:'); readln(n); m:=n; s:=0; while m>0 do begin s:=s*10+m mod 10; m:=m div 10; end; if s=n then writeln('Broj je palindrom') else writeln('Broj nije palindrom'); readln end.

  • PASCAL

    44

    116. Napisati program kojim se odredjuje najvedi zajedniki delilac prirodnih brojeva m i n. var m,n,r:integer; begin writeln ('Unesite m:'); readln(m); writeln ('Unesite n:'); readln(n); while m mod n 0 do begin r:= m mod n; m:=n; n:=r; end; writeln('Najveci zajednicki delilac je:',n); readln end.

    117. Napisati program kojim se odredjuje maksimalna vrednost u nizu. Za kraj niza unesite nulu. var max,a:integer; begin max:=0; writeln('Unesite niz brojeva.Za kraj unesite nulu.'); writeln ('>'); readln(a); while a0 do begin if a>max then max:=a; writeln ('>'); readln(a); end; writeln('Maksimum je:',Max); readln end.

    118. Napisati program kojim se odredjuje koliko je elemenata u najduoj seriji jednakih . Za kraj unesite nulu.

    var max,k,a,b:integer; begin writeln ('Unesite niz brojeva.Za kraj unesite nulu.'); writeln ('>'); readln(a); writeln ('>'); readln(b); max:=1; k:=1; while b 0 do begin if a=b then begin k:=k+1; if k>Max then max:=k; end else k:=1; a:=b; writeln ('>'); readln(b); end; writeln('Maksimalna serija jednakih ima:',max,' elemenata.'); readln end.

    119. Napisati program kojim se odredjuje koliko je elemenata u najduoj rastudoj seriji elemenata koji se medjusobno razlikuju za 1. Za kraj unesite nulu. var max,k,a,b:integer; begin writeln ('Unesite niz brojeva.Za kraj unesite nulu.'); writeln ('>'); readln(a); write('>'); readln(b); max:=1; k:=1; while b 0 do begin if b-a=1 then begin k:=k+1; if k>Max then max:=k; end else k:=1; a:=b; writeln ('>'); readln(b); end; writeln('Maksimalna serija rastucih ima:',max,' elemenata.'); readln end.

  • PASCAL

    45

    122. Napisati program kojim se u tekstu ije je obeleje kraja '*' odredjuje broj samoglasnika, suglasnika i praznina. Tekst pisati velikim slovima latinice. var simbol : char; brSamoglasnika, brSuglasnika, brPraznina : integer; begin brSamoglasnika := 0; brSuglasnika := 0; brPraznina := 0; writeln('Unesite tekst koji se zavrsava simbolom *: '); read(simbol); while simbol '*' do begin case simbol of 'A','E','I','O','U' : brSamoglasnika := brSamoglasnika + 1; 'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z' : brSuglasnika := brSuglasnika + 1; ' ' : brPraznina := brPraznina + 1; end; read(simbol) end; writeln('Broj samoglasnika je: ', brSamoglasnika); writeln('Broj suglasnika je: ', brSuglasnika); writeln('Broj praznina je: ', brPraznina); readln end.

    120. Napisati program kojim se odredjuje broj jedinica u binarnom zapisu prirodnog broja n. var n,s : integer; begin writeln ('Unesite broj n: '); readln(n); s:=0; while n > 0 do begin s:=s+n mod 2; n:=n div 2; end; writeln('U binarnom zapisu broja ima: ',s,' jedinica'); readln end.

    121. Napisati program za izraunavanje n-tog stepena celog broja a. var a,n,i,stepen:integer; begin writeln ('Unesite a izlozilac:'); readln(a); writeln ('Unesite n-ti stepen:'); readln(n); stepen:=1; i:=1; while i

  • PASCAL

    46

    REPEAT ciklus

    Za razliku od while petlje, naredba repeat omogudava realizaciju ciklusa sa postuslovom. Ciklus sa postuslovom podrazumeva to da se uslov za dalje izvravanje petlje proverava na kraju svake iteracije. Na ovaj nain naredbe unutar petlje de biti izvrene bar jednom, bez obzira na to da li je uslov bio ispunjen pre ulaska u petlju. Naredba repeat omogudava ponavljanje odreenog dela programa sve dok navedeni uslov nije ispunjen. To praktino znai da je (za razliku od while ciklusa) navedeni uslov ustvari "uslov za izlazak iz petlje". U sluaju repeat petlje, izvrava se jedna naredba ili blok naredbi navedenih unutar komande repeat. Nakon izvrenja ovih naredbi vri se provera uslova navedenog iza rezervisane rei until. Ukoliko je vrednost logikog izraza netano (false), krede se u izvravanje sledede iteracije. U suprotnom prekida se izvravanje petlje i nastavlja se izvravanje ostatka programa. U sluaju repeat naredbe, rezervisane rei repeat i until istovremeno predstavljaju I graninike petlje, tako da je upotreba rezervisanih rei begin i end za oznaavanje bloka naredbi nepotrebna.

    NAPOMENA: Repeat petlja mora biti tako napisana da garantuje da de u konanom broju iteracija navedeni logiki izraz postati taan (true). Na taj nain obezbeuje se mehanizam izlaska iz petlje nakon konanog broja iteracija. Ukoliko logiki izraz nikada ne bi dobio vrednost true dolo bi do beskonanog broja ponavljanja (tzv. mrtva petlja), odnosno do blokade izvrenja ostatka programa.

  • PASCAL

    47

    Primeri zadataka sa REPEAT ciklusom

    123. Napisati program kojim se tampaju svi stepeni dvojke,ne vedi od unete vrednosti promenljive granica,koja je veda od 2. var stepen,granica:integer; begin writeln ('Unesite granicu:'); readln(granica); stepen:=2; repeat writeln(stepen); stepen:=stepen*2; until stepen>granica ; readln end.

    124. Napisati program kojim se od datog prirodnog broja n formira broj sa istim ciframa,ali u inverznom poretku. var n,inverz:integer; begin writeln ('Unesite n:'); readln(n); inverz:=0; repeat inverz:=inverz*10+n mod 10; n:=n div 10 ; until n=0; writeln('Inverzan broj je ',inverz); readln end.

    125. Napisati program koji, koridenjem repeat naredbe,odredjuje najmanji broj parnih brojeva od 2 ija je suma veda od R. var s,a,k,r:integer; begin writeln ('Unesite R:'); readln(r); s:=0; a:=0; k:=0; repeat a:=a+2; s:=s+a; k:=k+1; until s>r; writeln ('K=',k); readln end.

    ( )

    126. Priblina vrednost broja moe se odrediti pomodu formule : 4Pk gde je:

    var clan,suma,eps:real; znak,i:integer; begin writeln ('Unesite eps:'); readln(eps); znak:=-1; {*promenljiva kontrolose promenu znaka clana sume*} clan:=1.0; {*prvi clan suma*} suma:=1.0; {*sumu uzima vrednost prvog clana*} i:=1; repeat clan:=znak/(2*i+1); {*tekuci clan sume*} suma:=suma+clan; {*uvecavanjem sume za tekuci clan*} znak:=-znak; i:=i+1; until abs(clan)

  • PASCAL

    48

    Nizovi array

    Nizovi u programskom jeziku Pascal predstavljaju nain da se efektivno radi sa velikim brojem promenljivih istog tipa. Na primer, problemi koji zahtevaju da se istovremeno obrauje 10000 brojeva bi se veoma teko mogli realizovati tako to bi se deklarisalo 10000 razliitih promenljivih i onda radilo sa njima. ARRAY je struktura podataka koja se sastoji od skupa elemenata istog tipa. Deklaracija varijable ovoga tipa vri se na slededi nain: VAR ime niza : ARRAY[v1..v2] OF T1; gde je: v1..v2 - interval indeksa s time da je v1 donja a v2 gornja granica indeksa; kao indeks moe se pojaviti bilo koji prosti tipovi osim real T1 - tip elemenata u nizu koji moe biti bilo koji tip Evo primera promenljive nizovnog tipa: Var A : array [1 .. 10000] of integer; ovde ime A oznaava sloenu promenljivu koja se sastoji od 10000 elemenata , a svaki od tih elemenata moe da primi jedan ceo broj. Pojedinani elementi niza se ponaaju kao obine promeniljive tipa integer, a oznaavaju se ovako: A[1], A[2], . . . , A[10000]. Na primer, A*3+ := 5; znai da je tredem lanu niza dodeljena vrednost 5. Ili primer deklaracije niza merenih temperatura u toku jednog meseca: VAR temp : ARRAY [1..31] OF real;

    indeks [1] [2] [3] [4] [5] [6] [29] [30] [31]

    temp -3.2 5.0 0.0 11.4 7.5 -1.8 9.3 6.5 2.8

    Do svakog elementa u nizu moemo dodi koridenjem imena niza i pozicije - indeksa tog elementa u nizu: temp[1], temp[2], temp[3] temp[i], temp[i+1], temp[i+j] Takve promenljive zovemo indeksirane promenljive, a njih koristimo kao i bilo koju drugu pojedinanu promenljivu. Evo nekoliko primera: 1) elimo li nekom elementu niza pridruiti odreenu vrednost, to demo uiniti ovako: temp[4] := 11.4 2) elimo li estom elementu niza temp uitati vrednost preko tastature Read (temp[6]) ; ili Write (abs(temp[2+)) de ispisati apsolutnu vrednost drugog lana niza; Na isti nain koristimo ostale naredbe, operacije i funkcije nad pojedinim elementima niza. Iako u deklaraciji moramo odrediti najvedu duinu niza i njegovu dimenziju, u obradi ne moramo koristiti sve njegove elemente, nego samo odreeni potrebni deo.Vrednosti elemenata niza u poetku nisu definisane. Ukoliko elimo uneti vrednosti za sve ili vedinu elemenata niza, to inimo unutar naredbe za ponavljanje. Isti sluaj je sa ispisivanjem vrednosti pojedinih elemenata niza.

  • PASCAL

    49

    Primeri zadataka sa nizovima - ARRAY

    129. Napisati program kojim se izraunava maksimalna vrednost niza x od n elemenata (n50). var x:array[1..50] of real; max:real; i,n:integer; begin writeln('unesite broj elemenata niza,ne veci od 50:'); readln(n); writeln('unesite elemente niza->'); for i:=1 to n do begin

    writeln('unesi x[',i,']='); readln(x[i]); end; max:=x[1]; for i:=2 to n do if max

  • PASCAL

    50

    130. Napisati program koji od korisnika uitava ceo broj n, 1 n 5000 , potom n realnih brojeva i odredjuje koliko njih je strogo vede od proseka svih uitanih realnih brojeva. var n,i,k:integer; suma,prosek:real; a:array[1..5000] of real; begin writeln('Unesite n:'); readln(n); if (n5000) then writeln('n mora biti izmedju 1 i 5000') else begin writeln('Unesite ',n,' brojeva:'); for i:=1 to n do readln(a[i]); suma:=0.0; for i:=1 to n do suma:=suma+a[i]; prosek:=suma/n; k:=0; for i:=1 to n do if a[i] > prosek then k:=k+1; writeln('Ima ih:',k); end; readln end.

    131. Dat je prirodan broj N.Napisati program koji de generisati i odtampati niz cifara broja N, poevi od cifre najmanje teine. (Primer:N=4235,NIZC=[4,2,3,5] var n:longint; k,i:integer; c:array [1..10] of integer; begin writeln('Unesite n:'); readln(n); if n0 do begin k:=k+1; c[k]:=n mod 10; n:=n div 10; end; for i:= 1 downto 1 do write(',',c[i]); writeln(']'); end; readln end.

  • PASCAL

    51

    132. Napisati program koji unesene brojeve sortira u rastudem redosledu. var x :array[1..50] of integer; l, i, j, n, p : integer; begin writeln('Unesite broj clanova niza :'); readln(n); writeln('unesite clanove niza'); for l :=1 to n do Begin writeln('x[',l,']= '); readln(x[l]); for i:= 1 to l-1 do begin for j:=i+1 to l do if x[i] > x[j] then begin p :=x[i]; x[i] :=x[j]; x[j] :=p end; end; end; writeln('Sortirani niz'); for i :=1 to n do writeln('x[',i,']= ',x[i]); readln end.

    133. Napisati program za odreivanje najmanjeg lana niza a*i+,i=1,30 i njegovog rednog mesta u nizu.

    var a: array[1..30] of real; i, d, min_i: integer; min: real; begin writeln('Unesite duzinu niza: '); readln(d); while ((d>=0) and (d=a[i]) then begin min:=a[i]; min_i:=i; end; writeln('Najmanji element niza a je: ', min:2:3,' i on je ', min_i,' element.'); writeln('Unesite duzinu niza: '); readln(d); end; readln end.

  • PASCAL

    52

    134. . Sastaviti program za odreivanje najmanjeg lana niza iji su indeksi neparni i najvedeg lana niza iji su indeksi parni.

    var a: array[1..30] of real; i, d, j, min_i, max_i: integer; min, max: real; begin writeln('Unesite duzinu niza: '); readln(d); while ((d>=0) and (d=a[i]) then begin min:=a[i]; min_i:=i; end; j:=j+1; end; max_i:=2; max:=a[2]; j:=2; for i:=j to d do begin if (max=0) and (n

  • PASCAL

    53

    136. . Napisati program kojim se elementi niza a*1+, a*2+,...,a*n+ premetaju u inverzni poredak.

    var a: array[1..30] of real; i, j, n: integer; p: real; begin writeln('Unesite duzinu niza: '); readln(n); while ((n>=0) and (n

  • PASCAL

    54

    138. Napisati program za odreivanje i prikazivanje dva najveda elementa niza A*i+.

    var a: array[1..30] of real; g: array[1..30] of real; i, d: integer; max_1, max_2, p: real; begin writeln('Unesite duzinu niza: '); readln(d); while ((d>=0) and (d

  • PASCAL

    55

    140. Neka su data dva niza xx i yy od po pet lanova. Napii program kojim se rauna ukupan broj parova nizova koji na istom indeksu i imaju jednake elemente. var xx, yy :array[1..5] of real; i, br: integer; begin for i := 1 to 5 do begin writeln('Unesi - ',i:3,' clan niza xx : '); readln(xx[i]) end; for i := 1 to 5 do begin writeln('Unesi - ',i:3,' clan niza yy : '); readln(yy[i]) end; br := 0; for i := 1 to 5 do if (xx[i] = yy[i]) then br := br+1; writeln('Trazeni broj parova je: ',br:5); readln end

    141. Neka je dat niza xx od 5 elemenata. Napii program kojim se formira niz yy od elemanata niza xx koji su parni. var xx, yy : array[1..5] of integer; i, j: integer; begin for i := 1 to 5 do begin writeln('Unesi - ',i:3,' clan niza xx : '); readln(xx[i]) end; j := 1; for i := 1 to 5 do if (xx[i] mod 2 = 0) then begin yy[j] := xx[i]; j :=j+1 end; writeln('Novodobijeni niz je:'); for i := 1 to j-1 do writeln(yy[i]); readln end.

  • PASCAL

    56

    142. . Ispred blagajne je poreano n ljudi sa svojim visinama h [1], h [2], ..., h [n] u tom redosledu. Napisati program koji odreuje broj ljudi koje vidi blagajnik sa poetka reda. Na primer, za ljude sa visinama 155, 170, 165, 180, 175, 195, blagajnik vidi prvog, drugog, etvrtog i estog oveka odgovor je 4. var h:array[1..100] of integer; i,n,maxv,brvid: integer; begin writeln ('Unesi broj ljudi: '); readln(n); writeln('Unesi visine ljudi:'); for i:= 1 to n do readln(h[i]); brvid := 1; maxv := h[1]; for i := 2 to n do if h[i] >= maxv then begin brvid := brvid + 1; maxv := h[i]; end; writeln('Broj ljudi koje vidi blagajnik je: ', brvid); readln end.

    143. Napisati program koji odreuje indeks i vrednost prvog lana u nizu koji je najblii srednjoj vrednosti niza. var a: array[1..10] of integer; i,n,s,ind,vr: integer; sv,razlika: real; begin writeln('koliko elemenata ima niz ?'); readln(n); s := 0; writeln('unos niza'); for i:= 1 to n do begin writeln ('unesi ', i , '.element: '); readln(a[i]); s := s + a[i]; end; sv := s/n; ind := 1; vr := a[1]; razlika := abs(sv - a[1]); for i:=2 to n do if razlika > abs(sv - a[i]) then begin ind := i; vr := a[i]; razlika := abs(sv - a[i]); end; writeln('Indeks najblizeg clana: ', ind, ' Vrednost: ', vr); readln end.

  • PASCAL

    57

    144. Napisati program koji de ispitati da li je niz b[1],...,b[k] podniz niza a[1],...,a[n]. Niz b je podniz niza a ukoliko postoji indeks s (1 s n) tako da vai: a*s+=b*1+, a*s+1+=b*2+,..., a*s+k-1]=b[k]. var i, j, n, k: integer; a,b: array[1..100] of integer; begin readln(n); for i := 1 to n do readln(a[i]); readln(k); for i := 1 to k do readln(b[i]); i:=1; j:=1; while (i

  • PASCAL

    58

    146. Uitati lanove niza. Izraunati i ispisati sumu parnih i neparnih lanova niza odvojeno. Const n=15; var i : integer; x : array [1..15] of integer; s,s1: longint; begin writeln('upisati clanove niza: '); for i := 1 to n do begin writeln (i,' --> '); readln(x[i]); end; s:=0; s1:=0; for i:=1 to n do begin if x[i] mod 2 = 0 then s:= s + x[i]; if x[i] mod 2 0 then s1:= s1 + x[i]; end; writeln('suma parnih clanova niza: ',s); writeln('suma neparnih clanova niza: ',s1); readln end.

    147. Uitati lanove niza. Izraunati i ispisati broj lanova niza vedih od aritmetike sredine i njihovu sumu. Const n=5; var i, s, br : integer; as : real; x : array [1..5] of integer; begin writeln('suma i broj clanova vecih od aritmeticke sredina clanova niza'); for i := 1 to n do begin writeln (i,' --> '); readln(x[i]); end; s :=0; br :=0; for i := 1 to n do {izlaz} begin s := s + x[i]; br:=br+1; end; as := s / br; s :=0; br :=0; writeln('aritmeticka sredina = ', as); for i := 1 to n do {izlaz} if x[i] > as then begin s := s + x[i]; br:=br+1; end; writeln('suma clanova vecih od as = ', s, ' broj clanova vecih od as = ', br); readln end.

  • PASCAL

    59

    148. Izraunati proizvod pozitivnih lanova niza deljivih sa 4. Const n=50; var i, br : integer; x : array [1..50] of integer; p : real; begin writeln('proizvod pozitivnih lanova niza djeljivih sa 4'); for i := 1 to n do begin writeln (i,' --> '); readln(x[i]); end; p :=1; for i:=1 to n do if (x[i]>0) and (x[i] mod 4 = 0) then p:=p*x[i]; writeln('proizvod = ' ,p); readln end.

    149. Uitati lanove niza. Mnoiti lanove niza sve dok je proizvod manji od 541. Const n=50; var i, br : integer; x : array [1..50] of integer; p : real; begin writeln('mnoiti lanove niza sve dok je proizvod manja od 541'); for i := 1 to n do begin writeln (i,' --> '); readln(x[i]); end; p :=1; i:=1; br:=0; while (p * x[i] < 541) or br>n do begin p:=p*x[i]; br:=br + 1; i:=i+1; end; writeln('proizvod = ' ,p); readln end.

  • PASCAL

    60

    150. Uitati niz od 20 brojeva i ispisati najvedi i najmanji broj u nizu. Const n=20; var i, tmax, tmin : integer; x : array [1..20] of integer; begin writeln('najveci clan niza'); for i := 1 to n do begin writeln (i,' --> '); readln(x[i]); end; tmax := x[1]; tmin := x[1]; for i := 2 to n do begin if tmax < x[i] then tmax := x[i]; if tmin > x[i] then tmin := x[i]; end; writeln('najveci clan niza ',tmax); writeln('najmanji clan niza ', tmin); readln end.

    151. Uitati niz X od n lanova. Nadi maksimum od lanova sa parnim indeksima. Const n=5; var i, tmax : integer; x : array [1..5] of integer; begin writeln('veci od prvog clana niza'); for i := 1 to n do begin writeln (i,' --> '); readln(x[i]); end; tmax := x[2]; for i := 4 to n do if (tmax < x[i]) and (i mod 2 = 0) then tmax := x[i]; writeln('najveci clan niza s parnim indeksima ',tmax); readln end.

  • PASCAL

    61

    152. Uitati niz X od n lanova. Nadi minimum i maksimum od lanova sa neparnim indeksima. Const n=5; var i, tmin, tmax : integer; x : array [1..n] of integer; begin writeln('veci od prvog clana niza'); for i := 1 to n do begin writeln(i,' --> '); readln(x[i]); end; tmin := x[1]; tmax := x[1]; for i := 3 to n do begin if (tmin > x[i]) and (i mod 2 = 1) then tmin := x[i]; if (tmax < x[i]) and (i mod 2 = 1) then tmax := x[i]; end; writeln('najmanji clan niza s neparnim indeksima ', tmin); writeln('najveci clan niza s neparnim indeksima ', tmax); readln end.

    153. Uitati lanove niza. Ispisati: pozitivne, nule pa negativne lanove niza. const n = 5; var i, j : integer; a, b : array [1..n] of integer; begin writeln('ulazniza'); for i := 1 to n do begin writeln(i,' --> '); readln(a[i]); end; j := 1; for i := 1 to n do if a[i] > 0 then begin b[j] := a[i]; j := j + 1; end; for i := 1 to n do if a[i] = 0 then begin b[j] := a[i]; j := j + 1; end; for i := 1 to n do if a[i] < 0 then begin b[j] := a[i]; j := j + 1; end; for i := 1 to n do {izlaz} writeln('a[',i,'] = ',a[i]); for i := 1 to n do writeln('b[',i,'] = ',b[i]); readln end.

  • PASCAL

    62

    Viedimenzionalni nizovi MATRICE

    Ako se radi o velikom broju promenljivih praktino je da se one rasporede po vrstama i kolonama. Tada

    kaemo da te promenljive formiraju dvodimenzionalan niz, matricu, odnosno tabelu. Sve promenljive

    imaju zajedniko ime, a razlikuju se po mestu u vrsti i koloni. Npr. A*2,3+ znai da je promenljiva sa

    imenom a u drugom redu i tredoj koloni.

    Brojevi aij su elementi dvodimenzionalnog niza, gdje je i indeks broja vrste, a j indeks broja kolone.

    Ako je mn pravougaoni niz

    m=n kvadratni niz.

    Glavna dijagonala Elementi glavne dijagonale imaju iste indekse reda i kolone (i=j), Iznad glavne dijagonale je indeks reda manji od indeksa kolone, a ispod glavne dijagonale je indeks reda vedi glavne dijagonale.

    Sporedna dijagonala Suma indeksa sporedne dijagonale je veda za 1 od dimenzije kvadratne matrice-dvodimenzionalnog niza (i+j = n+1). Indeksi elemenata matrice iznad sporedne dijagonale zadovoljavaju nejednainu i+j > n+1 a elementi ispod sporedne dijagonale zadovoljavaju nejednainu i+j < n+1.

  • PASCAL

    63

    Primeri zadataka sa viedimenzionalnim nizovima- MATRICAMA

    154. Uitati i ispisati dvodimenzionalni niz - matricu 2x3. var i,j : integer; x : array [1..2,1..3] of integer; begin writeln('ulaz i izlaz niza'); for i := 1 to 2 do for j := 1 to 3 do begin writeln ('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to 2 do begin for j := 1 to 3 do writeln (x[i,j]:4); end; readln end.

    155. Uitati i ispisati dvodimenzionalni niz - matricu nxn. Zatim ispisati lanove niza koji su na glavnoj dijagonali. var i, j, n : integer; x : array [1..15,1..15] of integer; begin writeln ('n (kvadratna matrica) ='); readln(n); writeln('ulaz niza'); for i := 1 to n do for j := 1 to n do begin writeln ('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin for j := 1 to n do if i = j then writeln (x[i,j]:4); end; readln end.

  • PASCAL

    64

    156. Uitati i ispisati dvodimenzionalni niz - matricu 4x4. Zatim ispisati lanove niza koji su iznad glavne dijagonale. var i, j, n : integer; x : array [1..15,1..15] of integer; begin writeln ('n (kvadratna matrica) ='); readln(n); writeln('ulaz niza'); for i := 1 to n do for j := 1 to n do begin writeln ('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin for j := 1 to n do if i < j then writeln (x[i,j],' ') else writeln (' '); end; readln end.

    157. Uitati i ispisati dvodimenzionalni niz - kvadratnu matricu nxn. Zatim ispisati lanove niza koji su ispod glavne dijagonale (i>j). var i, j, n : integer; x : array [1..15,1..15] of integer; begin writeln ('n (kvadratna matrica) ='); readln(n); writeln('ulaz niza'); for i := 1 to n do for j := 1 to n do begin writeln ('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin for j := 1 to n do if i > j then writeln (x[i,j],' ') else writeln (' '); end; readln end.

  • PASCAL

    65

    158. Uitati dvodimenzionalni niz. Ispisati parne lanove matrice. var i, j, n,m : integer; x : array [1..15,1..15] of integer; begin writeln('n, m ='); readln(n,m); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin writeln; for j := 1 to n do if x[i,j] mod 2 = 0 then writeln(x[i,j],' '); end; readln end.

    159. Uitati dvodimenzionalni niz. Ispisati lanove matrice koji su deljivi sa 3. var i, j, n, m: integer; x : array [1..15,1..15] of integer; begin writeln('n, m ='); readln(n,m); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin writeln; for j := 1 to m do if x[i,j] mod 3 = 0 then writeln(x[i,j],' ') else writeln(' '); end; readln end.

  • PASCAL

    66

    160. Uitati dvodimenzionalni niz i formirati drugi iji je opti lan: y ij = xij (isti nizovi). Ispisati oba niza. var i,j, n, m : integer; x, y, c : array [1..15,1..15] of integer; begin writeln('n m ='); readln(n,m); writeln('matrica x'); for i := 1 to n do for j := 1 to m do begin write('x[',i,',',j,']='); readln(x[i,j]); end; writeln('matrica y'); for i := 1 to n do for j := 1 to m do y[i,j] := x[i,j]; writeln('izlaz matrica x'); for i := 1 to n do begin for j := 1 to m do writeln(x[i,j]:4); end; writeln('izlaz matrica y'); for i := 1 to n do begin for j := 1 to m do writeln(y[i,j]:4); end; readln end.

    161. Uitati dva dvodimenzionalna niza i formirati tredi iji je opti lan: cij = xij + yij. var i,j, n, m : integer; x, y, c : array [1..15,1..15] of integer; begin

    writeln('n m ='); readln(n,m); writeln('matrica x'); for i := 1 to n do for j := 1 to m do begin

    writeln('x[',i,',',j,']='); readln(x[i,j]); end; writeln('matrica y'); for i := 1 to n do for j := 1 to m do begin

    writeln('y[',i,',',j,']='); readln(y[i,j]); end; for i := 1 to n do for j := 1 to m do c[i,j] := x[i,j] + y[i,j]; writeln('izlaz matrica x'); for i := 1 to n do begin for j := 1 to m do

    writeln(x[i,j]:4); end; writeln('izlaz matrica y'); for i := 1 to n do begin for j := 1 to m do

    writeln(y[i,j]:4); end; writeln('izlaz matrica c'); for i := 1 to n do begin for j := 1 to m do

    writeln(c[i,j]:4); end; readln end.

  • PASCAL

    67

    162. Uitati dva dvodimenzionalna niza i formirati tredi iji je opti lan: cij = xij + 2yij. var i,j, n, m : integer; x, y, c : array [1..15,1..15] of integer; begin

    writeln('n m ='); readln(n,m); writeln('matrica x'); for i := 1 to n do for j := 1 to m do begin

    writeln('x[',i,',',j,']='); readln(x[i,j]); end; writeln('matrica y'); for i := 1 to n do for j := 1 to m do begin

    writeln('y[',i,',',j,']='); readln(y[i,j]); end; for i := 1 to n do for j := 1 to m do c[i,j] := x[i,j] + 2*y[i,j]; writeln('izlaz matrica x'); for i := 1 to n do begin for j := 1 to m do

    writeln(x[i,j]:4); end; writeln('izlaz matrica y'); for i := 1 to n do begin for j := 1 to m do

    writeln(y[i,j]:4); end; writeln('izlaz matrica c'); for i := 1 to n do begin for j := 1 to m do

    writeln(c[i,j]:4); end; readln end.

    163. Uitiati dvodimenzionalni niz - matricu nxm. Izraunati i ispisati sumu svih elemenata niza A[5,5]. var i,j, n, m, s : integer; x : array [1..15,1..15] of integer; begin write('n m ='); readln(n,m); writeln('ulaz niza'); for i := 1 to n do for j := 1 to m do begin write('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin writeln; for j := 1 to m do writeln(x[i,j]:4); end; s := 0; writeln; for i := 1 to n do for j := 1 to m do s := s + x[i,j]; writeln('suma svih elemenata niza je ', s); readln end.

  • PASCAL

    68

    164. Uitati dvodimenzionalni niz - matricu nxm. Prebrojati i ispisati koliko ima elemenata matrice koju su 1. var i,j, n, m, br : integer; x : array [1..15,1..15] of integer; begin writeln('n m ='); readln(n,m); writeln('ulaz niza'); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin for j := 1 to m do write(x[i,j]:4); end; br := 0; for i := 1 to n do for j := 1 to m do if x[i,j] = 1 then br := br + 1; writeln('broj elemenata u matrici jednakih 1 je ', br); readln end.

    165. Uitati dvodimenzionalni niz - matricu nxm. Izraunati i ispisati aritmetiku sredinu elemenata niza deljivih sa 2 (parni). var i, j, n, m : integer; s, br, as : real; x : array [1..15,1..15] of integer; begin s := 0; br := 0; writeln('n m ='); readln(n,m); writeln('ulaz niza'); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin for j := 1 to m do write(x[i,j]:4); end; for i := 1 to n do for j := 1 to m do if x[i,j] mod 2 = 0 then begin s := s + x[i,j]; br := br + 1; end; if br > 0 then begin as := s/br; writeln('aritmeticka sredina elemenata deljivih sa 2 ', as); end else writeln('nema elementa deljivih sa 2 '); readln end.

  • PASCAL

    69

    166. Uitati dvodimenzionalni niz - matricu nxm. Nadi i ispisati najmanji elemenat matrice X*n,m+. var i,j, n, m, min : integer; x : array [1..15,1..15] of integer; begin write('n m ='); readln(n,m); writeln('ulaz niza'); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; for i := 1 to n do begin writeln; for j := 1 to m do writeln(x[i,j]:4); end; min := x[1,1]; for i := 1 to n do for j := 1 to m do if min > x[i,j] then min := x[i,j]; writeln('najmanji element matrice =', min); readln end.

    167. Uitati dvodimenzionalni niz - matricu nxm. Formirati novi jednodimenzionalni niz ije lanove ine najmanji lanovi polja po redovima. var i,j,n,m: integer; x:array[1..15,1..15] of integer; min:array[1..15] of integer; begin writeln('unesi dimenzije matrice n, m '); readln(n,m); for i:=1 to n do for j:=1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; for i:=1 to n do begin min[i]:=x[i,1]; for j:=1 to m do begin if x[i,j] < min[i] then min[i]:=x[i,j]; end; end; for i:=1 to n do writeln('najmanji clan ',i,'. reda je ',min[i]); readln end.

  • PASCAL

    70

    168. Uitati dvodimenzionalni niz X i formirati drugi dvodimenzionalni niz Y iji je opti lan: y ij = xji (elementi i-tog reda matrice X se razmenjuju sa elementima i-te kolone matrice Y). Ispisati oba niza. var i,j, n, m : integer; x, y, c : array [1..15,1..15] of integer; begin writeln('n m ='); readln(n,m); writeln('matrica x'); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; writeln('matrica y'); for i := 1 to n do for j := 1 to m do y[i,j] := x[i,j]; writeln('izlaz matrica x'); for i := 1 to n do begin for j := 1 to m do writeln(x[i,j]:4); end; writeln('izlaz matrica y'); for i := 1 to n do begin for j := 1 to m do writeln(y[i,j]:4); end; readln end.

    169. Uitati dvodimenzionalni niz i formirati drugi iji je opti lan: y ij = -xij (negativne vrednosti lanova niza). Ispisati oba niza. var i,j, n, m : integer; x, y, c : array [1..15,1..15] of integer; begin writeln('n m ='); readln(n,m); writeln('matrica x'); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; writeln('matrica y'); for i := 1 to n do for j := 1 to m do y[i,j] := -x[i,j]; writeln('izlaz matrica x'); for i := 1 to n do begin for j := 1 to m do writeln(x[i,j]:4); end; writeln('izlaz matrica y'); for i := 1 to n do begin for j := 1 to m do writeln (y[i,j]:4); end; readln end.

  • PASCAL

    71

    170. Uitati dvodimenzionalni niz i formirati drugi iji je opti lan: yij = xij za i+j parno, inae je yij = 2. var i,j, n, m : integer; x, y, c : array [1..15,1..15] of integer; begin writeln('n m ='); readln(n,m); writeln('matrica x'); for i := 1 to n do for j := 1 to m do begin writeln('x[',i,',',j,']='); readln(x[i,j]); end; writeln('matrica y'); for i := 1 to n do for j := 1 to m do if (i+j)=0 then y[i,j] := x[i,j] else y[i,j] :=2; writeln('izlaz matrica x'); for i := 1 to n do {izlaz} begin for j := 1 to m do writeln(x[i,j]:4); writeln; end; writeln('izlaz matrica y'); for i := 1 to n do begin for j := 1 to m do writeln(y[i,j]:4); writeln; end; readln end.

  • PASCAL

    72

    STRINGOVI

    String je sekvenca karaktera. String konstanta moe da ima proizvoljan broj karaktera, ukljuujudi i string bez karaktera. Broj karaktera u stringu se naziva duina stringa. Jedinstveni string koji ne sadri karaktere naziva se prazan string. Stringovi su podrani u svim modernim programskim jezicima. Tipine operacije nad stringovima su: duina (length); uporeenje na jednakost (equality comparison); leksikografsko poreenje (lexicographic comparison); selekcija karaktera u stringu (character selection); selekcija podstringa (substring selection); nadovezivanje (concatenation).

    String konstante u Pascalu su niske znakova okrueni apostrofima. Stringovi koji se sastoje od pojedinanih znakova jesu konstante standardnog tipa Char. Stringovi od N znakova (N>1) jesu konstante tipa definisanog sa:

    packed array [1..N] of Char Takav tip naziva se tip string. Ispravna je dodela vrednosti A := E gde nizovna promenljiva A i izraz E

    imaju bilo koji tip stringa sa istim brojem komponenata. Slino tome, relacioni operatori (= , , , =) mogu se upotrebiti pri uporeivanju bilo koja dva stringa. Ureenost je odreena redosledom

    predeklarisanog tipa Char i podrazumeva da je prvi element (A*1+) najznaajniji u tom poreenju.

  • PASCAL

    73

    Primeri zadataka sa stringovima

    171. Uitati ispisati niz znakova. var i : integer; s : string; begin writeln('unesi string '); readln(s); writeln('string = ', s); readln end.

    172. Uitati niz znakova . Ispisati znak , i redni broj znaka , na osnovu redosleda unoenja. var i : integer; s : string; begin writeln('unesi string '); readln(s); for i := 1 to length(s) do writeln(i, '-ti znak = ', s[i]); readln end.

    173. Uitati niz znakova. Ispisati znak , i redni broj znaka datog stringa unazad. var i : integer; s : string; begin writeln ('unesi string '); readln(s); for i := length(s) downto 1 do writeln(i, '-ti znak = ', s[i]); readln end.

    174. Svaku re uitanog stringa ispisati u novom redu. var i : integer; s : string; begin writeln('unesi string '); readln(s); for i := 1 to length(s) do if ' ' s[i] then writeln(s[i]) else readln end.

  • PASCAL

    74

    175. Prebrojati broj velikih slova u uitanom stringu. var i, br : integer; s : string; begin writeln('unesi string '); readln(s); br := 0; for i := 1 to length(s) do if (('a'

  • PASCAL

    75

    179. Uitati string i prebrojati operatore u stringu (+,-,*,/). var i, br : integer; s : string; begin writeln('unesi string '); readln(s); br := 0; {pocetna vrednost brojaca} for i := 1 to length(s) do begin if '+' = s[i] then br := br + 1; if '-' = s[i] then br := br + 1; if '*' = s[i] then br := br + 1; if '/' = s[i] then br := br + 1; end; writeln('broj operatora u stringu = ', br); readln end.

    180. Uitati string i prebrojati znake interpunkcije u stringu (, , . , ? , !). var i, br : integer; s : string; begin writeln('unesi string '); readln(s); br := 0; for i := 1 to length(s) do begin if '.' = s[i] then br := br + 1; if ',' = s[i] then br := br + 1; if '?' = s[i] then br := br + 1; if '!' = s[i] then br := br + 1; end; writeln('broj znakova interpunkcije = ', br); readln end.