{"id":5276,"date":"2020-08-29T21:19:29","date_gmt":"2020-08-29T19:19:29","guid":{"rendered":"https:\/\/blue.pri.ee\/ttu\/?page_id=5276"},"modified":"2025-09-04T14:11:08","modified_gmt":"2025-09-04T12:11:08","slug":"tingimuslaused","status":"publish","type":"page","link":"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/","title":{"rendered":"Tingimuslaused"},"content":{"rendered":"<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#5c0808;border-radius:7px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#8f3b3b;color:#FFFFFF;border-top-left-radius:5px;border-top-right-radius:5px\">T\u00e4helepanu!<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:5px;border-bottom-right-radius:5px\">Leht on alles valmimisel, mist\u00f5ttu on m\u00f5ned kohad poolikud!<\/div><\/div>\n<p><strong>Siin on p\u00f5hjalik \u00fclevaade tingimuslausete kohta.<\/strong><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Sissejuhatus\" >Sissejuhatus<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#if-lause\" >if-lause<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Vordlusoperaatorid\" >V\u00f5rdlusoperaatorid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#if-else_lause\" >if-else lause<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Tuhjade_if-lause_koodiplokkide_kasitlemine\" >T\u00fchjade if-lause koodiplokkide k\u00e4sitlemine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Pesastatud_tingimuslaused\" >Pesastatud tingimuslaused<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#if-else_if-else_kasutamine\" >if-else if-else kasutamine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Loogikaoperaatorid\" >Loogikaoperaatorid<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Toevaartustabelid\" >T\u00f5ev\u00e4\u00e4rtustabelid<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Switch_lause\" >Switch lause<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Moned_nouanded_ja_nipid\" >M\u00f5ned n\u00f5uanded ja nipid<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Ainult_muutuja_nime_kasutamine_avaldises\" >Ainult muutuja nime kasutamine avaldises<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Uherealised_tingimuslaused_ilma_loogeliste_sulgudeta\" >\u00dcherealised tingimuslaused ilma loogeliste sulgudeta<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Uherealiste_tingimuslausete_probleemid\" >\u00dcherealiste tingimuslausete probleemid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Dangling_else_probleem\" >Dangling else probleem<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Halvasti_pesastatud_tingimuslausete_refaktoriseerimine\" >Halvasti pesastatud tingimuslausete refaktoriseerimine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Funktsiooni_valjakutsumine_tingimuslausetes\" >Funktsiooni v\u00e4ljakutsumine tingimuslausetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Omistamised_tingimuslausetes\" >Omistamised tingimuslausetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#Ternaarne_operaator\" >Ternaarne operaator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/#De_Morgani_seadus\" >De Morgani seadus<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Sissejuhatus\"><\/span>Sissejuhatus<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Tingimuslausete abil on v\u00f5imalik k\u00f5ige lihtsamal viisil juhtida programmi t\u00f6\u00f6voogu. Lihtsamalt \u00f6eldes v\u00f5imaldavad tingimuslaused muuta programmi tegevusi s\u00f5ltuvalt tingimusest, mida kontrollitakse.<\/p>\n<p>N\u00e4iteks piletim\u00fc\u00fcgis\u00fcsteem, mis kontrollib inimese vanust ja selle alusel valib tegevuse, mida programm hakkab t\u00e4itma. Alaealised ei saa piletit osta, eakatele kehtib soodushind ja \u00fclej\u00e4\u00e4nud peavad tasuma t\u00e4ishinna.<\/p>\n<p>Iga tingimuslause puhul hinnatakse, kas tingimus on <strong>t\u00f5ene<\/strong> v\u00f5i <strong>v\u00e4\u00e4r<\/strong>. Erinevates programmeerimiskeeltes on need erineval kujul. C89\/C90 standardi puhul kasutatakse t\u00e4isarve, kus <strong>t\u00f5ene on 1<\/strong> ja <strong>v\u00e4\u00e4r 0<\/strong>. C99 laienduses saab kasutada otseselt v\u00f5tmes\u00f5nu\u00a0<em>t\u00f5ene (true)<\/em> ja\u00a0<em>v\u00e4\u00e4r (false)<\/em>\u00a0kui need on manuaalselt defineeritud v\u00f5i kasutades teeki <span class=\"lang:c decode:true crayon-inline\">stdbool.h<\/span>, milles on need juba defineeritud.<\/p>\n<p>Pane t\u00e4hele, et mitmetes j\u00e4rgnevates l\u00f5ikudes on toodud ka <strong><span style=\"color: #ff0000;\">negatiivsed n\u00e4ited &#8211; mida mitte teha<\/span><\/strong><span style=\"color: #000000;\">. Need on eristatud erksa taustav\u00e4rviga.<\/span><\/p>\n<h2 data-select-like-a-boss=\"1\"><span class=\"ez-toc-section\" id=\"if-lause\"><\/span>if-lause<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>if-lause p\u00f5hivorm on<br \/>\n<span class=\"lang:c decode:true crayon-inline\">if ( expression ) statement<\/span><\/p>\n<p>Kus avaldis (<em>expression<\/em>) on tingimus, mida hinnatakse, ja\u00a0<em>statement<\/em> t\u00e4histab k\u00f5iki lauseid, mis t\u00e4idetakse, kui tingimus on t\u00f5ene.<\/p>\n<p><strong>if-lause on t\u00f5ene, kui avaldise v\u00e4\u00e4rtus on nullist erinev! <\/strong>Pane t\u00e4hele, et kuigi varasemalt \u00f6eldi, et 1 t\u00e4histab t\u00f5eset hinnangut, on tingimuslause t\u00f5ene ka siis, kui selle v\u00e4\u00e4rtus on \u00fcksk\u00f5ik milline nullist erinev arv (sealhulgas -5 v\u00f5i 100). Rohkem infot n\u00f5uannete ja nippide all.<\/p>\n<p>Vaatame n\u00e4idet. Muutuja vanus (<em>age<\/em>) algv\u00e4\u00e4rtus on 10. Tingimuslause kontrollib, kas vanus on alla 18. Kuna tingimus on t\u00f5ene, t\u00e4idetakse k\u00f5ik laused loogeliste sulgude vahel.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">#include &lt;stdio.h&gt;\r\n\r\nint main(void)\r\n{\r\n    int age = 10;\r\n\r\n    if (age &lt; 18)\r\n    {\r\n        printf(\"You are underage!\\n\");\r\n        printf(\"You are not allowed to the event without parenthal supervision!\\n\");\r\n    }\r\n\r\n    return 0;\r\n}\r\n<\/pre>\n<p><strong>Proovi j\u00e4rele<\/strong><\/p>\n<ul>\n<li>Kompileeri ja jooksuta koodi ning vaata, mis juhtub<\/li>\n<li>Muuda vanuse (<em>age<\/em>) v\u00e4\u00e4rtus 20 peale. Kas printf() laused t\u00e4idetakse ka n\u00fc\u00fcd?<\/li>\n<li>Muuda vanuse (<em>age<\/em>) v\u00e4\u00e4rtus 18 peale ja proovi uuesti. Seda nimetatakse\u00a0<strong>piirjuhuks<\/strong>. Piirjuhte peab alati testima, sest just nendega esineb k\u00f5ige sagedamini vigu.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Vordlusoperaatorid\"><\/span>V\u00f5rdlusoperaatorid<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Eeldame n\u00e4idete jaoks j\u00e4rgnevaid deklaratsioone ja v\u00e4\u00e4rtusi:<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">int a = 10;\r\nint b = 20;\r\nint c = 20;\r\n<\/pre>\n<p>M\u00e4rkus: C-keeles on v\u00f5rdlusoperaatorite tulemuseks alati kas t\u00e4isarv 1 (t\u00f5ene) v\u00f5i 0 (v\u00e4\u00e4r).<\/p>\n<table style=\"border-collapse: collapse; width: 102.951%; height: 119px;\">\n<tbody>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\"><strong>Operaator<\/strong><\/td>\n<td style=\"width: 58.7163%; height: 17px;\"><strong>Kirjeldus<\/strong><\/td>\n<td style=\"width: 29.8912%; height: 17px;\"><strong>N\u00e4ide<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\">==<\/td>\n<td style=\"width: 58.7163%; height: 17px;\">Hinnatakse t\u00f5eseks, kui m\u00f5lemad operandid on v\u00f5rdsed<\/td>\n<td style=\"width: 29.8912%; height: 17px;\">(a == c) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(b == c) &#8211;&gt; t\u00f5ene<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\">!=<\/td>\n<td style=\"width: 58.7163%; height: 17px;\">Hinnatakse t\u00f5eseks, kui operandid ei ole v\u00f5rdsed! (H\u00fc\u00fcum\u00e4rki kasutatakse eituseks)<\/td>\n<td style=\"width: 29.8912%; height: 17px;\">(a != c) &#8211;&gt; t\u00f5ene<br \/>\n(b != c) &#8211;&gt; v\u00e4\u00e4r<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\">&lt;<\/td>\n<td style=\"width: 58.7163%; height: 17px;\">Hinnatakse t\u00f5eseks, kui vasakpoolne operand on v\u00e4iksem kui parempoolne operand<\/td>\n<td style=\"width: 29.8912%; height: 17px;\">(a &lt; c) &#8211;&gt; t\u00f5ene<br \/>\n(b &lt; c) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(c &lt; a) &#8211;&gt; v\u00e4\u00e4r<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\">&lt;=<\/td>\n<td style=\"width: 58.7163%; height: 17px;\">Hinnatakse t\u00f5eseks, kui vasakpoolne operand on v\u00e4iksem v\u00f5i v\u00f5rdne parempoolse operandiga<\/td>\n<td style=\"width: 29.8912%; height: 17px;\">(a &lt;= c) &#8211;&gt; t\u00f5ene<br \/>\n(b &lt;= c) &#8211;&gt; t\u00f5ene<br \/>\n(c &lt;= a) &#8211;&gt; v\u00e4\u00e4r<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\">&gt;<\/td>\n<td style=\"width: 58.7163%; height: 17px;\">Hinnatakse t\u00f5eseks, kui vasakpoolne operand on suurem kui parempoolne operand<\/td>\n<td style=\"width: 29.8912%; height: 17px;\">(a &gt; c) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(b &gt; c) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(c &gt; a) &#8211;&gt; t\u00f5ene<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 14.346%; height: 17px;\">&gt;=<\/td>\n<td style=\"width: 58.7163%; height: 17px;\">Hinnatakse t\u00f5eseks, kui vasakpoolne operand on suurem v\u00f5i v\u00f5rdne parempoolse operandiga<\/td>\n<td style=\"width: 29.8912%; height: 17px;\">(a &gt;= c) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(b &gt;= c) &#8211;&gt; t\u00f5ene<br \/>\n(c &gt;= a) &#8211;&gt; t\u00f5ene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span class=\"ez-toc-section\" id=\"if-else_lause\"><\/span>if-else lause<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Et lisada alternatiivset k\u00e4itumist, mis t\u00e4idetakse kui tingimus ei ole t\u00f5ene, saame lisada else lause. Else-plokis olevad laused t\u00e4idetakse juhul, kui avaldis hinnatakse v\u00e4\u00e4raks.<\/p>\n<p><span class=\"lang:c decode:true crayon-inline\">if ( expression ) statement else statement<\/span><\/p>\n<p>Vaatame eelmist n\u00e4idet ja lisame sinna else lause. N\u00fc\u00fcd t\u00e4idetakse olenevalt muutuja <em>age<\/em> v\u00e4\u00e4rtusest kas if-plokis olevad laused v\u00f5i else-plokis olevad laused.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">int age = 30;\r\n\r\nif (age &lt; 18)\r\n{\r\n    printf(\"You are underage!\\n\");\r\n    printf(\"You are not allowed to the event without parental supervision!\\n\");\r\n}\r\nelse\r\n{\r\n    printf(\"Age is verified, you are welcome to participate!\\n\");\r\n}<\/pre>\n<p><strong>Proovi j\u00e4rele<\/strong><\/p>\n<p>Muutuja\u00a0<em>age\u00a0<\/em>algv\u00e4\u00e4rtus on n\u00fc\u00fcd 30. Seega:<\/p>\n<ol>\n<li>Tingimus if (age &lt; 18) hinnatakse v\u00e4\u00e4raks, sest\u00a0<em>age<\/em> v\u00e4\u00e4rtus on 30.<\/li>\n<li>Koodiplokk ridadel 3 &#8211; 6 j\u00e4etakse vahele. Seej\u00e4rel leitakse 7. real else ning t\u00e4idetakse loogeliste sulgude vahel olevad laused.<\/li>\n<\/ol>\n<p><strong><span style=\"color: #ff0000;\">\u00c4ra kunagi j\u00e4ta koodiplokki t\u00fchjaks!<\/span> See on halb stiil! Kui sul ei ole midagi lisada koodiplokki, mis t\u00e4idetakse kui if-lause tingimus on t\u00f5ene, siis p\u00f6\u00f6ra see tingimus vastupidiseks.<\/strong><\/p>\n<pre class=\"theme:undefined toolbar:2 lang:c decode:true\">if (age &lt; 18) \/\/ DO NOT DO THIS!!! This is incorrect!\r\n{\r\n\r\n}\r\nelse\r\n{\r\n    printf(\"Age is verified, you are welcome to participate!\\n\");\r\n}<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Tuhjade_if-lause_koodiplokkide_kasitlemine\"><\/span>T\u00fchjade if-lause koodiplokkide k\u00e4sitlemine<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sul ei tohiks kunagi olla t\u00fchja koodiplokki. Kui see siiski peaks juhtuma, on kaks v\u00f5imalust, kuidas seda lahendada.<\/p>\n<ol>\n<li>Leia vastupidine tingimus ja kasuta seda<\/li>\n<li>P\u00f6\u00f6ra algne tingimus \u00fcmber kasutades inversioonioperaatorit (!)<\/li>\n<\/ol>\n<p>V\u00f5tame eelnevast osast halva n\u00e4ite ja parandame selle. Esiteks, proovime leida vastupidise tingimuse. Et leida inimesi, kes\u00a0<strong>ei ole<\/strong> nooremad kui 18, tuleb otsida inimesi kes on vanemad kui 18 v\u00f5i <strong>t\u00e4pselt<\/strong> 18-aastased.<\/p>\n<p><strong>Levinud viga: <\/strong>tingimuse\u00a0<span class=\"lang:c decode:true crayon-inline\">(age &lt; 18)<\/span>\u00a0 vastupidine tingimus ei ole <span class=\"lang:c decode:true crayon-inline\">(age &gt; 18)<\/span>, vaid <span class=\"lang:c decode:true crayon-inline\">(age &gt;= 18)<\/span>. J\u00e4lgi piirjuhte!<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">if (age &gt;= 18)\r\n{\r\n    printf(\"Age is verified, you are welcome to participate!\\n\");\r\n}<\/pre>\n<p>Teine v\u00f5imalus on inverteerida algne tingimus. Seda saab teha kasutades inversioonioperaatorit (! &#8211; h\u00fc\u00fcum\u00e4rk). Sellisel juhul v\u00f5etakse kogu algne tingimus, pannakse see sulgude vahele ja inverteeritakse see.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">if (!(age &lt; 18))\r\n{\r\n    printf(\"Age is verified, you are welcome to participate!\\n\");\r\n}<\/pre>\n<h2 data-select-like-a-boss=\"1\"><span class=\"ez-toc-section\" id=\"Pesastatud_tingimuslaused\"><\/span>Pesastatud tingimuslaused<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Mitut if-lauset saab \u00fcksteise sisse pesastada. Siiski ole sellega ettevaatlik, sest see v\u00f5ib programmi struktuuri nii segi ajada, et vea ilmnemisel kulub selle silumiseks v\u00e4ga palju aega. Enne pesastatud tingimuslausete kirjutamist kaalu, kas saaksid selle asemel kasutada\u00a0<strong>else if\u00a0<\/strong>lauseid, \u00fchendada mitu tingimust\u00a0<strong>loogikaoperaatoritega<\/strong> v\u00f5i kasutada teisi\u00a0<strong>refaktoriseerimistehnikaid<\/strong>. Vaata allpool olevaid peat\u00fckke.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">if (age &gt;= 18)\r\n{\r\n    if (age &lt; 65)\r\n    {\r\n        printf(\"Tickets for adults: 10 euros\\n\");\r\n    }\r\n    else\r\n    {\r\n        printf(\"Tickets for seniors: 4 euros\\n\");\r\n    }\r\n}\r\nelse\r\n{\r\n    printf(\"Minors only allowed with parental supervision\\n\");\r\n}\r\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"if-else_if-else_kasutamine\"><\/span>if-else if-else kasutamine<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Mitme tingimuse alamkomplekti kontrollimiseks saame kasutada\u00a0<strong>else if\u00a0<\/strong>lauseid. K\u00f5igepealt kontrollitakse esimest tingimust ja seej\u00e4rel liigutakse j\u00e4rgmise tingimuse juurde. Kui \u00fcks tingimus hinnatakse t\u00f5eseks, t\u00e4idetakse sellele vastav koodiplokk. P\u00e4rast esimese t\u00f5ese tingimuse leidmist j\u00e4rgnevaid tingimusi enam ei kontrollita. Kui \u00fckski tingimus ei osutu t\u00f5eseks, t\u00e4idetakse <strong>else<\/strong> lause (kui see on olemas).<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">int age = 30;\r\n\r\nif (age &lt; 18)\r\n{\r\n    printf(\"Minors only allowed with parental supervision\\n\");\r\n}\r\nelse if (age &gt;= 65)\r\n{\r\n    printf(\"Tickets for seniors: 4 euros\\n\");\r\n}\r\nelse\r\n{\r\n    printf(\"Tickets for adults: 10 euros\\n\");\r\n}\r\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Loogikaoperaatorid\"><\/span>Loogikaoperaatorid<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>C keeles on defineeritud kolm loogikaoperaatorit. Pane t\u00e4hele, et loogikaoperaatorid on <em>bitwise\u00a0<\/em>operaatoritest erinevad.<\/p>\n<p>Eeldame n\u00e4idete jaoks j\u00e4rgmisi deklaratsioone ja v\u00e4\u00e4rtusi:<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">int a = 0;\r\nint b = 10;\r\nint c = 20;\r\n<\/pre>\n<table style=\"border-collapse: collapse; width: 100%; height: 262px;\">\n<tbody>\n<tr style=\"height: 16px;\">\n<td style=\"width: 15.3629%; height: 16px;\"><strong>Operaator<\/strong><\/td>\n<td style=\"width: 22.551%; height: 16px;\"><strong>Tehe<\/strong><\/td>\n<td style=\"width: 29.4574%; height: 16px;\"><strong>Tulemus on t\u00f5ene kui &#8230;<\/strong><\/td>\n<td style=\"width: 32.6286%;\"><strong>N\u00e4ide<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 82px;\">\n<td style=\"width: 15.3629%; text-align: center; height: 82px;\" width=\"208\">&amp;&amp;<\/td>\n<td style=\"width: 22.551%; height: 82px;\" width=\"426\">Loogiline JA<\/p>\n<p>Konjunktsioon<\/td>\n<td style=\"width: 29.4574%; height: 82px;\" width=\"471\">&#8230; m\u00f5lemad pooled on t\u00f5esed<\/td>\n<td style=\"width: 32.6286%;\">(a &amp;&amp; b) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(b &amp;&amp; c) &#8211;&gt; t\u00f5ene<br \/>\n((a &lt; b) &amp;&amp; (b &lt; c)) &#8211;&gt; t\u00f5ene<\/td>\n<\/tr>\n<tr style=\"height: 82px;\">\n<td style=\"width: 15.3629%; text-align: center; height: 82px;\" width=\"208\">||<\/td>\n<td style=\"width: 22.551%; height: 82px;\" width=\"426\">Loogiline V\u00d5I<\/p>\n<p>Disjunktsioon<\/td>\n<td style=\"width: 29.4574%; height: 82px;\" width=\"471\">&#8230; v\u00e4hemalt \u00fcks on t\u00f5ene<\/td>\n<td style=\"width: 32.6286%;\">(a || b) &#8211;&gt; t\u00f5ene<br \/>\n((a &gt; b) || (b &gt; c)) &#8211;&gt; v\u00e4\u00e4r<br \/>\n((a &lt; b) || (b &gt; c)) &#8211;&gt; t\u00f5ene<\/td>\n<\/tr>\n<tr style=\"height: 82px;\">\n<td style=\"width: 15.3629%; text-align: center; height: 82px;\" width=\"208\">!<\/td>\n<td style=\"width: 22.551%; height: 82px;\" width=\"426\">Loogiline eitus<\/p>\n<p>Inversioon<\/td>\n<td style=\"width: 29.4574%; height: 82px;\" width=\"471\">&#8230; algtingimus on v\u00e4\u00e4r<\/td>\n<td style=\"width: 32.6286%;\">(!a) &#8211;&gt; t\u00f5ene<br \/>\n(!b) &#8211;&gt; v\u00e4\u00e4r<br \/>\n(!a || !b) &#8211;&gt; t\u00f5ene<br \/>\n(!(a || b)) &#8211;&gt; v\u00e4\u00e4r<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"Toevaartustabelid\"><\/span>T\u00f5ev\u00e4\u00e4rtustabelid<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"su-row\"><div class=\"su-column su-column-size-1-3\"><div class=\"su-column-inner su-u-clearfix su-u-trim\">\n<p>Logiline JA<\/p>\n<table style=\"border-collapse: collapse; width: 56.162%; height: 81px;\">\n<tbody>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">A<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">B<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">A &amp;&amp; B<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 7.69227%; height: 17px; text-align: center;\">0<\/td>\n<td style=\"width: 5.82745%; height: 17px; text-align: center;\">0<\/td>\n<td style=\"width: 42.9001%; height: 17px; text-align: center;\">0<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">0<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">0<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">0<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">0<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div><\/div>\n<div class=\"su-column su-column-size-1-3\"><div class=\"su-column-inner su-u-clearfix su-u-trim\">\n<p>Loogiline V\u00d5I<\/p>\n<table style=\"border-collapse: collapse; width: 56.162%; height: 81px;\">\n<tbody>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">A<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">B<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">A || B<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 7.69227%; height: 17px; text-align: center;\">0<\/td>\n<td style=\"width: 5.82745%; height: 17px; text-align: center;\">0<\/td>\n<td style=\"width: 42.9001%; height: 17px; text-align: center;\">0<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">0<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">1<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">0<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">1<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 5.82745%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 42.9001%; height: 16px; text-align: center;\">1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div><\/div><div class=\"su-column su-column-size-1-3\"><div class=\"su-column-inner su-u-clearfix su-u-trim\">\n<p>Inversioon<\/p>\n<table style=\"border-collapse: collapse; width: 27.1127%; height: 81px;\">\n<tbody>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">A<\/td>\n<td style=\"width: 13.9527%; height: 16px; text-align: center;\">!A<\/td>\n<\/tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 7.69227%; height: 17px; text-align: center;\">0<\/td>\n<td style=\"width: 13.9527%; height: 17px; text-align: center;\">1<\/td>\n<\/tr>\n<tr style=\"height: 16px;\">\n<td style=\"width: 7.69227%; height: 16px; text-align: center;\">1<\/td>\n<td style=\"width: 13.9527%; height: 16px; text-align: center;\">0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div><\/div><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Switch_lause\"><\/span>Switch lause<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Switch lause otsib t\u00e4pset vastet avaldiste vahel. Kui vaste leitakse, k\u00e4ivitatakse kood kuni <strong>switch lause l\u00f5puni<\/strong> v\u00f5i kuni <strong>break<\/strong> lauseni. Pane t\u00e4hele, et kui break lauset ei ole, siis t\u00e4idetakse ka j\u00e4rgnevates <em>case<\/em>&#8217;des olevad laused. Olenevalt kasutusjuhust v\u00f5ib see olla kas viga v\u00f5i taotluslik k\u00e4itumine.<\/p>\n<p>Vaikimisi (<em>default<\/em>) juhtum on valikuline, kuid tungivalt soovituslik. Kui \u00fckski\u00a0<em>case<\/em> ei vasta avaldisele, t\u00e4idetakse vaikimisi juhtumi laused.<\/p>\n<pre class=\"toolbar:2 nums-toggle:false lang:c decode:true\">switch (expression)\r\n{\r\n    case constant or expression:\r\n        statements\r\n        break;\r\n    case constant or expression:\r\n        statements\r\n        break;\r\n    default:\r\n        statements\r\n}<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Moned_nouanded_ja_nipid\"><\/span>M\u00f5ned n\u00f5uanded ja nipid<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>J\u00e4rgnev osa on erinevate viiside kombinatsioon tingimuslausete t\u00f5husaks kasutamiseks.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ainult_muutuja_nime_kasutamine_avaldises\"><\/span>Ainult muutuja nime kasutamine avaldises<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>See tehnika tugineb arusaamisele, et t\u00e4isarv 0 loetakse C keeles v\u00e4\u00e4rtuseks v\u00e4\u00e4r (<span class=\"lang:c decode:true crayon-inline\">false<\/span>). K\u00f5iki teisi (nullist erinevaid) v\u00e4\u00e4rtusi loetakse mitte-v\u00e4\u00e4raks (<span class=\"lang:c decode:true crayon-inline\">true<\/span>).<\/p>\n<p>Sellises tingimuses kasutatakse sageli inversioonioperaatorit (!) vajaliku tingimuse kiireks saamiseks.<\/p>\n<p>Proovi j\u00e4rgmist koodi, andes muutuja algv\u00e4\u00e4rtuseks 0, 1, -1 jne.<\/p>\n<pre class=\"toolbar:2 nums-toggle:false lang:c decode:true\">int inputDataValidation = 0;\r\nif (!inputDataValidation) \/\/ any non-zero value will evaluate to true (notice inversion)\r\n{\r\n    printf(\"The data validation has failed!\\n\");\r\n}\r\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Uherealised_tingimuslaused_ilma_loogeliste_sulgudeta\"><\/span>\u00dcherealised tingimuslaused ilma loogeliste sulgudeta<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Eelmises n\u00e4ites on n\u00e4idatud, et t\u00e4idetavad laused on alati sulgude sees. See ei ole n\u00f5ue. C keeles v\u00f5ib nii ts\u00fckleid kui tingimuslauseid kirjutada ilma loogeliste sulgudeta, aga sellisel juhul kuulub tingimuslause v\u00f5i ts\u00fckli juurde <strong>ainult esimene lause, mis j\u00e4rgneb tingimusele<\/strong>.<\/p>\n<p>J\u00e4rgnev n\u00e4ide on t\u00e4iesti korrektne if-else lause ja t\u00f6\u00f6tab ootusp\u00e4raselt.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">int age = 30;\r\nif (age &lt; 18)\r\n    printf(\"You are underage!\\n\");\r\nelse\r\n    printf(\"Age is verified, you are welcome to participate!\\n\");<\/pre>\n<p>Need on enamasti eelistatud ruumi kokkuhoiu t\u00f5ttu ja tihti kasutavad neid just kogenud programmeerijad. M\u00f5nikord v\u00f5ib n\u00e4ha, et lause kirjutatakse tingimuslause algusega samale reale, et s\u00e4\u00e4sta veel rohkem ruumi.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">int age;\r\n\r\nprintf(\"How old are you?\\n\");\r\nscanf(\"%d\", &amp;age);\r\n\r\nif (age &lt; 18) exit(1);\r\n\r\nprintf(\"Welcome to the event!\\n\");<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Uherealiste_tingimuslausete_probleemid\"><\/span>\u00dcherealiste tingimuslausete probleemid<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>V\u00e4hem kogenud peaksid selliste kompaktsete vormide kasutamisel ettevaatlikud olema. Programmeerimist alustades on mitmeid p\u00f5hjuseid, miks neid pigem v\u00e4ltida.<\/p>\n<p><strong>1. Eba\u00fchtlane stiil<\/strong><\/p>\n<p>Pead eristama ja m\u00e4rkama erinevaid viise lausete kirjutamisel. See v\u00f5ib tekitada alguses segadust. Vahel v\u00f5ib m\u00f5ni lause j\u00e4\u00e4da kahe silma vahele ja see tekitab vigu, mida on t\u00fclikas \u00fcles leida.<\/p>\n<p><strong>2. Suurem t\u00f5en\u00e4osus teha kogemata vigu lausete lisamisel v\u00f5i eemaldamisel<\/strong><\/p>\n<p>Sageli teed koodi kirjutamise ajal v\u00f5i hiljem muudatusi. Ilma piisava kogemuseta v\u00f5id unustada sulgude lisamise, kui lisad uue rea.<\/p>\n<p>V\u00f5tame eelneva vanusekontrolli n\u00e4ite, kus anti teade ainult alaealisusest, ja lisame sinna veel \u00fche <span class=\"lang:c decode:true crayon-inline\">printf()<\/span> lause, mis meenutab, et on vaja vanemlikku j\u00e4relvalvet. Kasutame vormindamisel ka taanet, et j\u00e4\u00e4ks mulje nagu see kuuluks tingimuslause juurde.<\/p>\n<pre class=\"theme:github-copy toolbar:2 nums:false lang:c decode:true\">if (age &lt; 18)\r\n    printf(\"You are underage!\\n\");\r\n    printf(\"You are not allowed to the event without parental supervision!\\n\");\r\n\r\nprintf(\"The tickets cost 20 euros!\"\\n);<\/pre>\n<p>Kui vanus on alla 18, t\u00e4idetakse k\u00f5ik 3 <span class=\"lang:c decode:true crayon-inline\">printf()<\/span>\u00a0 lauset, mis on ootusp\u00e4rane. Kui aga unustad testida vastupidist juhtu &#8211; kui vanus on \u00fcle 18, ei pruugi sa isegi teada, et seal on viga. \u00dcle 18-aastaste puhul tuleb ikkagi hoiatus vanemliku j\u00e4rlvalve vajaduse kohta, kuigi see ei olnud arendaja kavatsus.<\/p>\n<p><strong>3. V\u00e4ldi mitmem\u00f5ttelisust pesastatud tingimuslausete kasutamisel<\/strong><\/p>\n<p>Seda nimetatakse ka\u00a0<em>dangling else<\/em> probleemiks, millest on t\u00e4psemalt r\u00e4\u00e4gitud allpool.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Dangling_else_probleem\"><\/span><em>Dangling else<\/em> probleem<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>See viib meid tagasi pesastatud if-lausete juurde. Vaatame n\u00e4idet:<\/p>\n<pre class=\"theme:github-copy toolbar:2 nums:false lang:c decode:true\">int age = 20;\r\nif (age &gt;= 18)\r\n    if (age &lt; 65)\r\n        printf(\"Price for full ticket: 10 euros\\n\");\r\nelse\r\n    printf(\"Minors are not allowed without a guardian\\n\");<\/pre>\n<p>S\u00fcntaksi m\u00f5ttes on kood korrektne ja kompileerub. See sisaldab pesastatud if-lauset, mis v\u00e4ljastab k\u00f5igile 18-65aastastele pileti t\u00e4ishinna. <strong>Funktsionaalselt on see aga vale ja seda nimetatakse\u00a0<em>dangling else<\/em> probleemiks.<\/strong> Lihtsamalt \u00f6eldes &#8211; millise\u00a0 <span class=\"lang:c decode:true crayon-inline \">if<\/span> lause juurde <span class=\"lang:c decode:true crayon-inline\">else<\/span> kuulub? Probleemi s\u00fcvendab koodi vormindus, mis j\u00e4tab mulje, et kood on korrektne. Kuid tuletame meelde, et t\u00fchikud ei m\u00f5juta C keelt. Kogu kood v\u00f5iks olla \u00fchel real ja see ikkagi kompileeruks.<\/p>\n<p>Kui su kompilaatoris on asjakohased hoiatused lubatud, n\u00e4ed selle kohta hoiatust:<br \/>\n<span class=\"lang:c highlight:0 decode:true crayon-inline \">warning: suggest explicit braces to avoid ambiguous &#8216;else&#8217; [-Wdangling-else]|<\/span><\/p>\n<p><strong>Proovi koodi!<\/strong> Proovi seda nii, et vanus on 20. Seej\u00e4rel proovi nii, et vanus on 80. Nagu n\u00e4ha, kuulub else viimase if-lause juurde mitte esimese.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Halvasti_pesastatud_tingimuslausete_refaktoriseerimine\"><\/span>Halvasti pesastatud tingimuslausete refaktoriseerimine<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Kuigi if-else lauseid on v\u00f5imalik pesastada, et luua olukordi, mille puhul peab olema t\u00e4idetud mitu tingimust, l\u00f5ppeb see sageli halvasti loetava koodiga. Sellist koodi on raske j\u00e4lgida, siluda ning sageli v\u00f5ib esineda harusid, mis osutuvad kas alati t\u00f5eseks v\u00f5i alati v\u00e4\u00e4raks.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">#include &lt;stdio.h&gt;\r\n\r\nint main(void)\r\n{\r\n    int age = 20;\r\n    if (age &gt;= 18)\r\n    {\r\n        if (age &lt; 65)\r\n        {\r\n            printf(\"Price for full ticket: 10 euros\\n\");\r\n        }\r\n        else\r\n        {\r\n            printf(\"Price for elderly: 4 euros\\n\");\r\n        }\r\n    }\r\n    else\r\n    {\r\n        printf(\"Minors are not allowed without a guardian\\n\");\r\n    }\r\n    return 0;\r\n}\r\n<\/pre>\n<p>Seda saab refaktoriseerida mitmel viisil. \u00dcks v\u00f5imalus on j\u00e4rjestada tingimused \u00fcmber ja kasutada <span class=\"lang:c decode:true crayon-inline\">else if<\/span> lauset.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">if (age &lt; 18)\r\n    printf(\"Minors are not allowed without a guardian\\n\");\r\nelse if (age &gt;= 65)\r\n    printf(\"Price for elderly: 4 euros\\n\");\r\nelse\r\n    printf(\"Price for full ticket: 10 euros\\n\");\r\n<\/pre>\n<p>Sellel on nii plusse kui miinuseid. Plussiks on see, et kood on kergesti loetav. K\u00f5igepealt kontrollitakse spetsiifilisemad juhud ja l\u00f5puks j\u00e4\u00e4b j\u00e4rele \u00fcldine juhtum.<\/p>\n<p>Miinuseks v\u00f5ib olla see, et kood peab olema h\u00e4sti optimeeritud kiiruse jaoks ja s\u00fcndmus on peamiselt m\u00f5eldud t\u00e4iskasvanutele. Sellisel juhul t\u00e4idetakse k\u00f5ige t\u00f5en\u00e4olisemalt t\u00e4iskasvanute haru, kuid enne seda kontrollitakse k\u00f5iki teisi tingimusi. See muudab koodi aeglasemaks. Refaktoriseerimine h\u00f5lmab sageli ka kiiruse v\u00f5i m\u00e4lukasutuse optimeerimist, mis p\u00f5hineb t\u00f5en\u00e4osusteoorial (vastavalt meie andmete iseloomule, milline tingimus on k\u00f5ige t\u00f5en\u00e4olisem).<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true \">if (age &gt;= 18 &amp;&amp; age &lt; 65)\r\n    printf(\"Price for full ticket: 10 euros\\n\");    \r\nelse if (age &gt;= 65)\r\n    printf(\"Price for elderly: 4 euros\\n\");\r\nelse\r\n    printf(\"Minors are not allowed without a guardian\\n\");\r\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Funktsiooni_valjakutsumine_tingimuslausetes\"><\/span>Funktsiooni v\u00e4ljakutsumine tingimuslausetes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Koodi loetavuse parandamiseks tasub see jaotada v\u00e4ikesteks \u00fche-eesm\u00e4rgilisteks funktsioonideks. Kui sellised funktsioonid tagastavad v\u00e4\u00e4rtuse, saab seda kontrollida tingimuslauses.<\/p>\n<p>Saame kasutada v\u00f5rdlusoperaatoreid, et v\u00f5rrelda funktsioonist tagastatud v\u00e4\u00e4rtust kriteeriumiga. Vaatame funktsiooni, mis loendab komade arvu s\u00f5nes.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">int NumOfCommas(char *str)\r\n{\r\n    int count = 0;\r\n    int i = 0;\r\n    while (str[i])\r\n    {\r\n        if (str[i] == ',')\r\n            count++;\r\n        i++;\r\n    }\r\n    return count;\r\n}<\/pre>\n<p>N\u00fc\u00fcd kutsume selle funktsiooni v\u00e4lja tingimuslauses.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">char *t = \"Hello, world!\";\r\nif (NumOfCommas(t) &gt; 0)\r\n{\r\n    printf(\"The text has at least 1 comma!\\n\");\r\n}<\/pre>\n<p>V\u00f5id ka kasutada varasemalt tutvustatud v\u00f5imalusi ja muuta seel\u00e4bi kood puhtamaks.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">char *t = \"Hello, world!\"; \r\nif (NumOfCommas(t))\r\n    printf(\"The text has at least 1 comma!\\n\");<\/pre>\n<p>Ilmselt n\u00e4ed palju sarnaselt kirutatud koodi andmete valideerimisel, kus funktsioonid tagastavad ainult\u00a0<em>true\/false<\/em> v\u00e4\u00e4rtusi.<\/p>\n<p>N\u00e4iteks v\u00f5iksid meil olla funktsioonid nagu <span class=\"lang:c decode:true crayon-inline\">SentenceBeginsWithChar()<\/span> , <span class=\"lang:c decode:true crayon-inline\">SentenceMoreThanOneWord()<\/span> , <span class=\"lang:c decode:true crayon-inline \">SentenceEndWithPunctuation()<\/span> , <span class=\"lang:c decode:true crayon-inline \">ContainsAVerb()<\/span> jne &#8211; kui k\u00f5ik need on t\u00f5esed, loetakse seda ilmselt korrektselt moodustatud lauseks.<\/p>\n<p>Nagu tavaliselt, saab seda kombineerida teiste tingimuslausetega. Samuti v\u00f5ib tingimuslause sees olla mitu funktsiooni v\u00e4ljakutset, aga need peavad olema formuleeritud vastavalt keele reeglitele.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Omistamised_tingimuslausetes\"><\/span>Omistamised tingimuslausetes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Seda kasutatakse rohkem ts\u00fcklites, kuid see esineb ka n\u00e4iteks andmete valideerimisel. Seda v\u00f5ib pidada kaks \u00fches opratsiooniks &#8211; selle asemel, et k\u00f5igepealt omistada v\u00e4\u00e4rtus ja p\u00e4rast kontrollida, saab need kaks kombineerida.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ternaarne_operaator\"><\/span>Ternaarne operaator<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>TODO<\/p>\n<p>Ternaarne operaator on sisuliselt l\u00fchike viis kirjutada if-else lauset. Selle eelis on see, et seda saab kasutada kohtades, kus if-else lauset ei saa kasutada, seet\u00f5ttu nimetatakse seda vahel ka\u00a0<em>inline if<\/em>-ks. Keeles\u00fcntaksi j\u00e4rgi eraldatakse avaldisi s\u00fcmbolitega <span class=\"lang:c decode:true crayon-inline\">?<\/span> ja <span class=\"lang:c decode:true crayon-inline\">:<\/span>\u00a0.<\/p>\n<p data-select-like-a-boss=\"1\"><span class=\"lang:c decode:true crayon-inline\">expression ? expression : expression;<\/span><\/p>\n<p>See ei ole eriti loetav, kui sa just ei tea t\u00e4pselt, mida vaatad. Kirjutame selle veidi arusaadavamalt lahti<\/p>\n<p><span class=\"lang:c decode:true crayon-inline \">(condition_to_check) ? expression(s)_if_true : expression(s)_if_false;<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"De_Morgani_seadus\"><\/span>De Morgani seadus<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>TODO<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Siin on p\u00f5hjalik \u00fclevaade tingimuslausete kohta. Sissejuhatus Tingimuslausete abil on v\u00f5imalik k\u00f5ige lihtsamal viisil juhtida programmi t\u00f6\u00f6voogu. Lihtsamalt \u00f6eldes v\u00f5imaldavad tingimuslaused muuta programmi tegevusi s\u00f5ltuvalt tingimusest, mida kontrollitakse. N\u00e4iteks piletim\u00fc\u00fcgis\u00fcsteem, mis kontrollib inimese vanust ja selle alusel valib tegevuse, mida programm hakkab t\u00e4itma. Alaealised ei saa piletit osta, eakatele kehtib soodushind ja \u00fclej\u00e4\u00e4nud peavad tasuma &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tingimuslaused\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Tingimuslaused<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":5274,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"page-templates\/code-width-wide.php","meta":{"footnotes":""},"class_list":["post-5276","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/5276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/comments?post=5276"}],"version-history":[{"count":5,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/5276\/revisions"}],"predecessor-version":[{"id":10537,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/5276\/revisions\/10537"}],"up":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/5274"}],"wp:attachment":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/media?parent=5276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}