{"id":253,"date":"2019-01-16T12:12:30","date_gmt":"2019-01-16T12:12:30","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/?post_type=chapter&#038;p=253"},"modified":"2019-08-27T16:41:09","modified_gmt":"2019-08-27T16:41:09","slug":"mitmeosaline-tingimus-loogilised-tehted-ja-avaldised","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/chapter\/mitmeosaline-tingimus-loogilised-tehted-ja-avaldised\/","title":{"raw":"Mitmeosaline tingimus. Loogilised tehted ja avaldised","rendered":"Mitmeosaline tingimus. Loogilised tehted ja avaldised"},"content":{"raw":"<p class=\"vspace\">M\u00f5nikord on meil tarvis kontrollida tingimust, mis koosneb mitmest osast. Olgu n\u00e4iteks seif, mis avaneb ainult siis, kui kaks erinevat koodi \u00f5igesti sisestatakse. Sellisel juhul oleks meil vaja kontrollida nii esimese kui teise koodi \u00f5igsust. Selliseid alamtingimusi on v\u00f5imalik kombineerida loogiliste tehete abil. Programmeerimise olulisemad loogilised tehted on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code> ning <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code>. Loogilisi tehteid kasutades moodustub loogiline avaldis, millel on t\u00f5ev\u00e4\u00e4rtus.<\/p>\r\n\r\n<h3>Tehe <em>and<\/em><\/h3>\r\n<p class=\"vspace\">Tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> on tavakeelse \"ja\" t\u00e4hendusega. Tehte <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> tulemus on t\u00f5ene siis ja ainult siis, kui m\u00f5lemad avaldised (tehte operandid), mille vahel <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code> paikneb, on t\u00f5esed. J\u00e4rgnevas programmis ongi seda \u00e4ra kasutatud:<\/p>\r\n<strong>N\u00e4iteprogramm. Kahe koodiga seif<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">kood1 = \"1234\"\r\nkood2 = \"0000\"\r\nprint(\"Sisesta 1. salakood:\")\r\npakutud_kood1 = input()\r\nprint(\"Sisesta 2. salakood:\")\r\npakutud_kood2 = input()\r\n \r\nif pakutud_kood1 == kood1 and pakutud_kood2 == kood2:\r\n    print(\"Seif avaneb!\")\r\nelse:\r\n    print(\"Salakoodidega on kehvasti. T\u00f5stke k\u00e4ed \u00fcles!\")<\/pre>\r\n<p class=\"vspace\">Katseta seda programmi erinevate sisenditega. N\u00e4iteks, kui<\/p>\r\n\r\n<ul>\r\n \t<li>m\u00f5lemad koodid on \u00f5iged;<\/li>\r\n \t<li>1. kood on \u00f5ige, 2. kood vale;<\/li>\r\n \t<li>1. kood on vale, 2. kood \u00f5ige;<\/li>\r\n \t<li>m\u00f5lemad on valed.<\/li>\r\n<\/ul>\r\n<p class=\"vspace\">Kas tulemus vastas teie ootustele?<\/p>\r\n\r\n<h3>Tehe <em>or<\/em><\/h3>\r\n<p class=\"vspace\">S\u00f5na \"or\" t\u00e4hendab t\u00f5lkes \"v\u00f5i\". Selgita v\u00e4lja, mida see meie jaoks programmis t\u00e4hendab (selle t\u00e4hendus erineb pisut tavakeelsest t\u00e4hendusest). Asenda eelmise programmi valikulauses tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> tehtega <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code>:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">if pakutud_kood1 == kood1 or pakutud_kood2 == kood2:<\/pre>\r\n<p class=\"vspace\">Katseta n\u00fc\u00fcd programmi t\u00f6\u00f6d erinevate sisenditega, nimelt kui<\/p>\r\n\r\n<ul>\r\n \t<li>m\u00f5lemad koodid on \u00f5iged;<\/li>\r\n \t<li>1. kood on \u00f5ige, 2. kood vale;<\/li>\r\n \t<li>1. kood on vale, 2. kood \u00f5ige;<\/li>\r\n \t<li>m\u00f5lemad on valed.<\/li>\r\n<\/ul>\r\nKasuta saadud tulemusi j\u00e4rgmisele k\u00fcsimusele vastuse leidmiseks:\r\n\r\n<code>[h5p id=\"46\"]<\/code>\r\n\r\nEelmise n\u00e4ite puhul olid v\u00e4lja pakutud m\u00f5ned variandid, mida katsetamisel kasutada. Need polnud valitud suvaliselt, vaid p\u00fc\u00fcdsid h\u00f5lmata k\u00f5iki p\u00f5him\u00f5tteliselt erinevaid variante. Testimine on programmeerimises v\u00e4ga oluline. V\u00e4hegi suurema programmi puhul on m\u00f5istlike testide koostamine omaette suur t\u00f6\u00f6. IT-firmades on lausa testija ametikohad ja vastavad osakonnad.\r\n<h3>Tehe <em>not<\/em><\/h3>\r\n<p class=\"vspace\">Tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code><\/code> \"p\u00f6\u00f6rab\" t\u00f5ev\u00e4\u00e4rtuse vastupidiseks. N\u00e4iteks avaldise<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">not 1 == 1<\/pre>\r\n<p class=\"vspace\">v\u00e4\u00e4rtus on <code>False<\/code>, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">1 == 1<\/code> v\u00e4\u00e4rtus on <code>True<\/code>.<\/p>\r\n\r\n<h3>Loogiliste tehete kokkuv\u00f5te<\/h3>\r\nTehete <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> ja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code><\/code> puhul on meil vaja kahte operandi, millega tehe toimub. Selliseid tehteid nimetatakse kahekohalisteks ehk binaarseteks. Tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code><\/code> t\u00f6\u00f6tab \u00fche operandiga (on \u00fchekohaline ehk unaarne).\r\n<p class=\"vspace\">Loogiliste tehete <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code><\/code> ja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code><\/code> kasutamisel on tulemused j\u00e4rgnevad:<\/p>\r\n\r\n<ul>\r\n \t<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">v\u00e4ide1 and v\u00e4ide2<\/code> - t\u00f5ene ainult siis, kui m\u00f5lemad v\u00e4ited on t\u00f5esed<\/li>\r\n \t<li><code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">v\u00e4ide1 or v\u00e4ide2<\/code><\/code> - t\u00f5ene siis, kui <strong>v\u00e4hemalt \u00fcks<\/strong> v\u00e4idetest on t\u00f5ene<\/li>\r\n \t<li><code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not v\u00e4ide1<\/code><\/code> - t\u00f5ene ainult siis, kui <code>v\u00e4ide1<\/code> on v\u00e4\u00e4r.<\/li>\r\n<\/ul>\r\nSealjuures on iga v\u00e4ide avaldis t\u00f5ev\u00e4\u00e4rtusega <code>True<\/code> v\u00f5i <code>False<\/code>, mis v\u00f5ib \"p\u00e4rineda\" ka mingisugusest v\u00f5rdlemistehtest (nt <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">pakutud_kood1 == \"1234\"<\/code>,<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vanus &lt; 14<\/code>) v\u00f5i ka loogilisest tehtest (seda vaatame varsti).\r\n\r\nTehted ja avaldised on meile p\u00f5him\u00f5tteliselt tuttavad juba koolimatemaatikast. Loogilised tehted ja avaldised vajavad veidi harjumist. \u00c4rge v\u00e4ga muretsege, kui esimese hooga k\u00f5ik veel selgeks ei saa.\r\n\r\nLoogilised avaldised muutuvad tingimusteks, kui neid selles rollis kasutatakse - n\u00e4iteks tingimuslauses.\r\n<h2>Keerulisem tingimus<\/h2>\r\n<p class=\"vspace\">Vahel on tingimused keerulisemad ja programmi korraliku t\u00f6\u00f6 huvides tuleb need p\u00f5hjalikult l\u00e4bi m\u00f5elda. Olgu meil tahtmine teha salatit - kartuli- v\u00f5i makaronisalatit. Lihtsustatult oleks meil vaja kartuleid v\u00f5i makarone ja salatikastet.<\/p>\r\n<p class=\"vspace\">J\u00e4tame praegu t\u00e4psustamata, millest see salatikaste tehtud on ja muid detaile ka. Tegelikult kipubki p\u00e4riselu loogilistes avaldistes kirjeldamine k\u00fcllaltki keeruline olema. Programmide kirjutamisel tuleb seet\u00f5ttu teha m\u00f5ningaid lihtsustusi.<\/p>\r\n<p class=\"vspace\">Loogilise avaldise koostamiseks v\u00f5tame kasutusele muutujad <code>kartul_olemas<\/code>, <code>makaron_olemas<\/code> ja <code>salatikaste_olemas<\/code>. Vastavalt sellele, kas koostisosa on olemas v\u00f5i mitte, on selle muutuja v\u00e4\u00e4rtus <code>True<\/code> (on olemas) v\u00f5i <code>False<\/code> (ei ole olemas).<\/p>\r\n<p class=\"vspace\">P\u00fc\u00fcame n\u00fc\u00fcd kirja panna, kas saame salatit teha v\u00f5i mitte. Siin on tegelikult mitu v\u00f5imalikku m\u00f5ttek\u00e4iku ja ka avaldis v\u00f5ib l\u00f5puks tulla (n\u00e4iliselt) erinev.<\/p>\r\n<p class=\"vspace\">\u00dcks v\u00f5imalus oleks m\u00f5elda nii, et meil on vaja kahte koostisosa: n-\u00f6 nimiosa ja salatikastet. Nimiosas v\u00f5ib olla kartul v\u00f5i makaron - panemegi kirja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">kartul_olemas or makaron_olemas<\/code><\/code>. Sellele lisame salatikastme - <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">(kartul_olemas or makaron_olemas) and salatikaste_olemas<\/code><\/code>. Sulud t\u00e4histavad siin (nagu ka aritmeetikas ja algebras) seda, et vastav tehe sooritatakse enne v\u00e4limisi.<\/p>\r\n<p class=\"vspace\">J\u00e4rgmises n\u00e4ites on meil olemas kartul ja salatikaste, aga makarone pole. Kui meie m\u00f5ttek\u00e4ik on \u00f5ige olnud, siis peaks ekraanile tulema <code>True<\/code>, sest t\u00f5esti saame salatit teha. Proovi j\u00e4rele!<\/p>\r\n<strong>N\u00e4iteprogramm. Salati v\u00f5imalikkuse kontroll<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">kartul_olemas = True\r\nmakaron_olemas = False\r\nsalatikaste_olemas = True\r\nprint((kartul_olemas or makaron_olemas) and salatikaste_olemas)<\/pre>\r\n<p class=\"vspace\">Proovi n\u00fc\u00fcd programmi t\u00f6\u00f6d muutujate <code>kartul_olemas<\/code>, <code>makaron_olemas<\/code> ja <code>salatikaste_olemas<\/code> erinevatel v\u00e4\u00e4rtustel. Enne k\u00e4ivitamist m\u00f5tle, milline tulemus oleks ootusp\u00e4rane. Kas programm t\u00f6\u00f6tab vastavalt ootustele?<\/p>\r\n\r\n<h3>Tehete j\u00e4rjekord loogilises avaldises<\/h3>\r\n<p class=\"vspace\">Eelnevalt mainisime, et sulgude kasutamine suunab tehete j\u00e4rjekorda: sulgudes olev tehakse varem. Mis aga juhtuks, kui n\u00e4iteks avaldises <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">(a or b) and c<\/code> sulud \u00e4ra j\u00e4taksime? Kas siis nagunii ei tehtaks siin <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code>-tehet enne, sest see asub eespool?<\/p>\r\n<p class=\"vspace\">T\u00f5epoolest on sulud siin olulised, sest nende puudumisel tehtaks esimesena hoopis <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code>-tehe. Nimelt on kokkulepe, et <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code> on k\u00f5rgema prioriteediga kui <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code><\/code>, analoogiliselt tavalise aritmeetikaga, kus korrutamine tehakse enne liitmist. N\u00e4iteks <em>2 + 3 * 4<\/em> on <em>14<\/em>, aga mitte <em>20<\/em>.<\/p>\r\n\r\n<h3>Enesekontroll (1 k\u00fcsimus)<\/h3>\r\n<code>[h5p id=\"47\"]<\/code>\r\n<h3>Videomaterjal<\/h3>\r\n<a href=\"https:\/\/www.uttv.ee\/naita?id=23879\" target=\"_blank\" rel=\"noopener noreferrer\">Selles videos<\/a> on veel \u00fche programmi n\u00e4ide, kus on keerulisem tingimus ja erinevad loogilised tehted.","rendered":"<p class=\"vspace\">M\u00f5nikord on meil tarvis kontrollida tingimust, mis koosneb mitmest osast. Olgu n\u00e4iteks seif, mis avaneb ainult siis, kui kaks erinevat koodi \u00f5igesti sisestatakse. Sellisel juhul oleks meil vaja kontrollida nii esimese kui teise koodi \u00f5igsust. Selliseid alamtingimusi on v\u00f5imalik kombineerida loogiliste tehete abil. Programmeerimise olulisemad loogilised tehted on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code> ning <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code>. Loogilisi tehteid kasutades moodustub loogiline avaldis, millel on t\u00f5ev\u00e4\u00e4rtus.<\/p>\n<h3>Tehe <em>and<\/em><\/h3>\n<p class=\"vspace\">Tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> on tavakeelse &#8220;ja&#8221; t\u00e4hendusega. Tehte <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> tulemus on t\u00f5ene siis ja ainult siis, kui m\u00f5lemad avaldised (tehte operandid), mille vahel <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code> paikneb, on t\u00f5esed. J\u00e4rgnevas programmis ongi seda \u00e4ra kasutatud:<\/p>\n<p><strong>N\u00e4iteprogramm. Kahe koodiga seif<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">kood1 = \"1234\"\r\nkood2 = \"0000\"\r\nprint(\"Sisesta 1. salakood:\")\r\npakutud_kood1 = input()\r\nprint(\"Sisesta 2. salakood:\")\r\npakutud_kood2 = input()\r\n \r\nif pakutud_kood1 == kood1 and pakutud_kood2 == kood2:\r\n    print(\"Seif avaneb!\")\r\nelse:\r\n    print(\"Salakoodidega on kehvasti. T\u00f5stke k\u00e4ed \u00fcles!\")<\/pre>\n<p class=\"vspace\">Katseta seda programmi erinevate sisenditega. N\u00e4iteks, kui<\/p>\n<ul>\n<li>m\u00f5lemad koodid on \u00f5iged;<\/li>\n<li>1. kood on \u00f5ige, 2. kood vale;<\/li>\n<li>1. kood on vale, 2. kood \u00f5ige;<\/li>\n<li>m\u00f5lemad on valed.<\/li>\n<\/ul>\n<p class=\"vspace\">Kas tulemus vastas teie ootustele?<\/p>\n<h3>Tehe <em>or<\/em><\/h3>\n<p class=\"vspace\">S\u00f5na &#8220;or&#8221; t\u00e4hendab t\u00f5lkes &#8220;v\u00f5i&#8221;. Selgita v\u00e4lja, mida see meie jaoks programmis t\u00e4hendab (selle t\u00e4hendus erineb pisut tavakeelsest t\u00e4hendusest). Asenda eelmise programmi valikulauses tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> tehtega <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">if pakutud_kood1 == kood1 or pakutud_kood2 == kood2:<\/pre>\n<p class=\"vspace\">Katseta n\u00fc\u00fcd programmi t\u00f6\u00f6d erinevate sisenditega, nimelt kui<\/p>\n<ul>\n<li>m\u00f5lemad koodid on \u00f5iged;<\/li>\n<li>1. kood on \u00f5ige, 2. kood vale;<\/li>\n<li>1. kood on vale, 2. kood \u00f5ige;<\/li>\n<li>m\u00f5lemad on valed.<\/li>\n<\/ul>\n<p>Kasuta saadud tulemusi j\u00e4rgmisele k\u00fcsimusele vastuse leidmiseks:<\/p>\n<p><code><\/p>\n<div id=\"h5p-46\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-46\" class=\"h5p-iframe\" data-content-id=\"46\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"Tingimuslause-3-or\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<p>Eelmise n\u00e4ite puhul olid v\u00e4lja pakutud m\u00f5ned variandid, mida katsetamisel kasutada. Need polnud valitud suvaliselt, vaid p\u00fc\u00fcdsid h\u00f5lmata k\u00f5iki p\u00f5him\u00f5tteliselt erinevaid variante. Testimine on programmeerimises v\u00e4ga oluline. V\u00e4hegi suurema programmi puhul on m\u00f5istlike testide koostamine omaette suur t\u00f6\u00f6. IT-firmades on lausa testija ametikohad ja vastavad osakonnad.<\/p>\n<h3>Tehe <em>not<\/em><\/h3>\n<p class=\"vspace\">Tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code><\/code> &#8220;p\u00f6\u00f6rab&#8221; t\u00f5ev\u00e4\u00e4rtuse vastupidiseks. N\u00e4iteks avaldise<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">not 1 == 1<\/pre>\n<p class=\"vspace\">v\u00e4\u00e4rtus on <code>False<\/code>, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">1 == 1<\/code> v\u00e4\u00e4rtus on <code>True<\/code>.<\/p>\n<h3>Loogiliste tehete kokkuv\u00f5te<\/h3>\n<p>Tehete <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code> ja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code><\/code> puhul on meil vaja kahte operandi, millega tehe toimub. Selliseid tehteid nimetatakse kahekohalisteks ehk binaarseteks. Tehe <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code><\/code> t\u00f6\u00f6tab \u00fche operandiga (on \u00fchekohaline ehk unaarne).<\/p>\n<p class=\"vspace\">Loogiliste tehete <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code><\/code> ja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not<\/code><\/code> kasutamisel on tulemused j\u00e4rgnevad:<\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">v\u00e4ide1 and v\u00e4ide2<\/code> &#8211; t\u00f5ene ainult siis, kui m\u00f5lemad v\u00e4ited on t\u00f5esed<\/li>\n<li><code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">v\u00e4ide1 or v\u00e4ide2<\/code><\/code> &#8211; t\u00f5ene siis, kui <strong>v\u00e4hemalt \u00fcks<\/strong> v\u00e4idetest on t\u00f5ene<\/li>\n<li><code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">not v\u00e4ide1<\/code><\/code> &#8211; t\u00f5ene ainult siis, kui <code>v\u00e4ide1<\/code> on v\u00e4\u00e4r.<\/li>\n<\/ul>\n<p>Sealjuures on iga v\u00e4ide avaldis t\u00f5ev\u00e4\u00e4rtusega <code>True<\/code> v\u00f5i <code>False<\/code>, mis v\u00f5ib &#8220;p\u00e4rineda&#8221; ka mingisugusest v\u00f5rdlemistehtest (nt <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">pakutud_kood1 == \"1234\"<\/code>,<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vanus &lt; 14<\/code>) v\u00f5i ka loogilisest tehtest (seda vaatame varsti).<\/p>\n<p>Tehted ja avaldised on meile p\u00f5him\u00f5tteliselt tuttavad juba koolimatemaatikast. Loogilised tehted ja avaldised vajavad veidi harjumist. \u00c4rge v\u00e4ga muretsege, kui esimese hooga k\u00f5ik veel selgeks ei saa.<\/p>\n<p>Loogilised avaldised muutuvad tingimusteks, kui neid selles rollis kasutatakse &#8211; n\u00e4iteks tingimuslauses.<\/p>\n<h2>Keerulisem tingimus<\/h2>\n<p class=\"vspace\">Vahel on tingimused keerulisemad ja programmi korraliku t\u00f6\u00f6 huvides tuleb need p\u00f5hjalikult l\u00e4bi m\u00f5elda. Olgu meil tahtmine teha salatit &#8211; kartuli- v\u00f5i makaronisalatit. Lihtsustatult oleks meil vaja kartuleid v\u00f5i makarone ja salatikastet.<\/p>\n<p class=\"vspace\">J\u00e4tame praegu t\u00e4psustamata, millest see salatikaste tehtud on ja muid detaile ka. Tegelikult kipubki p\u00e4riselu loogilistes avaldistes kirjeldamine k\u00fcllaltki keeruline olema. Programmide kirjutamisel tuleb seet\u00f5ttu teha m\u00f5ningaid lihtsustusi.<\/p>\n<p class=\"vspace\">Loogilise avaldise koostamiseks v\u00f5tame kasutusele muutujad <code>kartul_olemas<\/code>, <code>makaron_olemas<\/code> ja <code>salatikaste_olemas<\/code>. Vastavalt sellele, kas koostisosa on olemas v\u00f5i mitte, on selle muutuja v\u00e4\u00e4rtus <code>True<\/code> (on olemas) v\u00f5i <code>False<\/code> (ei ole olemas).<\/p>\n<p class=\"vspace\">P\u00fc\u00fcame n\u00fc\u00fcd kirja panna, kas saame salatit teha v\u00f5i mitte. Siin on tegelikult mitu v\u00f5imalikku m\u00f5ttek\u00e4iku ja ka avaldis v\u00f5ib l\u00f5puks tulla (n\u00e4iliselt) erinev.<\/p>\n<p class=\"vspace\">\u00dcks v\u00f5imalus oleks m\u00f5elda nii, et meil on vaja kahte koostisosa: n-\u00f6 nimiosa ja salatikastet. Nimiosas v\u00f5ib olla kartul v\u00f5i makaron &#8211; panemegi kirja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">kartul_olemas or makaron_olemas<\/code><\/code>. Sellele lisame salatikastme &#8211; <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">(kartul_olemas or makaron_olemas) and salatikaste_olemas<\/code><\/code>. Sulud t\u00e4histavad siin (nagu ka aritmeetikas ja algebras) seda, et vastav tehe sooritatakse enne v\u00e4limisi.<\/p>\n<p class=\"vspace\">J\u00e4rgmises n\u00e4ites on meil olemas kartul ja salatikaste, aga makarone pole. Kui meie m\u00f5ttek\u00e4ik on \u00f5ige olnud, siis peaks ekraanile tulema <code>True<\/code>, sest t\u00f5esti saame salatit teha. Proovi j\u00e4rele!<\/p>\n<p><strong>N\u00e4iteprogramm. Salati v\u00f5imalikkuse kontroll<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">kartul_olemas = True\r\nmakaron_olemas = False\r\nsalatikaste_olemas = True\r\nprint((kartul_olemas or makaron_olemas) and salatikaste_olemas)<\/pre>\n<p class=\"vspace\">Proovi n\u00fc\u00fcd programmi t\u00f6\u00f6d muutujate <code>kartul_olemas<\/code>, <code>makaron_olemas<\/code> ja <code>salatikaste_olemas<\/code> erinevatel v\u00e4\u00e4rtustel. Enne k\u00e4ivitamist m\u00f5tle, milline tulemus oleks ootusp\u00e4rane. Kas programm t\u00f6\u00f6tab vastavalt ootustele?<\/p>\n<h3>Tehete j\u00e4rjekord loogilises avaldises<\/h3>\n<p class=\"vspace\">Eelnevalt mainisime, et sulgude kasutamine suunab tehete j\u00e4rjekorda: sulgudes olev tehakse varem. Mis aga juhtuks, kui n\u00e4iteks avaldises <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">(a or b) and c<\/code> sulud \u00e4ra j\u00e4taksime? Kas siis nagunii ei tehtaks siin <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code>-tehet enne, sest see asub eespool?<\/p>\n<p class=\"vspace\">T\u00f5epoolest on sulud siin olulised, sest nende puudumisel tehtaks esimesena hoopis <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code><\/code>-tehe. Nimelt on kokkulepe, et <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">and<\/code> on k\u00f5rgema prioriteediga kui <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">or<\/code><\/code>, analoogiliselt tavalise aritmeetikaga, kus korrutamine tehakse enne liitmist. N\u00e4iteks <em>2 + 3 * 4<\/em> on <em>14<\/em>, aga mitte <em>20<\/em>.<\/p>\n<h3>Enesekontroll (1 k\u00fcsimus)<\/h3>\n<p><code><\/p>\n<div id=\"h5p-47\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-47\" class=\"h5p-iframe\" data-content-id=\"47\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"Tingimuslause-3-salat\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<h3>Videomaterjal<\/h3>\n<p><a href=\"https:\/\/www.uttv.ee\/naita?id=23879\" target=\"_blank\" rel=\"noopener noreferrer\">Selles videos<\/a> on veel \u00fche programmi n\u00e4ide, kus on keerulisem tingimus ja erinevad loogilised tehted.<\/p>\n","protected":false},"author":12,"menu_order":7,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-253","chapter","type-chapter","status-publish","hentry"],"part":247,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":7,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/253\/revisions"}],"predecessor-version":[{"id":460,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/253\/revisions\/460"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/parts\/247"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/253\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/media?parent=253"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapter-type?post=253"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/contributor?post=253"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/license?post=253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}