{"id":71,"date":"2019-03-03T16:59:07","date_gmt":"2019-03-03T16:59:07","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/?post_type=chapter&#038;p=71"},"modified":"2019-06-08T07:04:36","modified_gmt":"2019-06-08T07:04:36","slug":"jarjend-ja-funktsioon","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/chapter\/jarjend-ja-funktsioon\/","title":{"raw":"J\u00e4rjend ja funktsioon","rendered":"J\u00e4rjend ja funktsioon"},"content":{"raw":"<h2 class=\"vspace\">J\u00e4rjend funktsiooni argumendina<\/h2>\r\n<p class=\"vspace\">Programmide kirjutamisel on m\u00f5istlik p\u00fc\u00fcda t\u00f6\u00f6d jaotada erinevateks osadeks - alamprogrammideks ehk funktsioonideks. Funktsiooni teemat v\u00f5id korrata <a class=\"urllink\" href=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/chapter\/alamprogramm-funktsioon\/\" target=\"_blank\" rel=\"noopener noreferrer\">programmeerimise \u00f5piku materjalidest<\/a>.<\/p>\r\n<p class=\"vspace\">Pythonis on juba mitmeid defineeritud funktsioone, millele saab anda argumendiks j\u00e4rjendi, n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">min<\/code><\/code> ja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">len<\/code><\/code>. Ka funktsioonile <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">print<\/code> saab anda argumendiks j\u00e4rjendi.<\/p>\r\n\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">a = [2, -3, 5, 1]\r\nprint(max(a))\r\nprint(min(a))\r\nprint(len(a))\r\nprint(a)<\/pre>\r\n<\/div>\r\n<\/div>\r\n<p class=\"vspace\">J\u00e4rgmine funktsioon kontrollib, kas esimese argumendina antud j\u00e4rjendis on elemente, mis on suuremad teisest argumendist. Kui on, siis tagastatakse t\u00f5ev\u00e4\u00e4rtus <code>True<\/code> ja kui pole, siis t\u00f5ev\u00e4\u00e4rtus <code>False<\/code>:<\/p>\r\n\r\n<div class=\"vspace\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def on_suuremaid(jarjend, piir):\r\n    for i in range(len(jarjend)):\r\n        if jarjend[i] &gt; piir:\r\n            return True\r\n    return False<\/pre>\r\n<\/div>\r\n<div class=\"lrindent round\">\r\n\r\nOluline on t\u00e4hele panna, et piirist suuremate elementide puudumist (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">return False<\/code><\/code>) tohib kinnitada alles siis, kui k\u00f5ik elemendid on l\u00e4bi vaadatud. Leidumist saame kinnitada kohe, kui sellise elemendi leiame.\r\n<p class=\"vspace\">Pane t\u00e4hele, et tegelikult saaks sama \u00fclesannet lihtsamini lahendada funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code><\/code> abil. Kui j\u00e4rjendi maksimaalne element on piirist suurem, siis on tulemus <code>True<\/code>, vastasel juhul <code>False<\/code>:<\/p>\r\n\r\n<div class=\"vspace\"><\/div>\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def on_suuremaid(jarjend, piir):\r\n    return max(jarjend) &gt; piir<\/pre>\r\n<h3>Enesekontroll (1 k\u00fcsimus)<\/h3>\r\n<strong> <code>[h5p id=\"8\"]<\/code> <\/strong>\r\n\r\n&nbsp;\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<p class=\"vspace\">Funktsioonina v\u00f5ime realiseerida ka m\u00f5ne varemtoodud konstruktsiooni. Tabelit v\u00e4ljastava funktsiooni puhul ei tagastata midagi (t\u00e4psemalt tagastatakse <code>None<\/code>). See-eest toimub funktsiooni sees ekraanile v\u00e4ljastamine:<\/p>\r\n<strong>N\u00e4iteprogramm. Funktsiooniga v\u00e4ljastamine<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def valjasta_tabel(tabel):\r\n    for i in range(len(tabel)):\r\n        for j in range(len(tabel[i])):\r\n            print(tabel[i][j], end=\" \")\r\n        print()\r\n \r\narvude_tabel = [[1, 3, 5], [4, 6, 6], [3, 6, -3]]\r\nvaljasta_tabel(arvude_tabel)\r\nprint()\r\narvude_tabel2 = [[-1, 3, 5], [4, -8, 6]]\r\nvaljasta_tabel(arvude_tabel2)\r\nprint()\r\nriimitabel = [['karu', 'maru', 'taru'], ['haru', 'varu', 'naru']]\r\nvaljasta_tabel(riimitabel)<\/pre>\r\n<p class=\"vspace\">Loomulikult v\u00f5ib funktsioon ka mingi v\u00e4\u00e4rtuse tagastada. N\u00e4iteks v\u00f5ib loendada, mitu positiivset elementi on etteantud tabeli (esimene argument) etteantud indeksiga (teine argument) veerus:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def positiivsete_arv_veerus(tabel, veeru_indeks):\r\n    loendaja = 0\r\n    for rida in tabel:\r\n        if rida[veeru_indeks] &gt; 0:\r\n            loendaja += 1\r\n    return loendaja<\/pre>\r\n<div>\r\n<h3><span id=\"test2-tog\" class=\"toggle\">Enesekontroll (1 k\u00fcsimus)\r\n<\/span><\/h3>\r\n<strong> <code>[h5p id=\"9\"]<\/code> <\/strong>\r\n\r\n&nbsp;\r\n\r\n<\/div>\r\n<h2 class=\"vspace\">J\u00e4rjend funktsiooni v\u00e4\u00e4rtusena<\/h2>\r\n<p class=\"vspace\">Funktsioon v\u00f5ib tagastada j\u00e4rjendi, mis v\u00f5ib olla kahem\u00f5\u00f5tmeline (v\u00f5i rohkemgi).<\/p>\r\n<p class=\"vspace\">Koostame funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">loo_diagonaalmaatriks(n)<\/code><\/code>, mille argumendi <code>n<\/code> v\u00e4\u00e4rtus n\u00e4itab, kui suur ruutmaatriks tehakse. Maatriksi peadiagonaali elementidele anname v\u00e4\u00e4rtuse 1 ja k\u00f5ikjale mujale v\u00e4\u00e4rtuse 0. N\u00e4iteks v\u00e4ljakutsumine <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">loo_diagonaalmaatriks(3)<\/code><\/code> peaks tagastama <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">[[1, 0, 0], [0, 1, 0], [0, 0, 1]]<\/code>. Kasutame \u00e4ra teadmist, et peadiagonaali element on parajasti selline, mille rea- ja veeruindeks on v\u00f5rdsed:<\/p>\r\n\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def loo_diagonaalmaatriks(n):\r\n    maatriks = []\r\n    for i in range(n):       # v\u00e4limine ts\u00fckkel tekitab ridu\r\n        rida = []\r\n        for j in range(n):   # sisemine hoolitseb iga rea t\u00e4itmise eest\r\n            if i == j:          # tegemist on peadiagonaali elemendiga\r\n                rida.append(1)\r\n            else:\r\n                rida.append(0)\r\n        maatriks.append(rida)\r\n    return maatriks<\/pre>\r\n<\/div>\r\n<\/div>\r\n<p class=\"vspace\">Proovi funktsiooni t\u00e4iendada nii, et sellele antakse ka teine argument, mille v\u00e4\u00e4rtus kirjutatakse 1 asemel peadiagonaali elementideks.<\/p>\r\n\r\n<h3 class=\"vspace\">Enesekontroll (3 \u00fclesannet)<span id=\"test5-tog\" class=\"toggle\"> <\/span><\/h3>\r\n<strong> <code>[h5p id=\"10\"]<\/code> <\/strong>\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n\r\n&nbsp;\r\n\r\n<\/div>\r\n<\/div>","rendered":"<h2 class=\"vspace\">J\u00e4rjend funktsiooni argumendina<\/h2>\n<p class=\"vspace\">Programmide kirjutamisel on m\u00f5istlik p\u00fc\u00fcda t\u00f6\u00f6d jaotada erinevateks osadeks &#8211; alamprogrammideks ehk funktsioonideks. Funktsiooni teemat v\u00f5id korrata <a class=\"urllink\" href=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/chapter\/alamprogramm-funktsioon\/\" target=\"_blank\" rel=\"noopener noreferrer\">programmeerimise \u00f5piku materjalidest<\/a>.<\/p>\n<p class=\"vspace\">Pythonis on juba mitmeid defineeritud funktsioone, millele saab anda argumendiks j\u00e4rjendi, n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">min<\/code><\/code> ja <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">len<\/code><\/code>. Ka funktsioonile <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">print<\/code> saab anda argumendiks j\u00e4rjendi.<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">a = [2, -3, 5, 1]\r\nprint(max(a))\r\nprint(min(a))\r\nprint(len(a))\r\nprint(a)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">J\u00e4rgmine funktsioon kontrollib, kas esimese argumendina antud j\u00e4rjendis on elemente, mis on suuremad teisest argumendist. Kui on, siis tagastatakse t\u00f5ev\u00e4\u00e4rtus <code>True<\/code> ja kui pole, siis t\u00f5ev\u00e4\u00e4rtus <code>False<\/code>:<\/p>\n<div class=\"vspace\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def on_suuremaid(jarjend, piir):\r\n    for i in range(len(jarjend)):\r\n        if jarjend[i] &gt; piir:\r\n            return True\r\n    return False<\/pre>\n<\/div>\n<div class=\"lrindent round\">\n<p>Oluline on t\u00e4hele panna, et piirist suuremate elementide puudumist (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">return False<\/code><\/code>) tohib kinnitada alles siis, kui k\u00f5ik elemendid on l\u00e4bi vaadatud. Leidumist saame kinnitada kohe, kui sellise elemendi leiame.<\/p>\n<p class=\"vspace\">Pane t\u00e4hele, et tegelikult saaks sama \u00fclesannet lihtsamini lahendada funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code><\/code> abil. Kui j\u00e4rjendi maksimaalne element on piirist suurem, siis on tulemus <code>True<\/code>, vastasel juhul <code>False<\/code>:<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def on_suuremaid(jarjend, piir):\r\n    return max(jarjend) &gt; piir<\/pre>\n<h3>Enesekontroll (1 k\u00fcsimus)<\/h3>\n<p><strong> <code><\/p>\n<div id=\"h5p-8\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-8\" class=\"h5p-iframe\" data-content-id=\"8\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"2xts\u00fckkel-2-1-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code> <\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"vspace\">Funktsioonina v\u00f5ime realiseerida ka m\u00f5ne varemtoodud konstruktsiooni. Tabelit v\u00e4ljastava funktsiooni puhul ei tagastata midagi (t\u00e4psemalt tagastatakse <code>None<\/code>). See-eest toimub funktsiooni sees ekraanile v\u00e4ljastamine:<\/p>\n<p><strong>N\u00e4iteprogramm. Funktsiooniga v\u00e4ljastamine<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def valjasta_tabel(tabel):\r\n    for i in range(len(tabel)):\r\n        for j in range(len(tabel[i])):\r\n            print(tabel[i][j], end=\" \")\r\n        print()\r\n \r\narvude_tabel = [[1, 3, 5], [4, 6, 6], [3, 6, -3]]\r\nvaljasta_tabel(arvude_tabel)\r\nprint()\r\narvude_tabel2 = [[-1, 3, 5], [4, -8, 6]]\r\nvaljasta_tabel(arvude_tabel2)\r\nprint()\r\nriimitabel = [['karu', 'maru', 'taru'], ['haru', 'varu', 'naru']]\r\nvaljasta_tabel(riimitabel)<\/pre>\n<p class=\"vspace\">Loomulikult v\u00f5ib funktsioon ka mingi v\u00e4\u00e4rtuse tagastada. N\u00e4iteks v\u00f5ib loendada, mitu positiivset elementi on etteantud tabeli (esimene argument) etteantud indeksiga (teine argument) veerus:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def positiivsete_arv_veerus(tabel, veeru_indeks):\r\n    loendaja = 0\r\n    for rida in tabel:\r\n        if rida[veeru_indeks] &gt; 0:\r\n            loendaja += 1\r\n    return loendaja<\/pre>\n<div>\n<h3><span id=\"test2-tog\" class=\"toggle\">Enesekontroll (1 k\u00fcsimus)<br \/>\n<\/span><\/h3>\n<p><strong> <code><\/p>\n<div id=\"h5p-9\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-9\" class=\"h5p-iframe\" data-content-id=\"9\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"2xts\u00fckkel-2-2-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code> <\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<h2 class=\"vspace\">J\u00e4rjend funktsiooni v\u00e4\u00e4rtusena<\/h2>\n<p class=\"vspace\">Funktsioon v\u00f5ib tagastada j\u00e4rjendi, mis v\u00f5ib olla kahem\u00f5\u00f5tmeline (v\u00f5i rohkemgi).<\/p>\n<p class=\"vspace\">Koostame funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">loo_diagonaalmaatriks(n)<\/code><\/code>, mille argumendi <code>n<\/code> v\u00e4\u00e4rtus n\u00e4itab, kui suur ruutmaatriks tehakse. Maatriksi peadiagonaali elementidele anname v\u00e4\u00e4rtuse 1 ja k\u00f5ikjale mujale v\u00e4\u00e4rtuse 0. N\u00e4iteks v\u00e4ljakutsumine <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">loo_diagonaalmaatriks(3)<\/code><\/code> peaks tagastama <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">[[1, 0, 0], [0, 1, 0], [0, 0, 1]]<\/code>. Kasutame \u00e4ra teadmist, et peadiagonaali element on parajasti selline, mille rea- ja veeruindeks on v\u00f5rdsed:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def loo_diagonaalmaatriks(n):\r\n    maatriks = []\r\n    for i in range(n):       # v\u00e4limine ts\u00fckkel tekitab ridu\r\n        rida = []\r\n        for j in range(n):   # sisemine hoolitseb iga rea t\u00e4itmise eest\r\n            if i == j:          # tegemist on peadiagonaali elemendiga\r\n                rida.append(1)\r\n            else:\r\n                rida.append(0)\r\n        maatriks.append(rida)\r\n    return maatriks<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Proovi funktsiooni t\u00e4iendada nii, et sellele antakse ka teine argument, mille v\u00e4\u00e4rtus kirjutatakse 1 asemel peadiagonaali elementideks.<\/p>\n<h3 class=\"vspace\">Enesekontroll (3 \u00fclesannet)<span id=\"test5-tog\" class=\"toggle\"> <\/span><\/h3>\n<p><strong> <code><\/p>\n<div id=\"h5p-10\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-10\" class=\"h5p-iframe\" data-content-id=\"10\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"2xts\u00fckkel-2-3-kolmk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code> <\/strong><\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n","protected":false},"author":12,"menu_order":2,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-71","chapter","type-chapter","status-publish","hentry"],"part":24,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/71","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":19,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/71\/revisions"}],"predecessor-version":[{"id":225,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/71\/revisions\/225"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/parts\/24"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/71\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/media?parent=71"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapter-type?post=71"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/contributor?post=71"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/license?post=71"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}