{"id":8719,"date":"2023-08-24T12:11:10","date_gmt":"2023-08-24T10:11:10","guid":{"rendered":"https:\/\/blue.pri.ee\/ttu\/?page_id=8719"},"modified":"2026-06-16T16:28:49","modified_gmt":"2026-06-16T14:28:49","slug":"tsuklid","status":"publish","type":"page","link":"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/","title":{"rendered":"Ts\u00fcklid"},"content":{"rendered":"<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-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Sissejuhatus\" >Sissejuhatus<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#While_tsukkel\" >While ts\u00fckkel<\/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\/tsuklid\/#For_tsukkel\" >For ts\u00fckkel<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#C90_vs_C99_standardiga_for_tsukli_deklaratsioon\" >C90 vs C99 standardiga for ts\u00fckli deklaratsioon<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Do_%E2%80%A6_while_tsukkel\" >Do &#8230; while ts\u00fckkel<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Lopmatud_tsuklid\" >L\u00f5pmatud ts\u00fcklid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Pesastatud_tsuklid\" >Pesastatud ts\u00fcklid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Programmivoo_kontrolllaused\" >Programmivoo kontrolllaused<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#break_lause\" >break lause<\/a><\/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\/tsuklid\/#Continue_lause\" >Continue lause<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Tsuklid_millel_puudub_tsukli_keha\" >Ts\u00fcklid, millel puudub ts\u00fckli keha<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Keha_puudumine_kui_koodimisviga\" >Keha puudumine kui koodimisviga<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/#Tahtlikult_puuduv_tsukli_keha\" >Tahtlikult puuduv ts\u00fckli keha<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"Sissejuhatus\"><\/span>Sissejuhatus<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Ts\u00fckkel on \u00fcks k\u00f5ige olulisematest programmeerimise alustaladest, mille abil saame\u00a0<strong>enda m\u00e4\u00e4ratud koodiploki sisu korrata<\/strong> &#8211; st saame valida millised laused koodis korduvad ning mis tingimustel. Korratavat koodiplokki nimetatakse <strong>ts\u00fckli kehaks<\/strong>. C keeles \u00fcmbritsetakse ts\u00fckli keha tavap\u00e4raselt loogeliste sulgudega <span class=\"lang:c highlight:0 decode:true crayon-inline \">{ }<\/span>\u00a0.<\/p>\n<p>Ts\u00fckli keha kordub senikaua kuniks <strong>vastavat ts\u00fcklit kontrolliv tingimus on t\u00f5ene<\/strong>. Ts\u00fckli tingimuse korrektne koostamine on \u00e4\u00e4rmiselt oluline, et ts\u00fckkel t\u00f6\u00f6taks ootusp\u00e4raselt ja seel\u00e4bi ka meie programm t\u00f6\u00f6taks nii nagu vaja.<\/p>\n<p>Ts\u00fckleid on v\u00f5imalik jaotada <strong>eelkontrolliga<\/strong>\u00a0 (<em>entry-controlled<\/em>) ja <strong>j\u00e4relkontrolliga<\/strong> (<em>exit-controlled<\/em>) ts\u00fckliteks. Ts\u00fckli liigi otsustab <strong>millal<\/strong> ts\u00fckli tingimust kontrollitakse &#8211; st kas <strong>enne v\u00f5i p\u00e4rast<\/strong> ts\u00fckli keha moodustavate koodilausete k\u00e4ivitamist.<\/p>\n<p>\u00dcldiselt on enamikes programmeerimiskeeltes saadaval sarnane komplekt ts\u00fckleid. C keel toetab kolme ts\u00fckli liiki &#8211; <span class=\"lang:c highlight:0 decode:true crayon-inline \">while<\/span> , <span class=\"lang:c highlight:0 decode:true crayon-inline \">do &#8230; while<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span> . C keel ei toeta <span class=\"lang:c highlight:0 decode:true crayon-inline\">for each<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fcklit, mida osad keeled toetavad.<\/p>\n<p>Igal ts\u00fckli t\u00fc\u00fcbil on omad eelised, mis tingivad \u00fche v\u00f5i teise ts\u00fckli eelistamise vastavalt kasutusjuhule. Sobiliku ts\u00fckli t\u00fc\u00fcbi kasutamine annab meile eeliseid nii koodi kirjutamise mugavuses kui ka selguses (loetavuses). \u00dcldiselt on siiski v\u00f5imalik saavutadasama tulemus \u00fcksk\u00f5ik <strong>millise ts\u00fckli t\u00fc\u00fcbiga<\/strong>, lihtsalt lahendus v\u00f5ib olla kohmakam.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"While_tsukkel\"><\/span>While ts\u00fckkel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Tegu on k\u00f5ige lihtsama ja levinuima ts\u00fcklit\u00fc\u00fcbiga. <span class=\"lang:c highlight:0 decode:true crayon-inline \">while<\/span>\u00a0 ts\u00fckkel on eelkontrolliga ts\u00fckkel, st esmalt kontrollitakse ts\u00fckli tingimust ja vaid siis kui see on t\u00f5ene, k\u00e4ivitatakse ts\u00fckli keha. See v\u00f5ib tekitada olukordi, kus ts\u00fckkel ei k\u00e4ivitu mitte kunagi.<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_while.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8710\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_while.png\" alt=\"\" width=\"340\" height=\"387\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_while.png 579w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_while-264x300.png 264w\" sizes=\"auto, (max-width: 340px) 100vw, 340px\" \/><\/a><\/p>\n<p>Ainuke kohustuslik element <span class=\"lang:c highlight:0 decode:true crayon-inline \">while<\/span>\u00a0 ts\u00fckli struktuuris on selle tingimus &#8211; st kas ts\u00fckli keha tohib k\u00e4ivitada v\u00f5i mitte. Tingimust kontrollitakse <strong>iga ts\u00fckli korduse eel<\/strong>.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">while (condition)\r\n{\r\n    \/\/ loop body\r\n}<\/pre>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline\">while<\/span> t\u00fc\u00fcpi ts\u00fckleid kasutatakse peamiselt siis kui vajalik korduste arv ei ole teada koodi kirjutamise ajal. See h\u00f5lmab endas ka olukordi, kus ts\u00fcklit korratakse l\u00f5pmata arv kordi.<\/p>\n<p><strong>N\u00e4ide:<\/strong> Kuva k\u00f5ik kolme astmed alla piirv\u00e4\u00e4rtuse.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">\/\/ Set up the calculator\r\nconst int multiplier = 3;\r\nconst int limit = 2500;\r\n\r\nprintf(\"Powers of %d under %d are\\n\", multiplier, limit); \r\n\r\n\/\/ Set up the product\r\nint product = 1;\r\n\r\n\/\/ Calculate the powers\r\nwhile (product &lt; limit)\r\n{\r\n    \/\/ Print the current power\r\n    printf(\"%d\", product);\r\n\r\n    \/\/ Calculate the next power\r\n    product = product * multiplier;\r\n}<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"For_tsukkel\"><\/span>For ts\u00fckkel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline \">for<\/span>\u00a0 ts\u00fcklit on k\u00f5ige sobilikum kasutada olukorras, kus iteratsioonide ehk korduste arv eelnevalt teada &#8211; teisis\u00f5nu see ts\u00fckli t\u00fc\u00fcp sobib ideaalselt loendamiseks. <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 ts\u00fckkel on samuti eelkontrolliga ts\u00fckkel &#8211; st ka selle ts\u00fckli puhul on v\u00f5imalik, et ts\u00fckli keha kunagi ei k\u00e4ivitata.<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_for.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8715\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_for.png\" alt=\"\" width=\"351\" height=\"407\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_for.png 608w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_for-259x300.png 259w\" sizes=\"auto, (max-width: 351px) 100vw, 351px\" \/><\/a><\/p>\n<p>Ts\u00fckli struktuuris on fikseeritud kohad algv\u00e4\u00e4rtustamisele, tingimusele ja avaldisele. K\u00f5ik kolm on eraldatud \u00fcksteisest semikooloniga. Just see v\u00f5imaldab seda t\u00fc\u00fcpi ts\u00fckleid kasutada mugavalt loendamiseks, j\u00e4ttes koodi puhtaks ja h\u00e4sti loetavaks. NB! J\u00e4lgi kindlasti <strong>mis ajal teostatakse nimetatud 3 komponenti<\/strong> <span class=\"lang:c highlight:0 decode:true crayon-inline \">for<\/span>\u00a0 ts\u00fcklist!<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">for (initialization; condition; expression)\r\n{\r\n    \/\/ Loop body\r\n}<\/pre>\n<p><strong>N\u00e4ide:<\/strong> J\u00e4rgnev ts\u00fckkel loendab nullist \u00fcheksani. M\u00e4rka ka, et ts\u00fckkel on kirjutatud C99 standardile vastavalt, mis lubab loendurina kasutatava muutuja <span class=\"lang:c highlight:0 decode:true crayon-inline \">i<\/span>\u00a0 deklareerida ts\u00fckli p\u00e4ises.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">for (int i = 0; i &lt; 10; i++)\r\n{\r\n    printf(\"i is %d\\n\", i);\r\n}<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"C90_vs_C99_standardiga_for_tsukli_deklaratsioon\"><\/span>C90 vs C99 standardiga for ts\u00fckli deklaratsioon<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Standard ISO C90 keelab koodilausete ja muutujate deklaratsioonide omavahelist segamist &#8211; st esmalt peab deklareerima k\u00f5ik muutujad funktsiooni alguses, misj\u00e4rel v\u00f5ivad tulla koodilaused.<\/p>\n<p>See t\u00e4hendab, et ka ts\u00fckli loendur tuleb deklareerida funktsiooni alguses.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">void PrintIntArray(int nums[], int n)\r\n{\r\n    int i;\r\n    for (i = 0; i &lt; n; i++)\r\n    {\r\n        printf(\"%d\\n\", nums[i]);\r\n    }\r\n}<\/pre>\n<p>Alates C99 standardist tohib muutujaid deklareerida seal kus vaja. Sealjuures on lubatud muutujate deklareerimine ts\u00fckli sees. See aitab koodi veidi puhtamana hoida.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">void PrintIntArray(int nums[], int n)\r\n{\r\n    for (int i = 0; i &lt; n; i++)\r\n    {\r\n        printf(\"%d\\n\", nums[i]);\r\n    }\r\n}<\/pre>\n<p><strong>Olulised m\u00e4rkused<\/strong><\/p>\n<ul>\n<li>Aine raames tohid kasutada m\u00f5lemat deklareerimise viisi, kuid eelistatud on C99 vastavuses olevad deklaratsioonid<\/li>\n<li>Osad vanematele mikrokontrolleritele m\u00f5eldud kompilaatoreid toetavad vaid C90 standardit. Sellisel juhul ts\u00fcklis muutuja deklareerimine l\u00f5ppeb kompileerimise veaga.<\/li>\n<li>C99 stiilis ts\u00fcklit deklareerides j\u00e4\u00e4b ts\u00fckliloenduri <span class=\"lang:c highlight:0 decode:true crayon-inline \">i<\/span>\u00a0 skoobiks vaid ts\u00fckli keha &#8211; st <span class=\"lang:c highlight:0 decode:true crayon-inline \">i<\/span>\u00a0 v\u00e4\u00e4rtusele ligip\u00e4\u00e4su p\u00e4rast ts\u00fckli l\u00f5ppu ei ole!<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Do_%E2%80%A6_while_tsukkel\"><\/span>Do &#8230; while ts\u00fckkel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline \">do &#8230; while<\/span>\u00a0 on ainuke ts\u00fckli t\u00fc\u00fcp C keeles, mis kasutab j\u00e4relkontrolli. St ts\u00fckli keha k\u00e4ivitatakse esimene kord ilma tingimust kontrollimata ning alles p\u00e4rast ts\u00fckli keha t\u00e4itmist kontrollitakse kas ts\u00fcklit tohib korrata.<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_do_while.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8716\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_do_while.png\" alt=\"\" width=\"349\" height=\"355\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_do_while.png 624w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2023\/08\/loops_do_while-295x300.png 295w\" sizes=\"auto, (max-width: 349px) 100vw, 349px\" \/><\/a><\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">do\r\n{\r\n    \/\/ Loop body\r\n} \r\nwhile (condition);<\/pre>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline \">do .. while<\/span>\u00a0 ts\u00fcklit on mugav kasutada kui tegevust tuleb alati teostada v\u00e4hemalt \u00fche korra, kuid v\u00f5ib esineda vajadus tegevuse kordamiseks &#8211; nt kui vajaminev kontrolltingimus ei osutu t\u00e4idetuks. Hea n\u00e4ide sellest on kasutajalt sisestuse k\u00fcsimine, mis peab olema programmile sobilik enne programmi j\u00e4tkumist (nt kasutaja peab sisestama positiivse t\u00e4isarvu).<\/p>\n<p><strong>N\u00e4ide:<\/strong>\u00a0 Ts\u00fcklit korratakse kuni kasutaja sisestab numbri\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">0<\/span> . M\u00e4rka, et kuigi <span class=\"lang:c highlight:0 decode:true crayon-inline\">userInp<\/span>\u00a0 on j\u00e4etud algv\u00e4\u00e4rtustamata, siis antud olukorras pole see probleem. Muutuja v\u00e4\u00e4rtust kontrollitakse p\u00e4rast kasutaja poolt v\u00e4\u00e4rtuse sisestamist.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">int userInp;\r\ndo\r\n{\r\n    printf(\"Enter 0 to exit!\\n\");\r\n    scanf(\"%d\", &amp;userInp)\r\n} \r\nwhile (userInp != 0);<\/pre>\n<h1><span class=\"ez-toc-section\" id=\"Lopmatud_tsuklid\"><\/span>L\u00f5pmatud ts\u00fcklid<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>L\u00f5pmatuid ts\u00fckleid kohtab k\u00f5ige sagedamini sards\u00fcsteeme (mikrokontrollereid) programmeerides &#8211; kontroller kordab sama tegevust kogu oma eluaja v\u00e4ltel.<\/p>\n<p>Nagu ts\u00fcklitega ikka, siis \u00fcksk\u00f5ik millisest ts\u00fcklist on v\u00f5imalik teha l\u00f5pmatu ts\u00fckkel. K\u00f5ige paremini loetava koodi aga saad tavaliselt kasutades\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">while<\/span>\u00a0 ts\u00fcklit, mille tingimuseks on\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">1<\/span> . C keeles annab \u00fcksk\u00f5ik milline mittenulline v\u00e4\u00e4rtus tingimusena t\u00f5ese ehk\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">true<\/span>\u00a0 tulemuse.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">\/\/ Infinite loop\r\nwhile (1)\r\n{\r\n    \/\/ Loop body\r\n}<\/pre>\n<p>Aegajalt v\u00f5ib tekkida vajadus koostada l\u00f5pmatu ts\u00fckkel, millest on v\u00f5imalik teatud juhtudel v\u00e4ljuda. V\u00e4ljumiseks kasutame\u00a0 tingimuslauset vastava olukorra tuvastamiseks ning <span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 lauset ts\u00fckli katkestamiseks. Break lause kohta loe hilisemast peat\u00fckist.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">\/\/ Infinite loop\r\nwhile (1)\r\n{\r\n    \/\/ Loop body\r\n\r\n    \/\/ Stop the loop\r\n    if (exit-condition)\r\n    {\r\n        break;\r\n    }\r\n}<\/pre>\n<h1><span class=\"ez-toc-section\" id=\"Pesastatud_tsuklid\"><\/span>Pesastatud ts\u00fcklid<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Ts\u00fcklite pesastamine on tegevus, kus paigutame \u00fche ts\u00fckli keha sisse teise ts\u00fckli. Otseseid piiranguid mitu ts\u00fcklit pesastada tohib ei ole, kuid koodi hallatavuse s\u00e4ilitamiseks tasub v\u00e4ltida enama kui kahe ts\u00fckli paigutamist \u00fcksteise sisse. Kui tekib vajadus rohkem ts\u00fckleid pesastada, tuleks kaaluda koodi \u00fcmber struktureerimist t\u00e4iendavateks funktsioonideks.<\/p>\n<p>Ts\u00fcklite pesastamisel tohib kasutada \u00fcksk\u00f5ik milliseid ts\u00fckli t\u00fc\u00fcpe, sh segamini. N\u00e4iteks v\u00f5ib <span class=\"lang:c highlight:0 decode:true crayon-inline\">while<\/span>\u00a0 ts\u00fckli sisse paigutada\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 ts\u00fckli.<\/p>\n<p>J\u00e4rgnevas n\u00e4ites oleme pesastanud kaks\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 ts\u00fcklit.<\/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    const int n = 5;\r\n    const int m = 7;\r\n    \r\n    for (int i = 0; i &lt; n; i++) \r\n    {\r\n        printf(\"Start of the outer loop iteration i = %d\\n\", i);\r\n        for (int j = 0; j &lt; m; j++) \r\n        {\r\n            printf(\"i = %d; j = %d\\n\", i, j); \r\n        }\r\n        printf(\"End of the outer loop iteration i = %d\\n\\n\", i);\r\n    }\r\n}\r\n<\/pre>\n<p>M\u00e4rka, et v\u00e4limise ts\u00fckli kehaks on kaks v\u00e4ljastuse lauset ning \u00a0<span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 ts\u00fckkel. M\u00f5lemat\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">printf<\/span>\u00a0 lauset ja\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 ts\u00fcklit k\u00e4ivitatakse\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">n<\/span>\u00a0 korda.<\/p>\n<p>Sisemine ts\u00fckkel kasutab v\u00e4limisest erinevat ts\u00fckliloendurit\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">j<\/span> . Sisemises ts\u00fcklis olevat v\u00e4ljastuse lauset korratakse j\u00e4rjest\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">m<\/span>\u00a0 korda. K\u00fcll aga kuna tegu on pesastatud ts\u00fcklitega, siis tegelik sisemise <span class=\"lang:c highlight:0 decode:true crayon-inline \">printf<\/span>\u00a0 lause korduste arv saab olema\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline \">n * m<\/span>\u00a0 korda!<\/p>\n<p>Ts\u00fcklite pesastamisel p\u00f6\u00f6ra erilist t\u00e4helepanu ts\u00fcklite tingimustele ning loenduritele! Loendurite (nt\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">i<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline\">j<\/span> ) omavahel segamini ajamine on lihtne tulema. See v\u00f5ib p\u00f5hjustada ts\u00fcklite mitte k\u00e4ivitumist, l\u00f5pmatuid ts\u00fckleid jpm.<\/p>\n<h1><span class=\"ez-toc-section\" id=\"Programmivoo_kontrolllaused\"><\/span>Programmivoo kontrolllaused<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Ts\u00fcklite k\u00e4itumist saab manipuleerida kasutades programmivoogu kontrollivaid lauseid <span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline \">continue<\/span> . M\u00f5lemad laused tekitavad koodis &#8220;h\u00fcppe&#8221; (viidatakse kui\u00a0<em>jump statement<\/em>) &#8211; st nende tulemusena v\u00f5ib muutuda j\u00e4rgmine t\u00e4idetav koodilause.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"break_lause\"><\/span>break lause<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline\">break<\/span>\u00a0 lauset kasutatakse ts\u00fckli t\u00f6\u00f6 katkestamiseks. \u00dcldiselt on eesm\u00e4rgiks kas ts\u00fckli t\u00f6\u00f6 varasem peatamine v\u00f5i l\u00f5pmatust ts\u00fcklist v\u00e4ljumine. J\u00e4rgnev koodin\u00e4ide demonstreeribki l\u00f5pmatu ts\u00fckli katkestamist sobiliku tingimuse t\u00e4itmisel.<\/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 num;\r\n    \r\n    while (1)\r\n    {\r\n        printf(\"Enter a positive integer: \");\r\n        scanf(\"%d\", &amp;num);\r\n        \r\n        if (num &gt; 0)\r\n        {\r\n            break;\r\n        }\r\n    }\r\n    printf(\"Integer %d is accepted\\n\", num);\r\n    \r\n    return 0;\r\n}\r\n<\/pre>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 laused modelleeritakse UML tegevusdiagrammides programmivoo muutusena &#8211; st muudame j\u00e4rgmist t\u00e4idetavat tegevust. <span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 laused ei tohi modelleerida tegevustena!<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_152923.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11482\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_152923.png\" alt=\"\" width=\"380\" height=\"392\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_152923.png 460w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_152923-291x300.png 291w\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" \/><\/a><\/p>\n<p>M\u00e4rka, et eelnev mudel on identne\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">do .. while<\/span>\u00a0 ts\u00fckli mudeliga. T\u00e4pselt samasuguse funktsionaalsusega koodi saab kirjutada kasutades\u00a0<span class=\"lang:c highlight:0 decode:true crayon-inline\">do .. while<\/span>\u00a0 ts\u00fcklit. Kusjuures selle n\u00e4ite korral n\u00e4eb see ka puhtam v\u00e4lja.<\/p>\n<p>Arvesta, et ts\u00fckleid pesastades katkestatakse vaid see ts\u00fckkel, milles <span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 lause v\u00e4lja kutsutakse.<\/p>\n<p>T\u00e4iendavalt kasutatakse <span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 lauset ka <span class=\"lang:c highlight:0 decode:true crayon-inline\">switch<\/span>\u00a0 lausest v\u00e4ljumiseks.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Continue_lause\"><\/span>Continue lause<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline \">continue<\/span>\u00a0 lause eesm\u00e4rk on vahele j\u00e4tta ts\u00fckli kehas jooksval kordusel veel t\u00e4itmata koodilaused. Nii nagu <span class=\"lang:c highlight:0 decode:true crayon-inline \">break<\/span>\u00a0 lausegi, m\u00f5jutab see ainult ts\u00fcklit, mille sees koodilause v\u00e4lja kutsutakse &#8211; st ts\u00fcklite pesastamisel ei m\u00f5juta see v\u00e4limisi ts\u00fckleid.<\/p>\n<p>Olenevalt ts\u00fckli t\u00fc\u00fcbist on k\u00e4itumine erinev. <span class=\"lang:c highlight:0 decode:true crayon-inline\">while<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline\">do .. while<\/span>\u00a0 ts\u00fcklites kasutamisel h\u00fcpatakse ts\u00fckli tingimuse kontrolli juurde. Kui aga tegu on <span class=\"lang:c highlight:0 decode:true crayon-inline \">for<\/span>\u00a0 ts\u00fckliga, h\u00fcpatakse ts\u00fckli avaldise t\u00e4itmisse (nt <span class=\"lang:c highlight:0 decode:true crayon-inline \">i++<\/span> ), millele j\u00e4rgneb ts\u00fckli tingimuse kontrollimine ts\u00fckli j\u00e4rgmise iteratsiooni alguses.<\/p>\n<p>J\u00e4rgnevas n\u00e4ites j\u00e4etakse <span class=\"lang:c highlight:0 decode:true crayon-inline \">continue<\/span>\u00a0 lause abil viimane v\u00e4ljastuslause vahele kui kasutaja sisestab nulli v\u00f5i negatiivse t\u00e4isarvu. Pane t\u00e4hele, et tegu on l\u00f5pmatu ts\u00fckliga, st v\u00e4ljumiseks kasuta klahvikombinatsiooni\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline \">ctrl+c<\/span>\u00a0.<\/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    while (1)\r\n    {\r\n        printf(\"Enter a positive integer: \");\r\n        \r\n        int num;\r\n        scanf(\"%d\", &amp;num);\r\n        \r\n        if (num &lt;= 0)\r\n        {\r\n            continue;\r\n        }\r\n        \r\n        printf(\"Integer %d is accepted!\\n\", num);\r\n    }\r\n    return 0;\r\n}\r\n<\/pre>\n<p>Modelleerimise tulemusel saame paremini illustreerida <span class=\"lang:c highlight:0 decode:true  crayon-inline \">continue<\/span>\u00a0 lause poolt sooritatud h\u00fcpet koodilausete t\u00e4itmise j\u00e4rjekorras. H\u00fcpe toimub kohta, kus tavap\u00e4raselt toimuks eelkontrolliga ts\u00fckli tingimuse kontrollimine, kuid kuna tegu on l\u00f5pmatu ts\u00fckliga, siis kontrolli ja v\u00e4ljumisv\u00f5imalust mudelis ei eksisteeri.<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_154132.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11483\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_154132.png\" alt=\"\" width=\"409\" height=\"349\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_154132.png 565w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_154132-300x255.png 300w\" sizes=\"auto, (max-width: 409px) 100vw, 409px\" \/><\/a><\/p>\n<h1><span class=\"ez-toc-section\" id=\"Tsuklid_millel_puudub_tsukli_keha\"><\/span>Ts\u00fcklid, millel puudub ts\u00fckli keha<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>C keeles l\u00f5ppevad k\u00f5ik laused semikooloniga. Seda on v\u00f5imalik \u00e4ra kasutada ka ts\u00fcklite kodeerimisel. N\u00e4iteks saame panna semikooloni kohe p\u00e4rast\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 v\u00f5i <span class=\"lang:c highlight:0 decode:true crayon-inline\">while<\/span>\u00a0 ts\u00fckli p\u00e4ist. See tekitab olukorra, kus vastaval ts\u00fcklil puudub ts\u00fckli keha. \u00dchest k\u00fcljest v\u00f5ib olla tegu tahtliku programmeerimisv\u00f5ttega, kuid selline olukord on ka v\u00e4ga tavap\u00e4rane alustava programmeerija t\u00fc\u00fcpviga.<\/p>\n<p>Erandina pane t\u00e4hele, et <span class=\"lang:c highlight:0 decode:true crayon-inline \">do &#8230; while<\/span>\u00a0 ts\u00fckkel n\u00f5uab semikoolonit p\u00e4rast tingimust ning antud peat\u00fckk selle ts\u00fcklit\u00fc\u00fcbi kohta ei k\u00e4i!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Keha_puudumine_kui_koodimisviga\"><\/span>Keha puudumine kui koodimisviga<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kirjutades\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">while<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fckli tingimuse l\u00f5ppu semikooloni loome ts\u00fckli, millel puudub keha &#8211; semikoolon l\u00f5petab selle ts\u00fckli lause. J\u00e4rgnevas n\u00e4ites j\u00e4\u00e4b muutuja\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">i<\/span>\u00a0 v\u00e4\u00e4rtuseks igavesti v\u00e4\u00e4rtusele\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">0<\/span> . Kuigi suurendamise operatsioon <span class=\"lang:c highlight:0 decode:true crayon-inline \">i++<\/span>\u00a0 on loogeliste sulgude vahel, ei ole see koodiplokk eelneva ts\u00fckli kehaks &#8211; ts\u00fckkel l\u00f5ppes ekslikult lisatud semikooloniga. Loogeliste sulgude vahel olev koodiplokk t\u00e4idetakse <strong>p\u00e4rast <\/strong>ts\u00fckli l\u00f5ppu (mis on siinpuhul\u00a0 l\u00f5putu).<\/p>\n<pre class=\"toolbar:2 show-lang:2 lang:c mark:4 decode:true\">int i = 0;\r\n\r\n\/\/ Mistake here causes an infinite loop\r\nwhile (i &lt; 5);\r\n{\r\n    \/\/ This IS NOT the loop body due to the semicolon!\r\n    printf(\"i = %d\\n\", i);\r\n    i++;\r\n}<\/pre>\n<p>Modelleerides koodil\u00f5igu UML tegevusdiagrammile saame paremini illustreerida vigast k\u00e4itumist.<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_155408.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11485\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_155408.png\" alt=\"\" width=\"274\" height=\"356\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_155408.png 417w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_155408-231x300.png 231w\" sizes=\"auto, (max-width: 274px) 100vw, 274px\" \/><\/a><\/p>\n<p>Kirjutades <span class=\"lang:c highlight:0 decode:true crayon-inline \">for<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fckli semikooloniga tekitame samamoodi ts\u00fckli, millel puudub keha. Enamjaolt koodi jooksutamisel j\u00e4\u00e4da mulje, et ts\u00fckkel j\u00e4etakse vahele v\u00f5i selle sisu teostati vaid korra, kuigi tegelikult ts\u00fckkel toimis ja l\u00e4biti t\u00e4ies mahus.<\/p>\n<p>J\u00e4rgneva n\u00e4ite puhul kordab ts\u00fckkel end 5 korda, mis on ootusp\u00e4rane. Kuna ts\u00fckli avaldises paikneb <span class=\"lang:c highlight:0 decode:true crayon-inline\">i++<\/span> , ei ole tegu l\u00f5pmatu ts\u00fckliga. K\u00fcll aga ei ole ka v\u00e4ljastus antud ts\u00fckli keha sees, mist\u00f5ttu ts\u00fcklis puudub igasugune v\u00e4ljastus. Print lause ise paikneb ts\u00fckli j\u00e4rel paiknevas koodiplokis\u00a0ja seet\u00f5ttu k\u00e4ivitatakse \u00fchekordselt.<\/p>\n<pre class=\"toolbar:2 show-lang:2 lang:c mark:4 decode:true\">\/\/ Mistake here will cause the loop to run \"invisible\" to the programmer\r\nfor (int i = 0; i &lt; 5; i++);\r\n{\r\n    \/\/ This IS NOT the loop body due to the semicolon!\r\n    printf(\"i = %d\\n\", i);\r\n}<\/pre>\n<p>Koodil\u00f5igus esitatud k\u00e4itumist saame pareminimi m\u00f5istmiseks j\u00e4llegi visualiseerida kasutades UML tegevusdiagrammi<\/p>\n<p><a href=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_160328.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11487\" src=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_160328.png\" alt=\"\" width=\"282\" height=\"256\" srcset=\"https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_160328.png 444w, https:\/\/blue.pri.ee\/ttu\/wp-content\/uploads\/2026\/06\/Screenshot_20260616_160328-300x272.png 300w\" sizes=\"auto, (max-width: 282px) 100vw, 282px\" \/><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tahtlikult_puuduv_tsukli_keha\"><\/span><span style=\"font-size: 24px;\">Tahtlikult puuduv ts\u00fckli keha<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>M\u00f5ningatel juhtudel meeldib programmeerijatele teha v\u00f5imalikult l\u00fchikesi programme &#8211; st hoida oma koodiridade arv minimaalsena. Selle saavutamiseks kirjutatakse aegajalt \u00fcherealisi ts\u00fckleid tahtlikult. Seda on v\u00f5imalik teha nii <span class=\"lang:c highlight:0 decode:true crayon-inline \">while<\/span>\u00a0 kui <span class=\"lang:c highlight:0 decode:true crayon-inline\">for<\/span>\u00a0 ts\u00fcklite puhul. K\u00fcll aga ei ole see soovitatav ja sageli isegi peetakse seda <span style=\"color: #ff0000;\"><strong>kohatuks<\/strong><\/span>. Sellise koodi probleemiks peetakse <span style=\"color: #ff0000;\"><strong>tahtlikku koodi sisu peitmist<\/strong> <\/span>(nt midagi sellist mida arvutiviiruse kirjutaja v\u00f5iks teha). Koodi peitmine p\u00f5hjustab hiljem asjatut ajakulu ja probleeme koodi \u00fclevaatustel ja silumisel.<\/p>\n<pre class=\"toolbar:2 lang:c decode:true\">char str[] = \"What a wonderful day!\";\r\n\r\nint i = 0;\r\n\r\n\/\/ Loop to the character past the space\r\nwhile (str[i++] != ' ');\r\n\r\nprintf(\"The string from the second word: %s\\n\", &amp;str[i]);\r\n<\/pre>\n<p>Tegu on v\u00f5ttega, millest peaksid teadlik olema, kuid samal ajal peaksid ise v\u00e4ltima selle kasutamist! Kirjuta ts\u00fcklid v\u00e4lja t\u00e4ies mahus, et neid oleks hiljem lihtsam siluda ja hallata.<\/p>\n<p>M\u00e4rka ka, et tegelikult viimane programm\u00a0<strong>jookseb kokku\u00a0<\/strong>kui s\u00f5nes puuduvad t\u00fchikud &#8211; ehk tegu on ka peidetud veaga!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sissejuhatus Ts\u00fckkel on \u00fcks k\u00f5ige olulisematest programmeerimise alustaladest, mille abil saame\u00a0enda m\u00e4\u00e4ratud koodiploki sisu korrata &#8211; st saame valida millised laused koodis korduvad ning mis tingimustel. Korratavat koodiplokki nimetatakse ts\u00fckli kehaks. C keeles \u00fcmbritsetakse ts\u00fckli keha tavap\u00e4raselt loogeliste sulgudega { }\u00a0. Ts\u00fckli keha kordub senikaua kuniks vastavat ts\u00fcklit kontrolliv tingimus on t\u00f5ene. Ts\u00fckli tingimuse korrektne &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/tsuklid\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Ts\u00fcklid<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":5274,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"page-templates\/code-width-wide.php","meta":{"footnotes":""},"class_list":["post-8719","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/8719","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=8719"}],"version-history":[{"count":28,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/8719\/revisions"}],"predecessor-version":[{"id":11497,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/8719\/revisions\/11497"}],"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=8719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}