8. Loginiai duomenys

Programuotojai savo programose dažnai turi atsižvelgti į sudėtingas ir sunkiai aprašomas sąlygas, todėl programavimo kalbose pradėtas naudoti loginių duomenų tipas. Tokius duomenis atitinkantys kintamieji gali įgyti tik dvi reikšmes, kurios Paskalio kalboje žymimos vardais true ir false. Programose sąlyga gali būti tenkinama (t.y. ji teisinga, angliškai true) arba netenkinama (t.y. ji neteisinga, angliškai false). Loginiai kintamieji žymimi vardais, aprašuose jų tipas nurodomas žodžiu boolean, pvz:

var a, b, x, rez: boolean;

Loginiams kintamiesiems galima priskirti tik logines reikšmes false ir true, loginius reiškinius, dažniausiai sąlygas. Loginės reikšmės false ir true – tai loginės konstantos. Su loginiais duomenimis atliekamos loginės operacijos:

not inversija (ne), and konjunkcija (ir), or disjunkcija (arba).

Panagrinėkime kiekvieną operaciją:

not yra vadinama inversija, ji loginę reikšmę pakeičia priešinga:

jeigu a = true, tai not a = false,

jeigu a = false, not a = true.

and yra vadinama konjunkcija, jos reikšmė yra lygi true tiktai tuo atveju, kai abiejų loginių kintamųjų reikšmės yra true, o visais kitais atvejais reikšmė false:

 

a
b
 a and b
false false false
false true false
true false false
true true true

or yra vadinama disjunkcija, jos reikšmė yra lygi true, jei bent vieno loginio kintamojo reikšmė yra true:

a
b
a or b
false false false
false true true
true false true
true true true

Loginiai kintamieji ir loginės operacijos sudaro loginius reiškinius, pvz.

a and b or c and not c


Loginių operacijų atlikimo tvarka: not, and, or.

Loginių operacijų kintamieji dažnai būna lyginimo operacijų rezultatai. Lyginimo operacijos atliekamos paskiausiai, todėl lyginimo reiškinius, kai su jais atliekamos loginės operacijos, reikia suskliausti:

pvz. turime m, n integer tipo kintamuosius, tada galimas toks loginis reiškinys:

(m > 8) and (n < 4), kurio reikšmė arba true, arba false, priklausomai nuo m ir n reikšmių.

Dviguba matematinė nelygybė m < z < n programavime rašoma taip:

(m < z) and (z < n).

Kokiam nors loginiam kintamajam a galima atlikti tokį priskyrimą:

a := (m > 8) and (n < 4)

jeigu m = 3, n = 2, tai a = false, jeigu m = 20, n = 2, tai a = true.

Pvz. 8.1

Parašykite programą, kuri nustatytų, ar iš duotų trijų atkarpų (įvedami jų ilgiai) galima sudaryti trikampį.

Iš matematikos žinome, kad kiekviena trikampio kraštinė privalo būti trumpesnė už kitų dviejų kraštinių sumą.
 


Pvz. 8.2

Parašykite programą, kuri praneštų, ar duoti metai yra keliamieji, ar ne.

Primename, kad metai - tai laiko tarpas, per kurį Žemė apskrieja apie Saulę vieną ratą. Kadangi tas laikas yra 365 paros, 4 valandos, 48 minutės ir apie 47 sekundės, jau senovėje žmonės susidūrė su metų skaičiavimo problema. Keliamieji metai buvo įvesti dar Romos imperijos laikais, ją valdant imperatoriui Julijui Cezariui. Vėliau kalendorius buvo patobulintas, valdant popiežiui Grigaliui. Nuo jo laikų, ar metai keliamieji, nustatoma pagal tokias taisykles:

1) jeigu metai nėra šimtmečio metai, jie yra keliamieji, jeigu dalosi iš 4;

2) jeigu metai yra šimtmečio metai, jie yra keliamieji, jeigu dalosi iš 400 (pvz., 2000 ir 2400 metai yra keliamieji, o 2100, 2200, 2300 metai – ne keliamieji).
 


 


Programuotojams dažnai tenka susidurti su sąlygomis, kurias mes dažnai vartojame ir gyvenime:

Pvz. „bent vienas iš jų“ ir „tik vienas iš jų“.

Pvz. 8.3

Duoti trys skaičiai. Parašykite programą, kuri nustatytų, ar bent vienas iš jų yra lyginis ir ar tik vienas iš jų yra didesnis už 100.

Pirmuoju atveju atsakymas būtų taip, jeigu vienas iš jų, arba du iš jų, arba jie visi trys būtų lyginiai.

Antruoju atveju atsakymas būtų taip tik tuo atveju, jeigu tik vienas skaičius iš trijų būtų didesnis už 100. Jeigu du skaičiai didesni už šimtą, ar visi trys skaičiai didesni už šimtą, ar nė vieno didesnio už šimtą, atsakymas būtų ne.
 

 


Užduotys

1 tikrinamasis darbas

Nr.1

Parašyta programa, kuri nustato ar duotas trikampis lygiakraštis. Užbaikite programą ir patikrinkite ar ji teisingai veikia.
 

 


Nr.2

Parašykite programą, kuri nustatytų:

a) ar iš duotų trijų atkarpų galima sudaryti lygiašonį trikampį;

b) ar iš duotų trijų atkarpų galima sudaryti statųjį trikampį;

c) ar iš duotų keturių atkarpų galima sudaryti kvadratą;

d) ar iš duotų keturių atkarpų galima sudaryti lygiagretainį.

Nr.3

Pradiniai duomenys – trys skaičiai a, b ir c. Parašykite programą, kuri nustatytų, ar:

a) visų trijų kintamųjų a, b ir c reikšmės lygios;

b) visų trijų kintamųjų a, b ir c reikšmės skirtingos;

c) kurių nors dviejų kintamųjų reikšmės lygios;

d) visų trijų kintamųjų a, b ir c reikšmės yra lyginiai skaičiai;

e) visų trijų kintamųjų reikšmės yra teigiamos, bet ne didesnės kaip 100.

Nr.4

Parašykite programą, kuri nustatytų, ar metai olimpiniai. Pradinis duomuo – skaičius, reiškiantis metus. Pirmosios vasaros olimpinės žaidynės įvyko 1896 m. Atėnuose. Po to jos vyko arba turėjo vykti kas ketveri metai: 1900 m. – antrosios, 1904 m. – 3-iosios ir t.t. Neįvykusioms žaidynėms taip pat buvo skiriamas eilės numeris, o jų metai vis tiek laikomi olimpiniais. Programa turi pranešti, ar metai olimpiniai ir kelintos žaidynės tais metais įvyko.

Nr.5

Pradiniai duomenys – keturi skaičiai a, b, c ir d. Parašykite programą, kuri nustatytų, ar:

a) bent du iš keturių kintamųjų a, b, c ir d yra neigiami;

b) tik du iš keturių kintamųjų a, b, c ir d yra neigiami;

c) visi keturi kintamieji lyginiai;

d) nors vienas iš keturių kintamųjų baigiasi nuliu;

e) bent trys iš keturių kintamųjų teigiami;

f) ne daugiau, kaip trys iš jų lygūs.

Nr. 6

Duota natūraliųjų skaičių seka. Sekos pabaigos simbolis 0. Parašykite programą, kuri :

a) suskaičiuotų, kiek duotoje skaičių sekoje yra skaičių, kurie ir teigiami ir lyginiai;

b) rastų duotos sekos skaičių, kurie ir teigiami bet nelyginiai, sumą ir sandaugą;

c) suskaičiuotų, kiek duotoje skaičių sekoje yra skaičių, kurie ir teigiami ir lyginiai, kurie teigiami bet nelyginiai, ir rastų duotos sekos skaičių, kurie ir teigiami ir lyginiai, sumą.