14 Silmaring: Tõeväärtused
Eespool vaatlesime salatinäidet:
kartul_olemas = True makaron_olemas = False salatikaste_olemas = True print((kartul_olemas or makaron_olemas) and salatikaste_olemas)
Soovitasime proovida programmi tööd muutujate kartul_olemas
, makaron_olemas
ja salatikaste_olemas
erinevatel väärtustel. Kerkib küsimus, mitu erinevat varianti selleks on? Igaüks kolmest muutujast võib omada kahte erinevat väärtust. Kui oleks ainult üks muutuja, siis oleks võimalusi kaks:
True
False
Kui oleks ainult kaks muutujat, siis oleks võimalusi neli:
True
,True
True
,False
False
,True
False
,False
Kui on kolm muutujat, siis on võimalusi kaheksa:
True
,True
,True
True
,True
,False
True
,False
,True
True
,False
,False
False
,True
,True
False
,True
,False
False
,False
,True
False
,False
,False
Enesekontroll (1 ülesanne)
Meie näites on salati jaoks vaja kartulit või makaroni. Sõnal “või” on tavakeeles mõnevõrra teistsugune tähendus, kui programmeerimises (või matemaatilises loogikas). Tavakeeles on “või” sageli välistav – kas see või teine (aga mitte mõlemad). Loogikas ja programmeerimisel on tehe
tõene ka siis, kui mõlemad operandid on tõesed. Selle võib esitada ka tõeväärtustabelina. Loogikas tähistatakse or-tehet sageli märgiga or
. Tõene ja väär on tähistatud vastavalt t ja v.V
Toome ka tõeväärtustabeli
-tehte jaoks, mida sageli tähistatakse märgiga and
&
.
Meie salatinäites on tõeväärtustabel arvutatud kahes järgus: kõigepealt sooritatakse A v B, mis meil tähendab
, ja pärast seda ülejäänud avaldis kartul_olemas or makaron_olemas
(kartul_olemas or makaron_olemas) and salatikaste_olemas
.
Loogiliste avaldiste samaväärsus
Salatinäite puhul võime läheneda ka teistmoodi: kartulisalati jaoks oleks meil vaja kartulit ja salatikastet, makaronisalati jaoks oleks vaja makarone ja salatikastet. Kokkuvõttes piisab, kui vähemalt ühe jaoks neist on materjalid olemas. Vastav loogiline avaldis oleks järgmine:
(kartul_olemas and salatikaste_olemas) or (makaron_olemas and salatikaste_olemas)
Tegelikult on see samaväärne avaldisega, mis meil enne oli:
(kartul_olemas or makaron_olemas) and salatikaste_olemas
Loogiliste tehete puhul kehtivad mitmed seadused (analoogiliselt algebrale). Näiteks
- avaldis
on samaväärne avaldisegaa and b
;b and a
- avaldis
on samaväärne avaldisegaa or b
;b or a
- avaldis
on samaväärne avaldisega(a or b) and c
;(a and c) or (b and c)
Loogilistes tehetes orienteerumine on programmeerijale väga oluline ja seetõttu on seda arendavad õppeained ka ülikoolide õppekavades.