{"id":6397,"date":"2021-10-27T14:51:18","date_gmt":"2021-10-27T12:51:18","guid":{"rendered":"https:\/\/blue.pri.ee\/ttu\/?p=6397"},"modified":"2026-10-08T21:24:14","modified_gmt":"2026-10-08T19:24:14","slug":"10-labor-menuuprogramm","status":"publish","type":"post","link":"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/","title":{"rendered":"PR1ET10: Men\u00fc\u00fc-programm"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 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-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Teooriat_ja_meeldetuletusi\" >Teooriat ja meeldetuletusi<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Tahemark_sone_ja_valjastusfunktsioonid\" >T\u00e4hem\u00e4rk, s\u00f5ne ja v\u00e4ljastusfunktsioonid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Massiivi_edastamine_funktsiooni\" >Massiivi edastamine funktsiooni<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Kahe_arvu_omavahel_vahetamine_massiivis\" >Kahe arvu omavahel vahetamine massiivis<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Massiivide_algvaartustamine_nulliks\" >Massiivide algv\u00e4\u00e4rtustamine nulliks<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Esitamisele_kuuluvad_ulesanded\" >Esitamisele kuuluvad \u00fclesanded<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Tunnitoo_naidisprogramm\" >Tunnit\u00f6\u00f6 n\u00e4idisprogramm<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Kirjeldus\" >Kirjeldus<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Uldised_nouded\" >\u00dcldised n\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Tunnitoo_osa_1_W10-1_Maatriksi_genereerimine_ja_kuvamine\" >Tunnit\u00f6\u00f6 osa 1 [W10-1]: Maatriksi genereerimine ja kuvamine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Tunnitoo_osa_2_W10-2_Ridade_ja_veergude_vahetamine\" >Tunnit\u00f6\u00f6 osa 2 [W10-2]: Ridade ja veergude vahetamine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Tuupilised_vead\" >T\u00fc\u00fcpilised vead<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Lisaulesanne_1_W10-3_Lisamine_ja_kustutamine\" >Lisa\u00fclesanne 1 [W10-3]: Lisamine ja kustutamine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Lisaulesanne_3_W10-4_Peegeldamine\" >Lisa\u00fclesanne 3 [W10-4]: Peegeldamine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Parast_seda_tundi_peaksid\" >P\u00e4rast seda tundi peaksid<\/a><\/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\/laborid\/pr1-et\/10-labor-menuuprogramm\/#Taiendav_materjal\" >T\u00e4iendav materjal<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Teooriat_ja_meeldetuletusi\"><\/span>Teooriat ja meeldetuletusi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"Tahemark_sone_ja_valjastusfunktsioonid\"><\/span>T\u00e4hem\u00e4rk, s\u00f5ne ja v\u00e4ljastusfunktsioonid<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Kuigi s\u00f5nede juurde tuleme alles m\u00f5ne n\u00e4dala p\u00e4rast, siis m\u00f5ne omadusega teeme juba t\u00e4na tutvust.<\/p>\n<p><strong>S\u00f5ne<\/strong> (<em>string<\/em>) t\u00e4hendab j\u00e4rjestatud t\u00e4hem\u00e4rkide jada. St selleks v\u00f5ib olla arusaadav s\u00f5na v\u00f5i lause, kuid v\u00f5ib olla ka arusaamatu erinevate s\u00fcmbolite jada. S\u00f5ned on alati <strong>jutum\u00e4rkide<\/strong> vahel.<\/p>\n<p>N\u00e4ited:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8220;a&#8221;<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8220;Hello!&#8221;<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8220;I do wish we could chat longer, but I&#8217;m having an old friend for dinner.&#8221;<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8220;lFRD=)m+0FDj2&#8221;<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u00dcksiku t\u00e4hem\u00e4rgi kirjutame <strong>\u00fclakomade<\/strong> vahel. S\u00f5ne koosneb sellistest t\u00e4hem\u00e4rkidest. NB! Kaldkriipsuga hakkavad eris\u00fcmbolid (<em>escape sequence<\/em>) ja neid loetakse samuti \u00fcheks t\u00e4hem\u00e4rgiks kuna neid kodeeritakse \u00fche t\u00e4hem\u00e4rgina (nt <span class=\"lang:default highlight:0 decode:true crayon-inline\">\\n<\/span>\u00a0 on \u00fcks t\u00e4hem\u00e4rk arvuti m\u00e4lus kuna v\u00f5tab vaid \u00fche baidi).<\/p>\n<p>N\u00e4ited:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8216;a&#8217;<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8216;y&#8217;<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8216;\\n&#8217;<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8216;\\t&#8217;<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>NB! Pane t\u00e4hele, et <span class=\"lang:c highlight:0 decode:true crayon-inline \">&#8220;a&#8221;<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline \">&#8216;a&#8217;<\/span>\u00a0 on erinevad. <strong>\u00dcks on s\u00f5ne, teine on t\u00e4hem\u00e4rk<\/strong>.<\/p>\n<p>Funktsioonid, mida saame kasutada teksti v\u00e4ljastamiseks<\/p>\n<ul>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">printf()<\/span>\u00a0 ehk <em>print formatted<\/em>. Tegu on k\u00f5ige keerukama funktsiooniga seni\u00f5pitutest, mille abil saame tr\u00fckkida kujundatud teksti ja v\u00e4ljastada ka k\u00f5iksugu muutujate sisu. Reavahetus k\u00e4ib k\u00e4sitsi!<br \/>\nN\u00e4iteks: <span class=\"lang:default decode:true crayon-inline\">printf(&#8220;Hello, %s!\\n&#8221;, name);<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">puts()<\/span>\u00a0 ehk <em>put string<\/em>. Tegu on lihtsa v\u00e4ljastusfunktsiooniga, mis on m\u00f5eldud \u00fche tekstil\u00f5igu kuvamiseks. See ei toeta keerukaid formaate ega muutujatest v\u00e4\u00e4rtuste v\u00e4ljastamist. Reavahetus lisatakse automaatselt.<br \/>\nN\u00e4iteks: <span class=\"lang:default decode:true crayon-inline\">puts(&#8220;Hello, user!&#8221;);<\/span><\/li>\n<li><span class=\"lang:default highlight:0 decode:true crayon-inline\">putchar()<\/span>\u00a0 ehk <em>put character<\/em>. See on k\u00f5ige algselisem funktsioon kolmest. Selle abil saab v\u00e4ljastada vaid \u00fche t\u00e4hem\u00e4rgi. Seda on mugav kasutada nt reavahetuse tr\u00fckkimiseks.<br \/>\nN\u00e4iteks: <span class=\"lang:default decode:true crayon-inline\">putchar(&#8216;\\n&#8217;);<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Massiivi_edastamine_funktsiooni\"><\/span>Massiivi edastamine funktsiooni<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Massiive funktsioonidese edastades andsime edasi viite originaalile &#8211; st me saame edastatud massiivi muuta ilma tagastamata ja olenemata kohast.<\/p>\n<p>Reeglina tuleb alati massiiviga koos edastada selle k\u00f5igi m\u00f5\u00f5tmete suurused. P\u00e4rast funktsiooni edastamist ei ole v\u00f5imalik massiivi m\u00f5\u00f5tmeid arvutuslikult leida! Erandiks on s\u00f5ned (<em>string<\/em>), millest r\u00e4\u00e4gime tulevikus.<\/p>\n<p>M\u00f5ned erip\u00e4rad edastamisel<\/p>\n<ul>\n<li>Kui soovid edastada <strong>tervet massiivi<\/strong>, olenemata selle m\u00f5\u00f5tmete arvust, kirjutame v\u00e4ljakutsesse vaid\u00a0 massiivi nime <span class=\"lang:default decode:true crayon-inline\">Func(numbers);<\/span><\/li>\n<li>Kui soovid 1-m\u00f5\u00f5tmelist massiivist <span class=\"lang:default decode:true crayon-inline\">int numbers[N];<\/span>\u00a0 edastada vaid <strong>\u00fche v\u00e4\u00e4rtuse<\/strong>, t\u00e4psustame selle indeksi <span class=\"lang:default decode:true crayon-inline\">Func(numbers[2]);<\/span> .\u00a0Funktsioonis k\u00e4sitle seda \u00fchte arvu\u00a0 <span class=\"lang:default decode:true crayon-inline\">Func(int val);<\/span><\/li>\n<li>Kui soovid 2-m\u00f5\u00f5tmelisest massiivist (<span class=\"lang:default decode:true crayon-inline\">int numbers[N][M];<\/span>\u00a0 edastada <strong>\u00fche rea <\/strong>(tehniliselt kirjeldatuna vastava rea alguse asukoha m\u00e4lus), t\u00e4psustame selle indeksi ja pikkuse <span class=\"lang:default decode:true crayon-inline\">Func(numbers[2], M);<\/span> . Funktsioonis k\u00e4sitle seda kui 1-m\u00f5\u00f5tmelist massiivi\u00a0 <span class=\"lang:default decode:true crayon-inline\">Func(int numbs[], int n);<\/span><\/li>\n<li>\u00dchte veergu 2-m\u00f5\u00f5tmelisest massivist\u00a0 funktsiooni edastada ei ole v\u00f5imalik, v\u00e4hemalt mitte lihtsasti.<\/li>\n<li>Kui soovid 2-m\u00f5\u00f5tmelisest massiivist <span class=\"lang:default decode:true crayon-inline\">int numbers[N][M];<\/span>\u00a0 edastada <strong>vaid \u00fche v\u00e4\u00e4rtuse<\/strong>, t\u00e4psustame funktsiooni v\u00e4ljakutses m\u00f5lemad indeksid <span class=\"lang:default decode:true crayon-inline\">Func(numbers[2][1]);<\/span><\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Kahe_arvu_omavahel_vahetamine_massiivis\"><\/span>Kahe arvu omavahel vahetamine massiivis<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Vahetamaks kahte arvu sobib lahenduseks sorteerimise tunnist \u00f5pitud vahetamise idee kasutades abimuutujat<\/p>\n<pre class=\"toolbar:2 lang:default decode:true\">int temp = value[idx];\r\nvalue[idx] = value[idx + 1];\r\nvalue[idx + 1] = temp;<\/pre>\n<p>M\u00e4rkus: isegi kui soovid vahetada kahe rea v\u00f5i veeru v\u00e4\u00e4rtusi on ikkagi vaja vaid \u00fchte muutujat.<\/p>\n<p>Massiivi kasutamine abimuutuja asemel on m\u00f5istlik vaid paralleelt\u00f6\u00f6tlust toetavatele protsessoritele programme kirjutades. Sellised protsessorid p\u00f5hinevad SIMD (<em>sing-instruction-multiple-data<\/em>) arhitektuuril &#8211; n\u00e4iteks graafikakaardid (GPU &#8211; <em>graphics processing unit<\/em>). See on kusjuures levinud l\u00e4henemine ka k\u00f5iksugustes tehisaru p\u00f5histes lahendustes, mis on suuresti lihtsalt maatriksarvutused, mille p\u00f5him\u00f5tteid lineaaralgebras.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Massiivide_algvaartustamine_nulliks\"><\/span>Massiivide algv\u00e4\u00e4rtustamine nulliks<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Terve massiivi algv\u00e4\u00e4rtustamiseks nulliks paneme soovitud konstandi loogeliste sulgude vahele<\/p>\n<pre class=\"toolbar:2 lang:default decode:true\">int vector[LEN] = {0};<\/pre>\n<p>Kui tegu on 2-m\u00f5\u00f5tmelise massiiviga, kasutame kahte komplekti loogelisi sulge.<\/p>\n<pre class=\"toolbar:2 lang:default decode:true \">int matrix[ROWS][COLS] = {{0}};<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Esitamisele_kuuluvad_ulesanded\"><\/span>Esitamisele kuuluvad \u00fclesanded<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Selles tunnis loome men\u00fc\u00fcprogrammi, mis t\u00f6\u00f6tab senikaua, kuniks kasutaja soovib sellest v\u00e4ljuda. Programmi raames tegeleme maatriksi manipuleerimisega. Programmi keskmes on mitmed piirjuhtumid (n\u00e4iteks mis saab siis, kui kasutaja soovib manipuleerida maatriksit, mida ei ole olemas).<\/p>\n<p>Alusta n\u00e4idisprogrammiga tutvumisest, misj\u00e4rel saad edasi liikuda ja luua ise samalaadse rakenduse.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Tunnitoo_naidisprogramm\"><\/span>Tunnit\u00f6\u00f6 n\u00e4idisprogramm<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>N\u00e4idisprogramm on esitatud kompileeritud kujul, st sul on v\u00f5imalik proovida esmalt kuidas l\u00f5pplahendus peaks t\u00f6\u00f6tama. N\u00e4idisrakendusi on kolm t\u00fckki, n\u00e4itamaks milline n\u00e4eb v\u00e4lja rakendus erinevates etappides. Proovi n\u00e4idisrakendusi enne t\u00f6\u00f6 alustamist! Sinu loodav rakendus peab v\u00f5imalikult l\u00e4hedaselt matkima n\u00e4idisrakenduse t\u00f6\u00f6d.<\/p>\n<p>N\u00e4idisprogrammid on kompileeritud x86-64 arhitektuurile ehk t\u00f6\u00f6tab k\u00f5igis kooliarvutites ning ka enamikes isiklikes arvutites:<strong> <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0583\/demoprogrammid\/wk10_solution_binaries.zip\">https:\/\/blue.pri.ee\/ttu\/files\/iax0583\/demoprogrammid\/wk10_solution_binaries.zip<\/a><\/strong><\/p>\n<p>NB! Programmile tuleb anda k\u00e4ivitamis\u00f5igused (suvalist internetist leidud programmi ei tohi k\u00e4ivitada). \u00d5iguste muutmine on \u00fchekordne tegevus. Selleks k\u00e4ivita k\u00e4sk:<\/p>\n<pre class=\"toolbar:2 lang:default highlight:0 decode:true\">chmod u+x 10_lab_switch_linux<\/pre>\n<p>See lisab (chmod &#8211; <em>change mode<\/em>) kasutajale (u &#8211; <em>user<\/em>) \u00f5igused programmi k\u00e4ivitada (x &#8211; <em>execute<\/em>).<\/p>\n<p>P\u00e4rast seda saad programmi k\u00e4ivitada tavap\u00e4raselt, st <span class=\"lang:default highlight:0 decode:true crayon-inline\">.\/program_name<\/span><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Kirjeldus\"><\/span>Kirjeldus<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>T\u00e4nane tunnit\u00f6\u00f6 on jaotatud kaheks baasosaks ning lisa\u00fclesanneteks. M\u00f5lemad baasosad on eraldi kaitstavad.<\/p>\n<p>Tegu on l\u00f5pmatult k\u00e4iva men\u00fc\u00fc-programmiga, millel on eraldi valik v\u00e4ljumiseks. Seet\u00f5ttu on oluline j\u00e4lgida rakenduse olekut &#8211; meie m\u00f5istes mis seisundis parasjagu maatriks on. N\u00e4iteks kui maatriksil on 0 rida, siis ridu (ega ka veerge) pole v\u00f5imalik vahetada.<\/p>\n<p>Programmi m\u00e4lus on maatriks deklareeritud fikseeritud maksimaalse suurusega, milleks kasutatakse makrosid\u00a0<span class=\"lang:default highlight:0 decode:true crayon-inline\">LIMIT_ROWS<\/span> ja <span class=\"lang:default highlight:0 decode:true crayon-inline\">LIMIT_COLS<\/span> .\u00a0 Rakenduse t\u00f6\u00f6 ajal v\u00f5idakse kasutada maatriksist vaid osalist suurust &#8211; nt kui maksimum ridade arv on 10, kuid kasutaja loob 5-realise maatriksi. Sellisel juhul hoiame ikkagi m\u00e4lus k\u00fcmme rida, kuid genereerime ja kuvame kasutajale neist vaid esimesed 5. Seet\u00f5ttu on mitmetes funktsiooni protot\u00fc\u00fcpides kasutusel 2 muutujat &#8211; <span class=\"lang:default highlight:0 decode:true crayon-inline\">int rows<\/span>\u00a0 ja <span class=\"lang:default highlight:0 decode:true crayon-inline\">int cols<\/span> , mis sisaldavad parasjagu aktiivset maatriksi suurust.<\/p>\n<p><strong>Lae alla aluskood: <a style=\"cursor: pointer !important; user-select: none !important;\" href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0583\/aluskoodid\/10_switch_basecode.c\">https:\/\/blue.pri.ee\/ttu\/files\/iax0583\/aluskoodid\/10_switch_basecode.c<\/a><\/strong><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Uldised_nouded\"><\/span>\u00dcldised n\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Need n\u00f5uded kehtivad, olenemata, millise osaga programmi lahendamisest tegeled.<\/p>\n<ul>\n<li>Sinu lahendus peab v\u00f5imalikult t\u00e4pselt matkima etteantud n\u00e4idisprogrammi.<\/li>\n<li>T\u00f6\u00f6 peab olema ehitatud etteantud aluskoodile.\n<ul>\n<li>Aluskoodi tohid m\u00f5istlikes piirides modifitseerida. N\u00e4iteks v\u00f5ib kasu olla tegevuste j\u00e4rjekorra muutmisest main() funktsioonis v\u00f5i funktsioonile <span class=\"lang:default highlight:0 decode:true crayon-inline\">GetIntInRange()<\/span> t\u00e4iendava parameetri lisamisest. Muudel juhtudel m\u00f5tle hoolikalt l\u00e4bi, kas muudatus on ikka m\u00f5istlik ja p\u00f5hjendatud!<\/li>\n<li>Aluskoodis on sinu jaoks juba valmis tehtud kaks funktsiooni, kasuta neid vastavalt vajadusele.<\/li>\n<li>Aluskoodis on ette antud kahe esimese sinu poolt loodava funktsiooni protot\u00fc\u00fcbid, millest peaksid oma lahenduse loomist alustama.<\/li>\n<\/ul>\n<\/li>\n<li>Rakendus peab t\u00f6\u00f6tama ka olukorras, kus ridade ja veergude arvud on erinevad, st tegu pole ruutmaatriksiga.<\/li>\n<li>K\u00f5ik maatriksis olevad arvud on vahemikus 0 &#8211; 99.<\/li>\n<li>K\u00f5ik toimingud peavad olema korratavad ilma programmist v\u00e4ljumata.<\/li>\n<li>K\u00f5igi men\u00fc\u00fc valikute t\u00f6\u00f6tlev kood peab olema lahendatud eraldi funktsioonides.\n<ul>\n<li><span class=\"lang:c highlight:0 decode:true crayon-inline \">switch()<\/span>\u00a0 lause sees v\u00f5id printida v\u00e4lja abitekstr, salvestada funktsioonidest tagastatavaid v\u00e4\u00e4rtusi, teostada omistuslauseid ja arvutustehteid. Vajadusel v\u00f5id ka m\u00f5ne <span class=\"lang:c highlight:0 decode:true crayon-inline \">if<\/span>\u00a0 lause lisada.<\/li>\n<li>\u00c4ra deklareeri <span class=\"lang:c highlight:0 decode:true crayon-inline \">switch()<\/span>\u00a0 sees uusi muutujaid!<\/li>\n<li>Uusi ts\u00fckleid <span class=\"lang:c highlight:0 decode:true crayon-inline\">main()<\/span>\u00a0 funktsiooni kirjutada ei tohi!<\/li>\n<\/ul>\n<\/li>\n<li>Programm peab olema terviklik ja arusaadav ning t\u00f6\u00f6tama, kuniks kasutaja soovib sellest ise v\u00e4ljuda.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Tunnitoo_osa_1_W10-1_Maatriksi_genereerimine_ja_kuvamine\"><\/span>Tunnit\u00f6\u00f6 osa 1 [W10-1]: Maatriksi genereerimine ja kuvamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Esimeses osas loome maatriksi kuvamise ja genereerimise. \u00dclesande raames harjutad ka kindlat t\u00fc\u00fcpi ts\u00fcklite kasutamist!<\/p>\n<p><strong>N\u00f5uded<\/strong><\/p>\n<ul>\n<li>Kasutaja saab genereerida n * m maatriksi\n<ul>\n<li>Maatriksi elementide genereerimine toimub funktsioonis <span class=\"lang:default highlight:0 decode:true crayon-inline\">GenerateMatrix()<\/span><\/li>\n<li>Maatriksi elementideks on juhuslikud t\u00e4isarvud vahemikus 0 &#8211; 99<\/li>\n<li>Ridade arv n ja veergude arv m on kasutaja poolt sisestatavad v\u00e4\u00e4rtused.<\/li>\n<li>Maatriksi l\u00e4bik\u00e4iguks genereerimise funktsioonis tohid kasutada vaid <span class=\"lang:default highlight:0 decode:true crayon-inline\">do while()<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fckleid.<\/li>\n<li>Meeldetuletus: C funktsioonid on lihtsad ja teevad vaid \u00fchte asja (ning teevad seda h\u00e4sti)! Funktsioon <span class=\"lang:default highlight:0 decode:true crayon-inline\">GenerateMatrix()<\/span> <strong>ei tohi<\/strong> tegeleda kasutajalt sisendi k\u00fcsimisega!<\/li>\n<\/ul>\n<\/li>\n<li>Kasutaja saab kuvada aktiivse maatriksi\n<ul>\n<li>Maatriksi kuvamine toimub funktsioonis <span class=\"lang:default highlight:0 decode:true crayon-inline\">DisplayMatrix()<\/span><\/li>\n<li>Kuvamise funktsioonis tohid kasutada vaid <span class=\"lang:default highlight:0 decode:true crayon-inline\">while()<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fckleid<\/li>\n<li>Maatriks peab olema joondatud<\/li>\n<\/ul>\n<\/li>\n<li>Kasutaja saab lisada maatriksi l\u00f5ppu uue rea\n<ul>\n<li>Rea lisamine toimub funktsioonis <span class=\"lang:default highlight:0 decode:true crayon-inline\">AddRow()<\/span><\/li>\n<li>Rea lisamine toimub kasutades <span class=\"lang:c highlight:0 decode:true crayon-inline \">for()<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fcklit<\/li>\n<\/ul>\n<\/li>\n<li>Kasutaja saab programmist v\u00e4ljuda<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Tunnitoo_osa_2_W10-2_Ridade_ja_veergude_vahetamine\"><\/span>Tunnit\u00f6\u00f6 osa 2 [W10-2]: Ridade ja veergude vahetamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Tunnit\u00f6\u00f6 teine pool lisab rakendusse ridade ja veergude vahetamise ning mugavusfunktsiooni automaatseks maatriksi v\u00e4ljastuseks ning selle juhtimiseks.<\/p>\n<ul>\n<li>Kasutaja peab saama vahetada kahes enda poolt valitud reas paiknevad v\u00e4\u00e4rtused<\/li>\n<li>Kasutaja peab saama vahetada kahes enda poolt valitud veerus paiknevad v\u00e4\u00e4rtused<\/li>\n<li>Kasutaja peab saama juhtida maatriksi automaatset v\u00e4ljastuse kuvamist (sees \/ v\u00e4ljas)<\/li>\n<li>Juhul kui maatriksi automaatne v\u00e4ljastus on sees, kuvatakse maatriks ainult selliste tegevuste j\u00e4rel, mis modifitseerivad maatriksit v\u00f5i selle elemente<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Tuupilised_vead\"><\/span>T\u00fc\u00fcpilised vead<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li><em>Copy-paste<\/em> ehk korduv kood. Enamasti on selleks sisestus (nt sisesta ridade arv, sisesta veergude arv jne).<\/li>\n<li><em>Off by one<\/em> ehk \u00fchega m\u00f6\u00f6da. Meeldetuletuseks esimene rida on indeksiga 0<\/li>\n<li>Maagilised arvud<\/li>\n<li>Tegevuste lubamine enne maatriksi genereerimist. N\u00e4iteks sa ei saa kuvada maatriksit, mida ei ole veel genereeritud v\u00f5i millest on k\u00f5ik read \u00e4ra kustutatud.<\/li>\n<li>Vale ts\u00fckli t\u00fc\u00fcbi kasutamine (esimeses osas on ts\u00fckli t\u00fc\u00fcbid ette m\u00e4\u00e4ratud)<\/li>\n<li>Ridade ja veergude arvu sassi ajamine. Proovi n\u00e4iteks\n<ul>\n<li>genereerida 3 x 5 maatriks, vaheta \u00e4ra read 1 ja 3.<\/li>\n<li>genereerida 5 x 3 maatriks, vaheta \u00e4ra veerud 1 ja 3<\/li>\n<\/ul>\n<\/li>\n<li>Konstantide vale kasutamine &#8211; muuda maksimaalne ridade v\u00f5i veergude arvu m\u00e4\u00e4rav makro \u00e4ra ja testi oma rakendust<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_1_W10-3_Lisamine_ja_kustutamine\"><\/span>Lisa\u00fclesanne 1 [W10-3]: Lisamine ja kustutamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>T\u00e4iustame olemasoleva maatriksi suuruse modifitseerimist j\u00e4rgneva funktsionaalsusega<\/p>\n<ul>\n<li>Kasutaja saab lisada uue veeru k\u00f5ige l\u00f5ppu<\/li>\n<li>Kasutaja saab kustutada enda valitud rea<\/li>\n<li>Kasutaja saab kustutada enda valitud veeru<\/li>\n<li>Kustutatud rida v\u00f5i veerg eemaldatakse vahelt, mist\u00f5ttu j\u00e4rgmised read v\u00f5i veerud tuuakse varasemaks. Maatriksi suurus v\u00e4heneb.<\/li>\n<li>Lisa vajalik funktsionaalsus men\u00fc\u00fcsse<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_3_W10-4_Peegeldamine\"><\/span>Lisa\u00fclesanne 3 [W10-4]: Peegeldamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Lisame t\u00e4iendava funktsionaalsuse olemasolevasse programmi<\/p>\n<ul>\n<li>Kasutaja saab maatriksit transponeerida<\/li>\n<li>Kasutaja saab peegeldada maatriksit \u00fcmber oma horisontaaltelje<\/li>\n<li>Kasutaja saab peegeldada maatriksit \u00fcmber oma vertikaaltelje<\/li>\n<li>Lisa vajalik funktsionaalsus men\u00fc\u00fcsse<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Parast_seda_tundi_peaksid\"><\/span><span id=\"Parast_seda_tundi_peaksid\" class=\"ez-toc-section\"><\/span><strong>P\u00e4rast seda tundi peaksid<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Oskama luua l\u00f5putult kestvaid men\u00fc\u00fc-programme<\/li>\n<li>Teadma t\u00e4iendavaid k\u00e4ske teksti v\u00e4ljastamiseks<\/li>\n<li>Eristama t\u00e4hem\u00e4rki ja s\u00f5net<\/li>\n<li>Oskama edastada ja funktsioonis vastu v\u00f5tta\n<ul>\n<li>tervet maatriksit<\/li>\n<li>maatriksi \u00fchte rida<\/li>\n<li>maatriksi \u00fchte elementi<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Taiendav_materjal\"><\/span><span id=\"Taiendav_materjal\" class=\"ez-toc-section\"><\/span><strong>T\u00e4iendav materjal<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Menu-Driven program using Switch-case in C<br \/>\n<a href=\"https:\/\/www.geeksforgeeks.org\/menu-driven-program-using-switch-case-c\/\">https:\/\/www.geeksforgeeks.org\/menu-driven-program-using-switch-case-c\/<\/a><\/li>\n<li>Escape sequences in C<br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Escape_sequences_in_C\">https:\/\/en.wikipedia.org\/wiki\/Escape_sequences_in_C<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Teooriat ja meeldetuletusi T\u00e4hem\u00e4rk, s\u00f5ne ja v\u00e4ljastusfunktsioonid Kuigi s\u00f5nede juurde tuleme alles m\u00f5ne n\u00e4dala p\u00e4rast, siis m\u00f5ne omadusega teeme juba t\u00e4na tutvust. S\u00f5ne (string) t\u00e4hendab j\u00e4rjestatud t\u00e4hem\u00e4rkide jada. St selleks v\u00f5ib olla arusaadav s\u00f5na v\u00f5i lause, kuid v\u00f5ib olla ka arusaamatu erinevate s\u00fcmbolite jada. S\u00f5ned on alati jutum\u00e4rkide vahel. N\u00e4ited: &#8220;a&#8221; &#8220;Hello!&#8221; &#8220;I do wish &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr1-et\/10-labor-menuuprogramm\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">PR1ET10: Men\u00fc\u00fc-programm<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97,94],"tags":[],"class_list":["post-6397","post","type-post","status-publish","format-standard","hentry","category-laborid","category-pr1-et"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/6397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/types\/post"}],"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=6397"}],"version-history":[{"count":18,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/6397\/revisions"}],"predecessor-version":[{"id":9073,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/6397\/revisions\/9073"}],"wp:attachment":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/media?parent=6397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/categories?post=6397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/tags?post=6397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}