Darbbas sazarojuma operatori Programmanas valodas Lekt M Lukjanska
Darbības - sazarojuma operatori Programmēšanas valodas Lekt. M. Lukjanska 21. 09. 2011
Darbības - sazarojuma operatori Kopsavilkums l l l Kāpēc nepieciešami sazarojuma operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: l l l 21. 09. 2011 2 Nosacījuma Cikla Pārejas Programmēšanas valodas
Darbības - sazarojuma operatori Kāpēc nepieciešami sazarojuma operatori? l l l Jāmaina programmas gaita atkarībā no uzdotā nosacījuma Noteikti operatori ir jāizpilda vairākas reizes pie noteiktiem nosacījumiem Piemēri: l funkciju vērtību aprēķināšana, piemēram, l ievaddatu pārbaude l l l 21. 09. 2011 3 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. Programmēšanas valodas
Darbības - sazarojuma operatori Kopsavilkums l l l Kāpēc nepieciešami sazarojuma operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: l l l 21. 09. 2011 4 Nosacījuma Cikla Pārejas Programmēšanas valodas
Darbības - sazarojuma operatori Nosacījuma jēdziens l Definīcija: l loģiskās (būla): AND, OR, NOT, XOR relāciju: =, <, >, <=, >=, <> Piemēri: l l 21. 09. 2011 <identifikators/izteiksme/vērtība> operācija <identifikators/izteiksme/vērtība> Iespējamās operācijas: l l nosacījums ir loģiskā (būla) izteiksme, kuras rezultāts ir vērtība: patiess (TRUE) vai aplams (FALSE) Sintakse: l l 5 a > b ((x – 10) > 6) AND (x <= 100) Programmēšanas valodas
Darbības - sazarojuma operatori Nosacījuma jēdziens (turpinājums) l Svarīgi: l jālieto iekavas ‘()’, jo loģiskajām izteiksmēm ir augstāka prioritāte: l l l 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: l 21. 09. 2011 6 Lekcija 3: Programmēšanas valodu pamati Programmēšanas valodas
Darbības - sazarojuma operatori Kopsavilkums l l l Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: l l l 21. 09. 2011 7 Nosacījuma Cikla Pārejas Programmēšanas valodas
Darbības - sazarojuma operatori No 2. lekcijas ‘Ievads par programmēšanas valodām’ l Atcerēsimies! l Programmēšanas valodas semantikas uzdošana Izteiksmes Ievades/Izvades operatori Piešķires operatori Darbību apraksta pamatlīdzekļi 21. 09. 2011 8 Sazarojuma operatori Pārejas operators Nosacījuma operatori Cikla operatori Bloki Apakšprogrammas Procedūras Pakotnes Funkcijas Programmēšanas valodas
Darbības - sazarojuma operatori Nosacījuma operators l Apraksts: l vispirms notiek uzdotā nosacījuma analīze: l l IF <nosacījums> THEN <operatoru bloks>; IF <nosacījums> THEN <operatoru bloks 1> ELSE <operatoru bloks 2>; Svarīgi: l l 21. 09. 2011 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: l l 9 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 Programmēšanas valodas
Darbības - sazarojuma operatori Nosacījuma operatora grafiskais attēls 10 Vai nosacījums izpildās? Jā THEN operatoru bloks 1 THEN operators 21. 09. 2011 THEN BEGIN operators 1; operators 2; IF (nosacījums) Nē Var nebūt definēts ELSE operatoru bloks 2 ELSE operators; ELSE BEGIN operators 1; operators 2; . . . END; Programmēšanas valodas
Darbības - sazarojuma operatori Nosacījuma uzdošana Darbība 11 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
Darbības - sazarojuma operatori 1. piemērs: Nosacījuma operators 12 (*Programma nosaka, vai lietotaja ievaditais skaitlis ir para vai nepara *) PROGRAM L 4_P 1_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
Darbības - sazarojuma operatori 2. piemērs: Vairāku nosacījuma operators 13 (*Pircejam tiek pieskirta 5% atlaide par pirkuma summu no 100 – 200 Ls, 10% atlaide par pirkuma summu virs 200 Ls. Ievadot apmaksajamo summu, programma izvada, vai pieskirta atlaide un cik liela, ka ari, cik ir atlikusi summa apmaksai *) PROGRAM L 4_P 2_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; END. 21. 09. 2011 (* Gaida lietotaja ievadu *) (* Pamatbloks *) Programmēšanas valodas
Darbības - sazarojuma operatori 3. piemērs: Vairāku nosacījuma operators 14 (*Pircejam tiek pieskirta 5% atlaide par pirkuma summu no 100 – 200 Ls, 10% atlaide par pirkuma summu virs 200 Ls. Ievadot apmaksajamo summu, programma izvada, vai pieskirta atlaide un cik liela, ka ari, cik ir atlikusi summa apmaksai *) PROGRAM L 4_P 3_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
Darbības - sazarojuma operatori 4. piemērs: Vairāku nosacījuma operators 15 (*Pircejam tiek pieskirta 5% atlaide par pirkuma summu no 100 – 200 Ls, 10% atlaide par pirkuma summu virs 200 Ls. Ievadot apmaksajamo summu, programma izvada, vai pieskirta atlaide un cik liela, ka ari, cik ir atlikusi summa apmaksai *) PROGRAM L 4_P 4_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
Darbības - sazarojuma operatori Kopsavilkums l l l Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: l l l 21. 09. 2011 16 Nosacījuma Cikla Pārejas Programmēšanas valodas
Darbības - sazarojuma operatori Cikla operatori l Apraksts: l l programmēšanas pamatelementi, kuru rezultātā pie noteikta nosacījuma tiek atkārtoti izpildīts operators vai operatoru bloks Svarīgi: l l 21. 09. 2011 17 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ēšanas blokā Programmēšanas valodas
Darbības - sazarojuma operatori Cikla operatori (turpinājums) 18 Veidi Kontrolējamie fiksēts operatoru bloka izpildes skaits 21. 09. 2011 Ar nosacījumu iepriekš nezināms operatoru bloka izpildes skaits (ir atkarīgs no nosacījuma) Programmēšanas valodas
Cikla operatori Kontrolējamie cikla operatori l Apraksts: l l FOR <cikla mainīgais> : = <sākuma vērtība> TO/DOWNTO <beigu vērtība> DO <operatoru bloks>; Svarīgi: l l 21. 09. 2011 operatoru bloks tiek izpildīts fiksētu reižu skaitu Sintakse: l l 19 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 Programmēšanas valodas
Darbības - sazarojuma operatori Kontrolējamo cikla operatoru grafiskais attēls Nē FOR cikla mainīgais : = sākuma vērtība TO/DOWNTO beigu vērtība 20 Jā DO operatoru bloks; DO operators DO BEGIN operators 1; operators 2; . . . END; 21. 09. 2011 Programmēšanas valodas
Cikla operatori 5. piemērs: Kontrolējamais cikla operators 21 PROGRAM L 4_P 5_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
Cikla operatori 6. piemērs: Kontrolējamais cikla operators 22 PROGRAM L 4_P 6_Kontrolejams_cikla_operators ; (* Mainigo deklaresana *) VAR i, j : integer; (* cikla mainigie *) sk : integer; (* ievadam no lietotaja *) (* Pamatbloks *) BEGIN Write('Ievadiet skaitli: '); Readln(sk); FOR i : = 1 TO sk DO BEGIN Writeln ('Cikls 1 izpildaas ', i, '. reizi. '); FOR j : = 1 TO sk DO Writeln (' Cikls 2 izpildaas ', i, '. reizi. '); END; Readln; END. 21. 09. 2011 (* Gaida lietotaja ievadu *) (* Pamatbloks *) Programmēšanas valodas
Darbības - sazarojuma operatori Cikla operatori 23 Veidi Kontrolējamie fiksēts operatoru bloka izpildes skaits 21. 09. 2011 Ar nosacījumu iepriekš nezināms operatoru bloka izpildes skaits (ir atkarīgs no nosacījuma) Programmēšanas valodas
Cikla operatori Ar nosacījumu l Apraksts: l l operatoru bloks tiek izpildīts iepriekš nezināmu reižu skaitu un ir atkarīgs no uzdotā nosacījuma Sintakse: l l l REPEAT <operatoru bloks> UNTIL <nosacījums>; WHILE <nosacījums> DO <operatoru bloks>; Svarīgi: l REPEAT. . UNTIL konstrukcija (turpina, kamēr nosacījums nepatiess. . . ) l l 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) l l 21. 09. 2011 24 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) Programmēšanas valodas
Cikla operatori Ar nosacījumu grafiskais attēls Jā DO operatoru bloks 21. 09. 2011 WHILE (nosacījums) 25 REPEAT operatoru bloks Nē Jā UNTIL (nosacījums) Nē Programmēšanas valodas
Cikla operatori 7. piemērs: ar nosacījumu REPEAT. . UNTIL 26 (* Programma izvada visus veselos skaitļus, kas nepārsniedz 150 un kas dalās ar 7 *) PROGRAM L 4_P 7_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
Cikla operatori 8. piemērs: ar nosacījumu WHILE. . DO 27 (* Programma nosaka naturalo skaitli k, pie kuras izteiksmes x^k/k vertiba klust lielaka par uzdoto skaitli A *) PROGRAM L 4_P 8_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 ('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
Darbības - sazarojuma operatori Kopsavilkums l l l Kāpēc nepieciešami sazarojumu operatori? Nosacījuma jēdziens Sazarojuma operatoru veidi: l l l 21. 09. 2011 28 Nosacījuma Cikla Pārejas Programmēšanas valodas
Darbības - sazarojuma operatori Pārejas operators l Apraksts: l l l LABEL <label_nosaukums>; GOTO <label_nosaukums>; Svarīgi: l l 21. 09. 2011 beznosacījuma operators, ar kura palīdzību var mainīt programmas izpildes gaitu Sintakse: l l 29 <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 Programmēšanas valodas
Cikla operatori 9. piemērs: pārejas operators 30 (* Programma nosaka, vai ievaditais skaitlis ir nepara un paredz skaitla parbaudes atkartosanu, ja lietotajs izvelas turpinat darbu *) PROGRAM L 4_P 9_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
Cikla operatori 10. piemērs: pārejas operators pārrakstīts uz REPEAT. . UNTIL 31 (* Programma nosaka, vai ievaditais skaitlis ir nepara un paredz skaitla parbaudes atkartosanu, ja lietotajs izvelas turpinat darbu *) PROGRAM L 4_P 10_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
Darbības - sazarojuma operatori 32 l l l 21. 09. 2011 Tālāk – Datu tipi - masīvi Paldies par uzmanību! Jautājumi? Programmēšanas valodas
Darbības - sazarojuma operatori Izmantotie resursi 33 1. R. Zaks, Introduction to Pascal: Including Turbo Pascal, 2 nd ed. , Sybex, 1986, p. 464. 2. A. Balode, Programmēšanas pamati. Valoda Turbo Pascal, Zvaigzne ABC, 2009, p. 232. 3. Programmēšanas pamati Pascal vidē, RTU Būvmehānikas katedra, Rīga, RTU, 2005 4. J. Bule, RTK kursa “Programmēšanas valodas" lekciju materiāli, RTK, 2010. 21. 09. 2011 Programmēšanas valodas
- Slides: 33