Darbības - sazarojuma operatori Programmēšanas valodas Lekt. M. Lukjanska 21.09.2011
Kāpēc nepieciešami sazarojuma operatori? Nosacījuma jēdziens Darbības - sazarojuma operatori Kopsavilkums Kāpēc nepieciešami sazarojuma operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: Nosacījuma Cikla Pārejas 21.09.2011 Programmēšanas valodas
Kāpēc nepieciešami sazarojuma operatori? Darbības - sazarojuma operatori Kāpēc nepieciešami sazarojuma operatori? Jāmaina programmas gaita atkarībā no uzdotā nosacījuma Noteikti operatori ir jāizpilda vairākas reizes pie noteiktiem nosacījumiem Piemēri: funkciju vērtību aprēķināšana, piemēram, ievaddatu pārbaude ja nepieciešams izpildīt dalīšanu diviem mainīgajiem, jāpārbauda, lai dalītājs nav 0 funkciju vērtību aprēķināšana noteiktam argumentu intervālam utt. 21.09.2011 Programmēšanas valodas
Kāpēc nepieciešami sazarojuma operatori? Nosacījuma jēdziens Darbības - sazarojuma operatori Kopsavilkums Kāpēc nepieciešami sazarojuma operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: Nosacījuma Cikla Pārejas 21.09.2011 Programmēšanas valodas
Iespējamās operācijas: Darbības - sazarojuma operatori Nosacījuma jēdziens Definīcija: nosacījums ir loģiskā (būla) izteiksme, kuras rezultāts ir vērtība: patiess (TRUE) vai aplams (FALSE) Sintakse: <identifikators/izteiksme/vērtība> operācija <identifikators/izteiksme/vērtība> Iespējamās operācijas: loģiskās (būla): AND, OR, NOT, XOR relāciju: =, <, >, <=, >=, <> Piemēri: a > b ((x – 10) > 6) AND (x <= 100) 21.09.2011 Programmēšanas valodas
Nosacījuma jēdziens (turpinājums) Darbības - sazarojuma operatori Nosacījuma jēdziens (turpinājums) Svarīgi: jālieto iekavas ‘()’, jo loģiskajām izteiksmēm ir augstāka prioritāte: 3 > 5 or 50 < 1 3 > (5 or 50) < 1 kam nav semantiskas jēgas, jo loģiskās operācijas strādā ar loģiskajiem mainīgajiem, un rezultātā ir kompilēšanas laika kļūda pareizi: (3 > 5) or (50 < 1) pēc iespējas divu reālo skaitļu salīdzināšanai nelietojiet ‘=’, nelielas noapaļošanas kļūdas dēļ divas ekvivalentas izteiksmes var atšķirties Atkārtojumam: Lekcija 3: Programmēšanas valodu pamati 21.09.2011 Programmēšanas valodas
Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Darbības - sazarojuma operatori Kopsavilkums Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: Nosacījuma Cikla Pārejas 21.09.2011 Programmēšanas valodas
apraksta pamatlīdzekļi Darbības - sazarojuma operatori No 2. lekcijas ‘Ievads par programmēšanas valodām’ Atcerēsimies! Programmēšanas valodas semantikas uzdošana Izteiksmes Ievades/Izvades operatori Piešķires operatori Sazarojuma operatori Bloki Apakšprogrammas Pakotnes Pārejas operators Nosacījuma operatori Cikla operatori Darbību apraksta pamatlīdzekļi Procedūras Funkcijas 21.09.2011 Programmēšanas valodas
Apraksts: Sintakse: Svarīgi: Nosacījuma operators Darbības - sazarojuma operatori Nosacījuma operators Apraksts: vispirms notiek uzdotā nosacījuma analīze: ja nosacījums ir patiess (izpildās), tad sākas bloka izpilde aiz vārda THEN ja nosacījums nav patiess (neizpildās), tad sākas bloka izpilde aiz vārda ELSE, ja ELSE nav definēts, tad turpinās pēc nosacījuma tālāk sekojošu operatoru izpilde Sintakse: IF <nosacījums> THEN <operatoru bloks>; IF <nosacījums> THEN <operatoru bloks1> ELSE <operatoru bloks2>; Svarīgi: sazarošanos var veidot no vairākiem nosacījumiem ja operatoru bloks satur vairāk nekā vienu operatoru, tad tie jāraksta starp operatoru iekavām BEGIN un END 21.09.2011 Programmēšanas valodas
Nosacījuma operatora grafiskais attēls Darbības - sazarojuma operatori Nosacījuma operatora grafiskais attēls Vai nosacījums izpildās? IF (nosacījums) Jā Nē Var nebūt definēts THEN operatoru bloks 1 ELSE operatoru bloks 2 THEN BEGIN operators1; operators2; ... END ELSE BEGIN operators1; operators2; ... END; THEN operators ELSE operators; 21.09.2011 Programmēšanas valodas
Nosacījuma uzdošana Darbība Operācija Piemērs Lielāks > Darbības - sazarojuma operatori Nosacījuma uzdošana Darbība Operācija Piemērs Lielāks > IF a > b THEN y = a - b; Mazāks < IF x < 10 THEN y = x + 10; Lielāks vai vienāds >= IF x >= 0 THEN y = sqrt(x); Mazāks vai vienāds <= IF x <= 0 THEN y = x*(-1); Vienadības pārbaude = IF x = 2 THEN y = x*x; Nevienadība <> IF x <> 3 THEN Writeln (‘Pareiza vērtība’); Loģiskais UN AND IF ((x<>3) AND (x>2)) THEN y = 6*x; Loģiskais VAI OR IF ((x = 2) OR (x = 4)) THEN y = 12/x; Loģiskais NE NOT IF NOT ( x<>3 ) THEN y = 6*x; 21.09.2011 Programmēšanas valodas
1. piemērs: Nosacījuma operators Darbības - sazarojuma operatori 1. piemērs: Nosacījuma operators (*Programma nosaka, vai lietotaja ievaditais skaitlis ir para vai nepara *) PROGRAM L4_P1_Nosacijuma_operators; VAR (* Mainigo deklaresana *) sk : integer; BEGIN (* Pamatbloks *) Write('Ievadiet skaitli: '); Readln(sk); IF sk MOD 2 = 0 THEN Writeln ('Ievadits ir para skaitlis.') ELSE Writeln ('Ievadits ir nepara skaitlis.'); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
2. piemērs: Vairāku nosacījuma operators Darbības - sazarojuma operatori 2. piemērs: Vairāku nosacījuma operators (*Pircejam tiek pieskirta 5% atlaide par pirkuma summu no 100 – 200 Ls, 10% atlaide par pirkuma summu virs 200Ls. Ievadot apmaksajamo summu, programma izvada, vai pieskirta atlaide un cik liela, ka ari, cik ir atlikusi summa apmaksai *) PROGRAM L4_P2_Vairaki_Nosacijuma_operatori; VAR (* Mainigo deklaresana *) summa : real; BEGIN (* Pamatbloks *) Write('Ievadiet pirkuma summu: '); Readln(summa); IF summa < 100 THEN Writeln ('Atlaide nav pieskirta. Jamaksa:', summa:6:2, 'Ls.'); IF (summa >= 100) AND (summa <= 200) THEN Writeln ('Pieskirta 5% atlaide. Jamaksa:', summa*0.95:6:2, 'Ls.'); IF summa > 200 THEN Writeln ('Pieskirta 10% atlaide. Jamaksa:', summa*0.9:6:2, 'Ls.'); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
3. piemērs: Vairāku nosacījuma operators Darbības - sazarojuma operatori 3. piemērs: Vairāku nosacījuma operators (*Pircejam tiek pieskirta 5% atlaide par pirkuma summu no 100 – 200 Ls, 10% atlaide par pirkuma summu virs 200Ls. Ievadot apmaksajamo summu, programma izvada, vai pieskirta atlaide un cik liela, ka ari, cik ir atlikusi summa apmaksai *) PROGRAM L4_P3_Vairaki_Nosacijuma_operatori; VAR (* Mainigo deklaresana *) summa : real; BEGIN (* Pamatbloks *) Write('Ievadiet pirkuma summu: '); Readln(summa); IF summa < 100 THEN Writeln ('Atlaide nav pieskirta. Jamaksa:', summa:6:2, 'Ls.') ELSE IF (summa >= 100) AND (summa <= 200) THEN Writeln ('Pieskirta 5% atlaide. Jamaksa:', summa*0.95:6:2, 'Ls.') ELSE Writeln ('Pieskirta 10% atlaide. Jamaksa:', summa*0.9:6:2, 'Ls.'); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
4. piemērs: Vairāku nosacījuma operators Darbības - sazarojuma operatori 4. piemērs: Vairāku nosacījuma operators (*Pircejam tiek pieskirta 5% atlaide par pirkuma summu no 100 – 200 Ls, 10% atlaide par pirkuma summu virs 200Ls. Ievadot apmaksajamo summu, programma izvada, vai pieskirta atlaide un cik liela, ka ari, cik ir atlikusi summa apmaksai *) PROGRAM L4_P4_Vairaki_Nosacijuma_operatori; VAR (* Mainigo deklaresana *) summa : real; BEGIN (* Pamatbloks *) Write('Ievadiet pirkuma summu: '); Readln(summa); IF summa < 100 THEN Writeln ('Atlaide nav pieskirta. Jamaksa:', summa:6:2, 'Ls.') ELSE IF (summa >= 100) AND (summa <= 200) THEN BEGIN Writeln ('Pieskirta 5% atlaide. Jamaksa:', summa*0.95:6:2, 'Ls.'); Writeln ('APSVEICAM!'); END ELSE Writeln ('Pieskirta 10% atlaide. Jamaksa:', summa*0.9:6:2, 'Ls.'); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Darbības - sazarojuma operatori Kopsavilkums Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: Nosacījuma Cikla Pārejas 21.09.2011 Programmēšanas valodas
Apraksts: Cikla operatori Svarīgi: Darbības - sazarojuma operatori Cikla operatori Apraksts: programmēšanas pamatelementi, kuru rezultātā pie noteikta nosacījuma tiek atkārtoti izpildīts operators vai operatoru bloks Svarīgi: Cikli jāizmanto uzmanīgi, lai neizveidotu situāciju, kad programma nevar iziet no cikla jeb ieciklējas Priekšlaicīgai izejai no cikla var izmantot operatoru BREAK Cikla nosacījums ir loģiska izteiksme, bet cikla uzdošanas mainīgie tiek saukti par cikla mainīgajiem Cikla mainīgie ir jādeklarē deklarēšanas blokā 21.09.2011 Programmēšanas valodas
Cikla operatori (turpinājums) Darbības - sazarojuma operatori Cikla operatori (turpinājums) Veidi Ar nosacījumu Kontrolējamie fiksēts operatoru bloka izpildes skaits iepriekš nezināms operatoru bloka izpildes skaits (ir atkarīgs no nosacījuma) 21.09.2011 Programmēšanas valodas
Apraksts: Sintakse: Svarīgi: Kontrolējamie cikla operatori operatoru bloks tiek izpildīts fiksētu reižu skaitu Sintakse: FOR <cikla mainīgais> := <sākuma vērtība> TO/DOWNTO <beigu vērtība> DO <operatoru bloks>; Svarīgi: sazarošanos var veidot no vairākiem nosacījumiem ja operatoru bloks satur vairāk nekā vienu operatoru, tad tie jāraksta starp operatoru iekavām BEGIN un END 21.09.2011 Programmēšanas valodas
cikla mainīgais := sākuma vērtība TO/DOWNTO beigu vērtība Darbības - sazarojuma operatori Kontrolējamo cikla operatoru grafiskais attēls FOR cikla mainīgais := sākuma vērtība TO/DOWNTO beigu vērtība Nē Jā DO operatoru bloks; DO BEGIN operators1; operators2; ... END; DO operators 21.09.2011 Programmēšanas valodas
5. piemērs: Kontrolējamais cikla operators Cikla operatori 5. piemērs: Kontrolējamais cikla operators PROGRAM L4_P5_Kontrolejams_cikla_operators; VAR (* Mainigo deklaresana *) i : integer; (* Cikla mainigais *) sk : integer; (* Lietotaja ievadam *) BEGIN (* Pamatbloks *) Write('Ievadiet skaitli: '); Readln(sk); FOR i := 1 TO sk DO Writeln ('Cikls izpildaas ', i, '. reizi.'); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
6. piemērs: Kontrolējamais cikla operators Cikla operatori 6. piemērs: Kontrolējamais cikla operators PROGRAM L4_P6_Kontrolejams_cikla_operators; VAR (* Mainigo deklaresana *) i, j : integer; (* cikla mainigie *) sk : integer; (* ievadam no lietotaja *) BEGIN (* Pamatbloks *) Write('Ievadiet skaitli: '); Readln(sk); FOR i := 1 TO sk DO BEGIN Writeln ('Cikls1 izpildaas ', i, '. reizi.'); FOR j := 1 TO sk DO Writeln (' Cikls2 izpildaas ', i, '. reizi.'); END; Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
Cikla operatori Veidi Ar nosacījumu Kontrolējamie Darbības - sazarojuma operatori Cikla operatori Veidi Ar nosacījumu Kontrolējamie fiksēts operatoru bloka izpildes skaits iepriekš nezināms operatoru bloka izpildes skaits (ir atkarīgs no nosacījuma) 21.09.2011 Programmēšanas valodas
Ar nosacījumu Apraksts: Sintakse: Svarīgi: Cikla operatori Ar nosacījumu Apraksts: operatoru bloks tiek izpildīts iepriekš nezināmu reižu skaitu un ir atkarīgs no uzdotā nosacījuma Sintakse: REPEAT <operatoru bloks> UNTIL <nosacījums>; WHILE <nosacījums> DO <operatoru bloks>; Svarīgi: REPEAT .. UNTIL konstrukcija (turpina, kamēr nosacījums nepatiess ...) vispirms izpilda operatoru bloku un pēc tam pārbauda nosacījumu ja nosacījums ir nepatiess, tad cikls tiek turpināts cikla mainīgā vērtība ir jāizmaina operatoru blokā, pretējā gadījumā cikls izpildīsies bezgalīgi WHILE .. DO konstrukcija (kamēr nosacījums patiess, turpina) vispirms pārbauda nosacījumu un pēc tam izpilda operatoru bloku ja nosacījums ir patiess, tad cikls tiek turpināts ja jau no sākuma nosacījums ir nepatiess, tad operatoru bloks netiek izpildīts vispār cikla mainīgajam jāpiešķir vērtība pirms cikla izpildes, un tā jāizmaina cikla izpildes laikā – pretējā gadījumā cikls izpildīsies bezgalīgi (ieciklosies) 21.09.2011 Programmēšanas valodas
Ar nosacījumu grafiskais attēls Cikla operatori Ar nosacījumu grafiskais attēls WHILE (nosacījums) REPEAT operatoru bloks Jā Nē UNTIL (nosacījums) DO operatoru bloks Jā Nē 21.09.2011 Programmēšanas valodas
7. piemērs: ar nosacījumu REPEAT..UNTIL Cikla operatori 7. piemērs: ar nosacījumu REPEAT..UNTIL (* Programma izvada visus veselos skaitļus, kas nepārsniedz 150 un kas dalās ar 7 *) PROGRAM L4_P7_Cikla_operators_ar_nosacijumu_REPEAT_UNTIL; VAR (* Mainigo deklaresana *) sk : integer; BEGIN (* Pamatbloks *) sk := 0; Writeln ('Skaitli, kas dalas ar 7 un ir mazaki par 150: '); REPEAT (* Sakas cikla izpilde *) sk := sk + 7; Write(sk, ', '); UNTIL sk > 150 - 7; (* Ciklu izpilda lidz sk klust lielaks par pedejo skaitli, kas dalas ar 7 un ir mazaks par 150 *) Writeln; Writeln ('Programma darbu pabeidza.'); Readln; (* Gaida lietotaja ievadu *) END. 21.09.2011 Programmēšanas valodas
8. piemērs: ar nosacījumu WHILE..DO Cikla operatori 8. piemērs: ar nosacījumu WHILE..DO (* Programma nosaka naturalo skaitli k, pie kuras izteiksmes x^k/k vertiba klust lielaka par uzdoto skaitli A *) PROGRAM L4_P8_Cikla_operators_ar_nosacijumu_WHILE_DO; VAR (* Mainigo deklaresana *) x, A, y : integer; k : integer; BEGIN (* Pamatbloks *) Write ('Ievadiet x un A: '); Readln (x, A); (* Mainigo inicializesana *) k := 1; y := x; WHILE y/k <= A (* Cikla nosacijuma uzdosana *) DO BEGIN k := k + 1; y := y * x; Writeln ('k un x: ', k, ' ', y); END; Writeln; Writeln ('Izteiksmes ', x,'^k/k vertiba klust lielaka par ', A, ' pie k=', k,'.'); Writeln ('Programma darbu pabeidza.'); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Darbības - sazarojuma operatori Kopsavilkums Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: Nosacījuma Cikla Pārejas 21.09.2011 Programmēšanas valodas
Apraksts: Sintakse: Svarīgi: Pārejas operators Darbības - sazarojuma operatori Pārejas operators Apraksts: beznosacījuma operators, ar kura palīdzību var mainīt programmas izpildes gaitu Sintakse: LABEL <label_nosaukums>; GOTO <label_nosaukums>; Svarīgi: <label> tiek definēts programmas deklarēšanas blokā GOTO neatbilst labam programmēšanas stilam, un to lielākajā daļā gadījumu var aizvietot ar citiem sazarojuma operatoriem 21.09.2011 Programmēšanas valodas
9. piemērs: pārejas operators Cikla operatori 9. piemērs: pārejas operators (* Programma nosaka, vai ievaditais skaitlis ir nepara un paredz skaitla parbaudes atkartosanu, ja lietotajs izvelas turpinat darbu *) PROGRAM L4_P9_Parejas_operators; LABEL TURPINASANA; (* <label_nosaukums> - iezimes deklaresana *) VAR (* Mainigo deklaresana *) sk : integer; key : char; (* Lietotaja ievadam *) BEGIN (* Pamatbloks *) TURPINASANA: Write('Ievadiet skaitli: '); Readln(sk); IF (odd(sk)) THEN Writeln ('Ievaditais skaitlis ir nepara.') ELSE Writeln ('Ievaditais skaitlis ir nepara.'); Writeln ('Vai turpinat programmas darbu? (J/N): '); Readln(key); (* Gaida lietotaja ievadu *) IF ((key = 'J') OR (key = 'j')) THEN GOTO TURPINASANA; END. (* Pamatbloks *) No [3] 21.09.2011 Programmēšanas valodas
10. piemērs: pārejas operators pārrakstīts uz REPEAT .. UNTIL Cikla operatori 10. piemērs: pārejas operators pārrakstīts uz REPEAT .. UNTIL (* Programma nosaka, vai ievaditais skaitlis ir nepara un paredz skaitla parbaudes atkartosanu, ja lietotajs izvelas turpinat darbu *) PROGRAM L4_P10_Parejas_operators_uz_REPEAT_UNTIL; VAR (* Mainigo deklaresana *) sk : integer; key : char; (* Lietotaja ievadam *) BEGIN (* Pamatbloks *) REPEAT BEGIN Write('Ievadiet skaitli: '); Readln(sk); IF (odd(sk)) THEN Writeln ('Ievaditais skaitlis ir nepara.') ELSE Writeln ('Ievaditais skaitlis ir nepara.'); Writeln ('Vai turpinat programmas darbu? (J/N): '); Readln(key); (* Gaida lietotaja ievadu *) END UNTIL ((key <> 'J') AND (key <> 'j')); END. (* Pamatbloks *) 21.09.2011 Programmēšanas valodas
Tālāk – Datu tipi - masīvi Paldies par uzmanību! Jautājumi? Darbības - sazarojuma operatori Tālāk – Datu tipi - masīvi Paldies par uzmanību! Jautājumi? 21.09.2011 Programmēšanas valodas
Darbības - sazarojuma operatori Izmantotie resursi R. Zaks, Introduction to Pascal: Including Turbo Pascal, 2nd ed., Sybex, 1986, p. 464. A. Balode, Programmēšanas pamati. Valoda Turbo Pascal, Zvaigzne ABC, 2009, p.232. Programmēšanas pamati Pascal vidē, RTU Būvmehānikas katedra, Rīga, RTU, 2005 J. Bule, RTK kursa “Programmēšanas valodas" lekciju materiāli, RTK, 2010. 21.09.2011 Programmēšanas valodas