Top Banner
D E L P H I Velja Milanovid 19 Velja Milanovid Primeri aplikacija linijske, razgranate i ciklične strukture Primer 1: Napisati program kojim se menja boja pozadine forme. Na formi postaviti pet dugmeta sa nazivima: crvena, plava, zuta, zelena i normalna. Pritiskom na odgovarajude dugme promeni boju forme. Formi dati naziv Primer1. Slika 17 procedure TForm1.Button1Click(Sender: TObject); begin Form1.Color := clRed; end; procedure TForm1.Button2Click(Sender: TObject); begin Form1.Color := clBlue; end; procedure TForm1.Button3Click(Sender: TObject); begin Form1.Color := clYellow; end; procedure TForm1.Button4Click(Sender: TObject); begin Form1.Color := clGreen; end; procedure TForm1.Button5Click(Sender: TObject); begin Form1.Color := clBtnFace; end; Primer 2 : Kreirati aplikaciju za izvođenje aritmetičkih operacija. Kreirajmo folder Primer1 u koji demo sačuvati naš projekat. Pokrenimo TurboDelphi program i u pozdravnom ekranu odaberimo VCL Forms Application. Promenimo svojstva Name forme u Aritmetika a Caption u Kalkulator. Ako prvo menjamo ime onda se dodeljeno ime automatski upisuje u svojstvo. Dodajmo dva edit polja za unos brojeva i jedno edit polje za ispis rezultata. Svojstva Text prva dva edit polja promenimo u nulu (0), a trede (predviđeno za rezultat) obrišimo tako da bude prazno. Svojstva Name podesimo redom na prvibroj, drugibroj, rezultat. Ako prvo menjamo ime onda se dodeljeno ime automatski upisuje u svojstvo Caption kod komponenti Form, Label, Button ... Dodademo ispred svakog edit polja po jednu labelu čija demo svojstva Caption podesiti tako da poruke ukazuju na funkciju edit polja. svojstva Name podesimo redom na poruka1, poruka2, porukarezultat. 19/76
17

Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

Sep 02, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 19

Velja Milanovid

Primeri aplikacija linijske, razgranate i ciklične strukture

Primer 1: Napisati program kojim se menja boja pozadine forme. Na formi postaviti pet dugmeta sa nazivima: crvena, plava, zuta, zelena i normalna. Pritiskom na odgovarajude dugme promeni boju forme. Formi dati naziv Primer1.

Slika 17

procedure TForm1.Button1Click(Sender: TObject); begin Form1.Color := clRed; end;

procedure TForm1.Button2Click(Sender: TObject); begin Form1.Color := clBlue; end;

procedure TForm1.Button3Click(Sender: TObject); begin Form1.Color := clYellow; end;

procedure TForm1.Button4Click(Sender: TObject); begin Form1.Color := clGreen; end;

procedure TForm1.Button5Click(Sender: TObject); begin Form1.Color := clBtnFace; end;

Primer 2: Kreirati aplikaciju za izvođenje aritmetičkih operacija.

Kreirajmo folder Primer1 u koji demo sačuvati naš projekat. Pokrenimo TurboDelphi program i u pozdravnom ekranu odaberimo VCL Forms Application. Promenimo svojstva Name forme u Aritmetika a Caption u Kalkulator. Ako prvo menjamo ime onda se dodeljeno ime automatski upisuje u svojstvo.

Dodajmo dva edit polja za unos brojeva i jedno edit polje za ispis rezultata. Svojstva Text prva dva edit polja promenimo u nulu (0), a trede (predviđeno za rezultat) obrišimo tako da bude prazno. Svojstva Name podesimo redom na prvibroj, drugibroj, rezultat. Ako prvo menjamo ime onda se dodeljeno ime automatski upisuje u svojstvo Caption kod komponenti Form, Label, Button ...

Dodademo ispred svakog edit polja po jednu labelu čija demo svojstva Caption podesiti tako da poruke ukazuju na funkciju edit polja. svojstva Name podesimo redom na poruka1, poruka2, porukarezultat.

19/76

Page 2: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 20

Velja Milanovid

Dodademo 4 dugmeta (Button) formi za aktiviranje operacija. Svojstva Caption promenimo redom u +, -, *, /. Svojstva Name dugmadi podesimo redom na Zbir, Razlika, Proizvod, Kolicnik. Radni prozor našeg programa de izgledati kao na slici.

Pridružidemo dugmadima odgovarajude događaje. Odaberimo dugme za zbir pa u Inspektoru objekata odaberimo karticu Events. Odaberimo sa liste događaj OnClick tako što pomodu miša kliknemo dva puta u boks desno pored imena događaja. Pojavide se urednik koda.

Slika 18

Ovaj događaj se može vezati za dugme i brže - OnClick je osnovni događaj za komponentu dugme pa smo mogli samo kliknuti dva puta na dugme i pojavio bi se urednik koda sa događajem OnClick. U zaglavlju procedure pojavljuje se ime forme koje smo odabrali sa prefiksom T, zatim iza tačke, ime dugmeta i ime događaja bez prefiksa On. Dodajemo opis promenljivih i naredbe kojima programiramo akciju.

Prevedu se sadržaji edit polja (svojstvo Text) u brojeve, izvrši se operacija nad tim brojevima, dobijeni rezultat se prevede u string (Text) i upiše u svojstvo Text tredeg edit polja (rezultat.Text). Tredoj labeli kojoj smo promenili ime u porukarezultata promenimo svojstvo Caption u odgovarajudu poruku. Slično uradimo sa događajima za razliku i proizvod.

20/76

Page 3: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 21

Velja Milanovid

Za izvođenje operacije deljenja moramo uključiti proveru delioca. Procedura može izgledati.

Ako je delilac različit od nule izvede se operacija. U suprotnom, ispišu se odgovarajude poruke. Iskorišdena su svojstva labele (Font.Color i Caption) i edit polja (Font.Color i Text). Ako je u drugom edit polju upisana nula, i ako se klikne na dugme za količnik, prozor programa de izgledati kao na slici.

21/76

Page 4: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 22

Velja Milanovid

Slika 19

Ispis odgovarajude poruke u slučaju da je delilac jednak nuli, mogao se realizovati i pomodu procedure ShowMessage.

Primer: 3. Kreirati aplikaciju za rešavanje linearne jednačine ax + b = 0.

Podesimo svojstva forme Name u Jednacina a Caption u Linearna jednacina. Dodajmo dva edit polja za unos koeficijenata jednačine i jedno edit polje za ispis rešenja. Svojstva Text prva dva edit polja promenimo u nulu (0), a trede (predviđeno za rezultat) obrišimo tako da bude prazno. Svojstva Name podesimo redom na koefA, koefB, rezX. Za izbor imena se može primenjivati tzv. mađarska notacija po kojoj ime sadrži prefiks koji ukazuje na komponentu kojoj se dodeljuje ime, na primer, imena edit polja mogu imati prefiks Ed, imena labela (oznaka) prefiks Ozn, imena dugmadi prefiks Dgm i slično. Imena edit polja bi u ovoj notaciji mogla biti EdkoefA, EdKoefB, EdrezX. Ovde nije primenjena takva notacija.

22/76

Page 5: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 23

Velja Milanovid

Dodademo jedno dugme za aktiviranje rešavanja jednačine. Svojstvo Caption promenimo u Resi jednacinu, a svojstvo Name promenimo u Resenje. Procedura događaja može izgledati.

Primer:4. Kreirati aplikaciju za rešavanje kvadratne jednačine.

Dodajemo formi tri edit polja za unos koeficijenata jednačine i dva edit polja za rešenja. Svojstva Name su podešena redom na koefA, koefB, koefC, Edx1 i Edx2. Dodajemo jedno dugme za aktiviranje rešavanja. Svojstvo Caption je podešeno na Resi jednacinu. Dodajemo i 7 labela čija su svojstva Caption odgovarajude pratede poruke. Labeli iznad rešenja je promenjeno svojstvo Name u poruka. Kliknimo dva puta na dugme (ime je ostalo Button1) i dopišimo kod.

23/76

Page 6: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 24

Velja Milanovid

Kod ispisa konjugovano-kompleksnih rešenja primenjeno je formatiranje na rešenje x1. Opšti oblik formatiranja je:

%[-][širina_polja][.tačnost]tip

Funkcija Format vrši formatiranje i pretvaranje u string. Formatiranje počinje znakom %,

zatim se može navesti znak - koji znači da de se popunjavanje polja zadate širine vršiti sa leve strane. Tip podataka koji se konvertuje može biti neki od slededih: d - celobrojni podatak, f - realan broj koji se prikazuje sa fiksnim zarezom, n - neoznačen podatak, e - Realan broj se prikazuje u eksponencijalnom obliku, s - string i dr. Izgled radnog prozora aplikacije ako su rešenja konjugovano-kompleksni brojevi dat je na slici.

Slika 20

Realni i imaginarni delovi za x1 su formatirani na dve decimale, a za x2 nisu.

24/76

Page 7: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 25

Velja Milanovid

Primer:5. Kreirati aplikaciju koja de ispisivati vreme sistemskog sata - komponenta Timer.

Komponenta časovnik (Timer) nalazi se u paleti System. Za vreme projektovanja na formi se prikazuje pomodu ikone a za vreme izvršavanja aplikacije se ne vidi. Svojstvo Interval je tipa Integer i određuje koliko de se često generisati događaj OnTimer. Podrazumevana vrednost je 1000 i označava interval od 1 sekunde.

Pokrenimo novi projekat i snimimo ga u folder Casovnik. Promenimo svojstva Name forme u Casovnik a Caption u Digitalni sat. Dodajmo komponentu Timer na formu i jedno dugme. Pošto je časovnik nevizuelna komponenta prikazivanje vremena moramo realizovati preko neke vizuelne komponente. Svojstvo Caption bilo koje komponente možemo iskoristiti za prikaz sata (može i forma). Možemo iskoristiti i svojstvo Text komponente Edit. Promenimo svojstvo Name dugmeta u Sat. Kliknimo dva puta na ikonicu časovnika i između begin i end procedure TCasovnik.Timer1Timer dopišimo naredbu sa slike.

Vreme iz sistemskog sata de biti prikazivano na dugmetu. Podesimo svojstvo forme BorderStyle u bsNone, podesimo veličinu forme na veličinu dugmeta i startujmo aplikaciju (izlazak je sa Alt-F4). Za izlazak iz aplikacije možemo kreirati događaj OnClick za formu. Kliknimo dva puta na formu i upišimo naredbu close. Kada kliknemo na prozor aplikacije prekinude se izvršavanje aplikacije. Mogli smo događaj OnClick za izlazak iz aplikacije vezati i za dugme.

Primer 6: Kreirati aplikaciju kao na slici za unos tri stranice trougla i izračunavanje površine i obima trougla.

Slika 21

procedure TForm1.Button1Click(Sender: TObject); var a,b,c,p,s,o:real; begin a:=StrToFloat(Edit1.Text);

25/76

Page 8: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 26

Velja Milanovid

b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); if ((a+b)>c) and (c>abs(a-b)) then begin s:=(a+b+c)/2; p:=sqrt((s-a)*(s-b)*(s-c)*s) ; o:=a+b+c; Label4.Caption:='Povrsina: '+FloatToStr(p); Label5.Caption:='Obim: '+FloatToStr(o); end else ShowMessage('date duzi ne mogu biti stranice trougla'); end;

Primer 7: Aplikacija koja traži aritmetičku sredinu brojeva od 350 do 600 i sve te brojeve

ispisuje u Memo polju.

Slika 22

procedure TForm1.FormCreate(Sender: TObject); begin form1.Color:=clyellow end;

procedure TForm1.Panel1Click(Sender: TObject); begin panel1.color:=clyellow; showMessage ('izlaz je na dugme na dnu xD'); end;

procedure TForm1.Button1Click(Sender: TObject);

26/76

Page 9: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 27

Velja Milanovid

var i,k,br,s:integer; sr:real; niz:string; begin val (edit3.text,sr,i); memo1.Clear; memo1.Lines.Add('Niz brojeva je sledeci'); memo1.Lines.Add('______________________'); s:=0; br:=0; for k:=350 to 600 do begin if (k mod 3=0) and (k>0) then begin s:=s+k; br:=br+1; str (k:4,niz); memo1.Lines.Add(niz); end; end; sr:=s/br; edit3.text:=format ('%4.2f',[sr]); end; end.

Primer 8: Kreirati aplikaciju, koja korišdenjem Memo komponente, kreira tabelu prevođenja brojeva u intervalu od n do m sa korakom 2 po formuli: F=sqrt(sqr(4.8*9K=112)/2))+23, a zatim izračunava srednju vrednost brojeva koji su parni i pozitivni.

Slika 23

27/76

Page 10: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 28

Velja Milanovid

procedure TForm1.Button1Click(Sender: TObject); var s2,s1,srednja:string; n,m,k,i,S,Br:integer; F,Sr:real; begin Memo2.Clear; Memo2.Lines.Add('BROJ FORMULA'); Memo2.Lines.Add('_________________________'); val(Edit1.Text,n,i); val(Edit2.Text,m,i); S:=0; Br:=0; For k:=n to m do begin F:=sqrt(sqr(4.8*(K+112)/2))+23; if (k mod 2=0) and ( k>0 ) then begin S:=S+k; Br:=Br+1; end; str(K:8,s1); str(F:12:2,s2); Memo2.Lines.Add(s1+s2); end; Sr:=S/Br; srednja:=Format('%6.2f',[sr]); Edit3.Text:=srednja; end;

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char); begin If not(key in['0'..'9','+','-','.']) then key:=#0 end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text:=''; edit2.Text:=''; edit3.Text:='' end; end.

Kontrola unetih podataka

Korektnost unetih podataka u Edit polje se može programski kontrolisati. Jedan od načina jeste kreiranje procedure koja se aktivira pri napuštanju edit polja. Događaj OnExit se aktivira kad god se napusti edit polje i kontrolu unetih podataka možemo realizovati po unosu. Može se iskoristiti i događaj OnChange koji se aktivira kad god se nešto promeni u edit polju. OnChange događaj se može koristiti ako je potrebno kontrolisati unos znak po znak. Događaj OnChange je osnovni događaj za edit komponentu pa se kreiranje OnExit mora uraditi preko Inspektora objekata i kartice Events.

Programska kontrola

Za prevođenje stringa (teksta) u broj može se koristiti procedura Val(s,n,g), pri čemu su: s

podatak tipa string, n broj koji se dobija iz stringa, g podatak tipa Integer i predstavlja grešku prevođenja.Procedura za kontrolu unosa može izgledati ovako:

28/76

Page 11: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 29

Velja Milanovid

Procedura val prevodi string s u broj n. Prevođenje počinje od prvog znaka u stringu i izvodi se do prvog znaka koji ne može udi u zapis broja. Na primer, Val('123.5-2',n,g) dodelide promenljivoj n broj 123.5. Promenljivoj g de biti dodeljena vrednost 6 (pozicija prvog znaka koji nije mogao udi u zapis broja). Ako je g = 0 konverzija je bila uspešna i kompletan string je preveden u broj.

Ako konverzija nije bila uspešna (g<>0) ispiše se odgovarajuda poruka. Pomodu Edit1.SetFocus edit polje se ponovo dovodi u žižu (kursor tastature je u edit polju) i pomodu Edit1.SelectAll markiraju se svi znaci u edit polju (čim se pritisne neki taster briše se sadržaj polja). Edit polje (tekst boks) se ne može napustiti sve dok uneti podatak ne bude broj.

U prethodnim primerima treba dodati kontrolu unosa za sva edit polja koja se koriste za unos brojnih podataka. Za svako takvo edit polje treba kreirati proceduru događaja OnClick i dopisati kod. Ime Edit1 treba zameniti konkretnim imenima koja su dodeljena edit komponentama.

Za kontrolu unosa koeficijenta A kvadratne jednačine bi trebalo proveriti i da li je taj koeficijenat različit od nule. Jedno mogude rešenje je dato slededom procedurom.

29/76

Page 12: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 30

Velja Milanovid

Primer 9: Aplikacija računa zbir kvadrata parnih i kubova neparnih od m do n.

procedure TForm1.FormCreate(Sender: TObject);

begin form1.color:=clgreen end;

procedure TForm1.Panel1Click(Sender: TObject);

begin panel1.Color:=clyellow end;

procedure TForm1.Button1Click(Sender: TObject);

begin edit1.text:='';edit2.text:=''; edit3.text:='';edit4.text:=''; end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin if not (key in['0'..'9','+','-','.']) then key:=#0 end; end.

procedure TForm1.Button2Click(Sender: TObject);

var n,m,k,i:integer; Sp,Sn:real; s:string; begin val (edit1.text,n,i); val (edit2.text,m,i); val (edit3.text,Sp,i); val (edit4.text,Sn,i); Sp:=0; Sn:=0; for k:=n to m do begin if k mod 2=0 then Sp:=Sp+k*k else Sn:=Sn+k*k*k end; edit3.text:=format('%10.2f',[Sp]); edit4.text:=format('%10.2f',[Sn]); end;

procedure TForm1.Edit1Exit(Sender: TObject);

var r:real;i:integer; begin val (edit1.text,r,i); if i<>0 then begin showMessage ('podatak nije dobar'); edit1.SetFocus; edit1.SelectAll; end; end;

30/76

Page 13: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 31

Velja Milanovid

Slika 24

Primer 10: Za dati broj x naći kvadrat ako je manji od 0, u suprotnom naći njegov koren.

procedure TForm1.Panel3Click(Sender: TObject); begin panel3.Color:=clred end;

procedure TForm1.FormCreate(Sender: TObject); begin form1.Color:=clGreen end;

procedure TForm1.Panel1Click(Sender: TObject); begin panel1.Color:=clYellow end;

procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text:=''; edit2.Text:=''; end;

procedure TForm1.Button1Click(Sender: TObject); var n,i:integer; m:real; begin val (edit1.Text,n,i); val (edit2.Text,m,i);

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end; end.

31/76

Page 14: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 32

Velja Milanovid

if n < 0 then m:=n*n else m:=sqrt(n); edit2.Text:= format ('%5.2f',[m]); end;

Slika 25

Primer 11: Data su 4 broja, naći najveću razliku između susednih brojeva.

Slika 26

32/76

Page 15: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 33

Velja Milanovid

procedure TForm1.FormCreate(Sender: TObject); begin form1.Color:=clYellow end;

procedure TForm1.Panel1Click(Sender: TObject); begin panel1.Color:=clGreen end;

procedure TForm1.Button1Click(Sender: TObject); begin edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; end;

procedure TForm1.Button2Click(Sender: TObject); var k,l,m,n,q,w,e,Rmax,max:real; i:integer; begin val (edit1.Text,k,i); val (edit2.Text,l,i); val (edit3.Text,m,i); val (edit4.Text,n,i); val (edit5.text,Rmax,i); q:=abs(l-k); w:=abs(m-l); e:=abs(n-m); q:=max; if w>q then max:=w; if e>q then max:=e; Rmax:=max; edit5.text:=format ('%5.2f',[Rmax]); end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end; end.

33/76

Page 16: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 34

Velja Milanovid

Primer 12: Najvedi od pet brojeva.

Slika 27

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0 end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9','+','-','.']) then key:=#0

34/76

Page 17: Primeri aplikacija linijske, razgranate i ciklične strukture · D E L P H I Velja Milanovid 21

D E L P H I Velja Milanovid 35

Velja Milanovid

end; procedure TForm1.Button1Click(Sender: TObject); var a,b,c,d,e,fin,max:real; i:integer; begin val (edit1.Text,a,i); val (edit2.Text,b,i); val (edit3.Text,c,i); val (edit4.Text,d,i); val (edit5.Text,e,i); val (edit6.Text,fin,i); max:=a; if b>max then max:=b; if c>max then max:=c; if d>max then max:=d; if e>max then max:=e; fin:=max; edit6.text:=format('%5.2f',[fin]); end;

procedure TForm1.Button2Click(Sender: TObject); begin edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; end; end.

35/76