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:
or yra vadinama disjunkcija, jos reikšmė yra lygi true, jei bent vieno loginio kintamojo reikšmė yra true:
Loginiai kintamieji ir loginės operacijos sudaro loginius reiškinius,
pvz. a and b or c and
not c
a := (m > 8) and (n < 4)
jeigu m = 3, n = 2, tai a = false, jeigu m = 20, n
= 2, tai a = true.
program
trikampis;
var a, b, c: integer; begin read(a, b, c); if (a < b + c) and (b < a + c) and (c < a + b) then writeln ('Trikampį sudaryti galima.') else writeln ('Trikampio sudaryti negalima.') end. 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). program
keliamieji;
var m: integer; k: boolean; begin read(m); k := (m mod 4 = 0) and (m mod 100 <> 0) or (m mod 400 = 0); if k then writeln ('Metai keliamieji.') else writeln ('Metai nekeliamieji.') end. 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. program
trysskaiciai;
var a, b, c: integer; begin read(a, b, c); if (a mod 2 = 0) or (b mod 2 = 0) or (c mod 2 = 0) then writeln ('Taip, bent vienas yra lyginis.') else writeln ('Ne, tarp jų nėra lyginio.'); if (a > 100) and (b <=100) and (c <= 100) or (b > 100) and (a <=100) and (c <= 100) or (c > 100) and (a <=100) and (b <= 100) then writeln ('Taip, tik vienas yra didesnis už šimtą.') else writeln ('Ne.') end. 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. program
lygiaktrik;
var a, b, c: integer; begin writeln('Įveskite trikampio kraštinių ilgius'); read(...); if (a = ...) ... (... ... ...) then writeln ('Trikampis ... .') else writeln ('Trikampis ... .') end. 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ą. |
||||||||||||||||||||||||||||||||||