LOGINIAI DUOMENYS IR JŲ VALDOMI VEIKSMAI

LOGINIAI DUOMENYS IR JŲ VALDOMI VEIKSMAI

Logika yra programavimo pagrindas. Sąsaja tarp matematikos ir programavimo prasideda nuo matematinės logikos.Loginiai duomenys valdo programoje užrašytų veiksmų atlikimo tvarką. Sakiniai, kurių atlikimo tvarką reikia valdyti (pasirinkti vieną iš kelių sakinių, kartoti) jungiami į struktūrinius sakinius, dar vadinamus valdymo struktūromis. Šiame skyriuje pateiksime pilną valdymo struktūrų rinkinį, t.y., tokį, kurio pakanka, bet kurio sudėtingumo veiksmų atlikimo tvarkai išreikšti.

Loginiai duomenys

Loginiai duomenys turi tik dvi reikšmes, kurios Paskalio kalboje žymimos vardais true ir false. Tai reikšmės teiginio, apie kurį galima pasakyti, kad jis yra teisingas arba klaidingas. Jeigu teiginys teisingas, tai sakoma, kad jo loginė reikšmė yra true, jei klaidingas – false. Pavyzdžiui, teiginio „Dabar lyja“ reikšmė yra true, jeigu dabar iš tikrųjų lyja ir false – priešingu atveju. Teiginys „skaičius 24 yra lyginis“ yra visada teisingas, nes skaičius 24 iš tikrųjų lyginis. Taigi, šio teiginio reikšmė yra true.Teiginius kartais patogu vadinti sąlygomis. Sakoma, kad sąlyga gali būti tenkinama (jos loginė reikšmė yra true) arba netenkinama (false). Sąlygos, išreikštos nelygybe 5>3, reikšmė yra visada true, nes skaičius 5 didesnis už skaičių 3. Sąlygos 5=3 reikšmė yra false, nes skaičiai 3 ir 5 nelygūs. O kokia bus sąlygos a>5 reikšmė, iš anksto pasakyti negalima, nes ji priklauso nuo kintamojo a reikšmės.Loginiai duomenys gali būti loginių uždavinių pradiniai ir galutiniai duomenys. Tokius uždavinius tenka retai programuoti. Tačiau su loginiais duomenimis susiduriame kiekvienoje programoje, kai reikia valdyti atliekamų veiksmų eilės tvarką. Dėl to juos ir nagrinėjame šio skyriaus pradžioje.Loginiai kintamieji, kaip ir kitų tipų kintamieji, žymimi vardais. Kad būtų galima juos atskirti nuo kitų tipų kintamųjų, aprašuose jie apibūdinami žodžiu boolean*, pavyzdžiui,

var a, b, log: boolean;Šiuo aprašu pasakoma, kad kintamieji, pažymėti vardais a, b ir log, yra loginiai.Loginiams kintamiesiems galima priskirti tik logines (loginių reiškinių) reikšmes. Loginės reikšmės – tai loginės konstantos false ir true. Todėl prieskyros sakiniaia := true;b := false;log := ayra teisingi, nes kintamieji a, b ir log yra loginio tipo. Tuo tarpu sakiniai:a := 15;b := 54.12yra neteisingi, nes loginio tipo kintamieji negali įgyti skaitinių reikšmių.Su loginiais duomenimis atliekamos logines operacijas:not inversija (ne),and konjunkcija (ir),or disjunkcija (arba).Visos loginės operacijos Paskalyje žymimos baziniais žodžiais, kurie angliškai reiškia tą, ką rašėme skliaustuose (ne, ir, arba).Panagrinėkime kiekvieną operaciją.Inversija (not). Operando reikšmė paneigiama, t.y. jo loginė reikšmė pakeičiama priešinga:not false = true,not true = false.Pavyzdžiui, vietoja <> bgalima rašytinot(a = b)arba vietoj a <= bgalima rašytinot(a > b).Inversija yra vienvietė operacija, t.y., ji taikoma vienam operandui – vienai loginei reikšmei. Šiuo požiūriu ji panaši į minusą, kuriuo užrašyta vienvietė atimtis aritmetiniame reiškinyje:-xnot a Ir vienos, ir kitos operacijos ženklas rašomas prieš operandą. Minusas keičia skaičiaus ženklą priešingu, o inversija – loginę reikšmę priešinga.Konjunkcijos (and) reikšmė yra lygi true tiktai tuo atveju, kai abiejų operandų reikšmės yra true. Visais kitais atvejais konjunkcijos reikšmę yra false:false and false = false,false and true = false,true and false = false,true and true = true.Konjunkcijos rezultatus galima pavaizduoti lentele.

a b a and bfalse false falsefalse true falsetrue false falsetrue true true

Disjunkcijos (or) reikšmė yra lygi true, jei bent vieno operando reikšmė yra true. Kitaip sakant, disjunkcijos reikšmė‚ yra true, jei pirmojo arba antrojo operando reikšmė yra true (dėl to disjunkcija kartais vadinama operacija arba):

false or false = false,false or true = true,true or false = true,true or true = true.Disjunkcijos rezultatus galima pavaizduoti lentele.

a b a or bfalse false falsefalse true truetrue false truetrue true true

Loginiai reiškiniai, panašiai kaip ir aritmetiniai, gali būti ir sudėtingesni, pavyzdžiui,a and b and c,a or b or c.Loginių operacijų atlikimo tvarką nurodo skliaustai. O jeigu skliaustų nėra, tai operacijos atliekamos šia prioritetų eile:notandorT.y., pirmiausiai atliekamas neigimas, po to – konjunkcija ir paskiausiai – disjunkcija.Vienodo prioriteto operacijos atliekamos iš kairės į dešinę. Pavyzdžiui, reiškinio a or b or c or d and d and freikšmė skaičiuojama taip, lyg būtų šitaip surašyti skliaustai:((a or b) or c) or ((d and e) and f).Loginę (loginio reiškinio) reikšmę galima rašyti (parodyti ekrane), priskirti loginio tipo kintamajam, panaudoti valdymo struktūrose (žr. tolesnius skyrelius).Programoje loginės reikšmės dažniausiai atsiranda kaip skaičių (aritmetinių reiškinių) lyginimo rezultatas. Vartojamos 6 lyginimo operacijos, kurios Paskalio kalboje žymimos šitaip:< mažiau,<= mažiau arba lygu ,= lygu,<> nelygu ,> daugiau,>= daugiau arba lygu . Pateiksime lyginimo operacijų ir jų rezultatų pavyzdžių.5 < 6 true5 > 6 false5 > 5 false 5 >= 5 true5-1 < 5 truea-b = (c-d)-r reikšmė priklausys nuo kintamųjų reikšmių5.31 < 5.32 true5.31 < 5 trueLyginimo operacijų, panašiai kaip ir aritmetinių, operandai gali būti skirtingo tipo skaičiai (aritmetiniai reiškiniai). Tokiu atveju sveikasis skaičius pakeičiamas realiuoju ir lyginami du realieji skaičiai.Loginių operacijų operandai dažnai būna lyginimo operacijų rezultatai. Jei nėra skliaustų, Paskalyje lyginimo operacijos atliekamos paskiausiai. Todėl lyginimo reiškinius, kai su jais atliekamos loginės operacijos, reikia suskliausti. Pavyzdžiui, reiškinyje

(x > 5) and (x < 10)skliaustai reikalingi. Jei jų nebūtų, tai apskaičiuojant reiškinįx > 5 and x < 10pagal Paskalyje priimtus operacijų prioritetus pirmiausiai reikėtų atlikti loginę operaciją5 and xO tai neatitinka mūsų užmanymo. Be to pirmasis konjunkcijos operandas yra neleistino tipo (todėl šią klaidą aptiktų kompiliatorius).Kelias paprastesnes sąlygas loginėmis operacijomis galima sujungti į vieną sudėtingesnę. Pavyzdžiui, dviguba nelygybe a