Sąlygos sakiniai Spausdinti
( 15 Votes )

Parašė Vidmantas Šarkys   

Šiame skyriuje nagrinėsime sąlygos sakinius FPS programavimo kalboje, jų naudojimo ypatybes.

Sąlygos sakiniai yra būtini tam, kad galėtume kurti pažangesnes programas, atlikti keletą skirtingų veiksmų atsižvelgiant į tai, ko reikalauja vartotojas. Programa be sąlygos sakinių tegali vykti vienu, iš anksto nustatytu būdu. Tam, kad padaryti programą "lankstesnę" ir "universalesnę" naudosime du FPS sakinius: If ir case.

1. "If"

Šio sakinio struktūra labai nesudėtinga: If (sąlyga) then (1 veiksmas) else (2 veiksmas)

Sąlyga - tai reiškinys, kurio reikšme naudodamasi programa nusprendžia, kurį iš veiksmų turėtų vykdyti. Po "then" seka tai, ką programa atliks, jeigu prieš tai minėtasis reiškinys yra teisingas, po "else" - jeigu reikšmė netenkina mūsų sąlygos. Iliustruokime visą tai trumpu pavyzdžiu:

...
Begin
x := 5;
If x = 5 then WriteLn('Penketas')
else WriteLn ('Kitas skaičius');
ReadLn;
end.

Programos pradžioje priskiriame kintamajam konkrečią reikšmę. Po to einantį sąlygos sakinį galime perskaityti šitaip: Jeigu x reikšmė yra lygi 5, tuomet rašome ekrane "Penketas", o jeigu x yra nelygus 5, tuomet rašysime ekrane "Kitas skaičius". Akivaizdu, kad bus vykdoma pirmoji dalis, kadangi kintamojo reikšmė yra būtent 5.

Atkreipkime dėmesį į tai, jog po "then" einantis sakinys nebaigiamas ";" ženklu, išskyrus atvejį, kai salygą teturės vieną variantą, pvz : " If 5 * x = 5 then x := sqr(x); ". Viename sąlygos sakinyje gali tilpti ne vienas, ne du ir ne trys sąlygos sakiniai:

If x = 10 then Write('10')
else If x = 20 then Write('20')
else If x = 30 then Write('30') ...

Tiesa, toks If sakinio naudojimas yra labai nepatogus ir neišvaizdus. Esant daugeliui skirtingų vykdymo variantų naudojamas Case sąlyginis sakinys, apie kuri kalbėsime šiek tiek vėliau. Sąlygos sakiniuose labai dažnai naudojamos 3 loginės operacijos : AND, OR, NOT.

1) If (x = 10) OR (x > 5) then else ;

Matome dvi sąlygas: viena iš jų reikalauja, kad x turėtų reikšmę 10, kita - 5. Pirmas veiksmas įvyks tuomet kai bent viena iš sąlygų bus tenkinama, antrasis vyks tada, kai x neįgis nė vienos iš minėtų reikšmių.

2) If (x = 10) AND (x > 5) then else ;

Ši loginė operacija  leis vykdyti pirmąjį veiksmą tuomet, kai abi sąlygos bus teigiamos, t.y. antrasis veiksmas įvyks jei bent viena iš sąlygų bus neteisinga.

3) If NOT(x = 10) then else ;

Loginė operacija NOT, galime sakyti, paneigia tiesą. Jeigu reiškinys x = 10 yra teisingas, esant šiai log. operacijai jis tampa neteisingu. Tarkime, jeigu x turi reikšmę 5 ( nėra lygus 10), dėl NOT buvimo x dirbtinai įgyja teisingą reikšmę ir tokiu būdų atliekamas pirmasis veiksmas.

Kaip jau pastebėjote, sąlyginiuose sakiniuose dažnai tenka lyginti kintamųjų ir skaičių reikšmes. Šioje lentelėje surašyti FPS naudojami lyginimo operatoriai:


2. "Case"

Šis sąlygos sakinys yra gana paprastas. Pažvelkime į pavyzdį:

...
ReadLn(x);
Case x of
1: WriteLn('Vienas');
2: WriteLn('Du');
3..9: WriteLn('Mažiau nei 10');
10..99: WriteLn('Mažiau nei 100');
else WriteLn('Įvedėte netinkamą skaičių');
end;
ReadLn;
end.

Šį sąlygos sakinį naudosime tuomet, kai tikrai žinosime, jog turėsime vienokią ar kitokią kintamojo reikšmę ir priklausomai nuo reikšmės įjungsime vieną ar kitą veiksmą.

Iš pradžių leidžiame vartotojui įvesti kintamojo x ( šiuo atveju - sveik. skaičiaus, nors gali būti ir simbolio tipo ) reikšmę. Po "case" eina mūsų kintamojo pavadinimas, vėliau išvardinamos tos reikšmės, kurias jis gali įgyti ir veiksmai, vyksiantys priklausomai nuo kintamojo reikšmės. pavyzdžiui, jeigu įvestas skaičius 1 - ekrane išvysime šį skaičių parašytą raidėmis, o jeigu mūsų skaičiaus reikšmė bus nuo 10 iki 99, programa vartotoją informuos, jog šis skaičius yra mažesnis nei 100. Tokių variantų galime prirašyti nors ir begalę. Sakinys "else" nurodo tai, kas vyks, jeigu mūsų skaičius nebus lygus nei 1, nei 2 nei kitoms reikšmėms, kurias aprašėme sąlygos sakinyje. "end;" dedamas po to, kai išvardinti visi sąlygos sakinio "case" veiksmų variantai. "Case" netenkina realiojo tipo kintamieji.

Blokai sąlyginiuose sakiniuose

Iki šiol nagrinėjome atvejus, kai priklausomai nuo reiškinio ar kintamojo yra vykdomas vienas ar kitas sakinys. Tačiau ką daryti, jei norime įvykdyti du ar daugiau sakinių iš karto? Tokiu atveju turėsime naudoti blokus. Panagrinėkime pavyzdį:

...
If x > 10 then
begin WriteLn('Skaičius yra didesnis nei 10'); ReadLn; x := 10 + 10; end
else
begin WriteLn('Skaičius mažesnis už 10'); ReadLn; x := 0; end;
...

Kaip matome, vietoj įprasto vieno veiksmo įdėjome bloka, kuris kiekvienu atveju talpina 3 skirtingus sakinius. Kiekviename bloke gali būti kitų sąlyginių sakinių, svarbiausia, kad visas jų vykdymas užsibaigtų ligi bloko pabaigos. Pastebėkite, jog ";" po pirmo bloko pabaigos nededamas, kadangi, kaip minėjome anksčiau, to neleidžia sąlyginio sakinio sintaksė.

Sąlygos operacijos

Verta paminėti ir tai, kas vadinama sąlygos operacijomis. Sukurkime programą su kintamuoju, kurio tipas "boolean" :

Program salyg;
var k : boolean;
Begin
k := 2 < 1;
If k then WriteLn('Teisingas reiškinys')
else WriteLn('Neteisingas reiškinys');
ReadLn;
end.

Žinome, kad "boolean" tipo kintamasis gali įgyti dvi reikšmes - TRUE arba FALSE. Iš sąlygos 2 < 1 nustatome, kurią iš šių reikšmių priskirsime kintamajam "k". Kadangi sąlyga yra neteisinga, "k" įgyja reikšmę FALSE. Tą patį kintamąjį naudojame vietoj sąlygos sakinyje IF . Jeigu kintamojo reikšmė būtų TRUE, būtų vykdomas pirmasis veiksmas, tačiau taip nėra, o įvykdžius antrąjį ekrane pasirodys užrašas, bylojantis, jog reiškinys yra neteisingas. Toks kintamojo "k" reikšmės naudojimas ir yra vadinamas sąlygos operacijomis.

Sąlyginių sakinių naudojimas gali būti labai įvairus ir priklauso tik nuo kūrėjo vaizduotės. Svarbiausia juos naudoti taip, kad programos kodas būtų lengvai suprantamas ir kuo trumpesnis.