{"id":204,"date":"2022-01-20T15:53:35","date_gmt":"2022-01-20T14:53:35","guid":{"rendered":"https:\/\/wiskunst.hjgsoft.nl\/?page_id=204"},"modified":"2022-01-24T09:32:42","modified_gmt":"2022-01-24T08:32:42","slug":"functies","status":"publish","type":"page","link":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/","title":{"rendered":"Functies"},"content":{"rendered":"<p>In de vorige paragraven hebben we gekeken naar procedures. In deze paragraaf gaan we kijken naar functies.<br \/>\nHet essenti\u00eble verschil tussen een procedure en een functie is dat een functie altijd een waarde moet teruggeven.<\/p>\n<p>De syntax voor een functie is als volgt:<\/p>\n<p><strong>function [naam][(parameter-lijst)]: [type];<\/strong><\/p>\n<p><strong>[var-declaratie(s)]<\/strong><\/p>\n<p><strong>begin<\/strong><br \/>\n<strong>[statement(s)];<\/strong><br \/>\n<strong>end;<\/strong><\/p>\n<p>Uiteraard zijn er grote overeenkomsten met de opzet van een procedure. Een functie moet echter van een bepaald type zijn, omdat de functie een waarde retourneerd.<br \/>\nDe vraag is hoe een functie een waarde retourneerd. In Pascal gaat dat door de uiteindelijke waarde terug te geven waarde toe te kennen aan de naam van de functie.<\/p>\n<p>Misschien klink dit alles wat abstract, dus laten we maar snel naar een voorbeeld gaan. We gaan kijken naar de procedure\u00a0<b>telop<\/b>\u00a0van\u00a0<b>program p8_2<\/b>. Hier gebruikte we een var-parameter\u00a0<i>s<\/i>\u00a0om de som van\u00a0<i>a<\/i>\u00a0en\u00a0<i>b<\/i>\u00a0te retourneren. We gaan deze procedure ombouwen naar een functie:<\/p>\n<p><span style=\"font-family: courier new; font-size: small;\"><b><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">function telop(a,b: integer): integer;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">begin<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 telop := a + b;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end;<\/span><br \/>\n<\/b><\/span><\/p>\n<p>De var-parameter\u00a0<i>s<\/i>\u00a0hebben we niet meer nodig, want de functie\u00a0<b>telop<\/b>\u00a0krijgt nu de waarde van\u00a0<i>a + b<\/i>. Dit gebeurt bij de implementatie door\u00a0<i>a + b<\/i>\u00a0toe te kennen aan\u00a0<b>telop<\/b>\u00a0(de naam van de functie).<br \/>\nDe aanroep van\u00a0<b>telop<\/b>\u00a0wordt nu ook anders. Daar\u00a0<b>telop<\/b>\u00a0een waarde retourneert moet je die ergens aan toe kennen.<br \/>\nDe aanroep wordt nu:\u00a0<b>som := telop(getal1,getal2);<\/b>.<\/p>\n<p>Een bijkomend voordeel van functies is dat je ze mag nesten, iets wat bij procedures onmogelijk is.<br \/>\nMet onze functie\u00a0<b>telop<\/b>\u00a0kunnen we nu bv. de volgende constructie maken:\u00a0<b>x := telop(2,telop(telop(3,4),telop(5,6)));<\/b>, wat resulteert in x=20.<\/p>\n<p>Nog wat voorbeeldjes:<\/p>\n<p><span style=\"font-family: courier new; font-size: small;\"><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">function aantal_letters(s: s[80]): byte;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 var x,a: integer;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">begin<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 a := 0;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 for x := 1 to length(s) do<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 \u00a0 if ((s[x] &gt;= &#8216;a&#8217;) and (s[x] &lt;= &#8216;z&#8217;)) or ((s[x] &gt;= &#8216;a&#8217;)\u00a0 \u00a0 \u00a0 and (s[x] &lt;= &#8216;z&#8217;)) then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 \u00a0 \u00a0 a := a + 1;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 aantal_letters := a;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end;<\/span><b><br \/>\n<\/b><\/span><\/p>\n<p>Met deze functie wordt het aantal letters geteld dat in de string s zit. Het type s80 moet al eerder gedeclareerd zijn.<br \/>\nMet de constructie s[x] wordt het x-de karakter van s bedoeld. Nadere uitleg over deze constructie vindt u bij gestructureerde types.<\/p>\n<p><span style=\"font-family: courier new; font-size: small;\"><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">function JaNee(vraag: s80): boolean;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 var k: char;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">begin<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 write(vraag+&#8217; [J\/N]: &#8216;);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 repeat<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 \u00a0 read(kbd,k);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 until k in [&#8216;j&#8217;,&#8217;J&#8217;,&#8217;n&#8217;,&#8217;N&#8217;,#13];<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 if (k = #13) or (k = &#8216;j&#8217;) then<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 \u00a0 k = &#8216;J&#8217;;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 writeln(k);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 JaNee := (k = &#8216;J&#8217;);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end;<\/span><b><br \/>\n<\/b><\/span><\/p>\n<p>Met deze functie kunt u een Ja\/Nee-vraag stellen en kijken of er Ja is geantwoord. De functie is van het type\u00a0<b>boolean<\/b>\u00a0en geeft dus de waarde\u00a0<i>true<\/i>\u00a0of\u00a0<i>false<\/i>\u00a0terug.<br \/>\nVerder vind je in deze functie de constructie\u00a0<b>read(kbd,k);<\/b>, waarmee het toetsenbord wordt gescand. Deze opdracht zit in een\u00a0<i>repeat-until-lus<\/i>\u00a0die pas wordt verlaten als de gebruiker op de\u00a0<i>j(J)<\/i>\u00a0van\u00a0<i>ja<\/i>\u00a0of de\u00a0<i>n(N)<\/i>\u00a0van\u00a0<i>nee<\/i>\u00a0heeft gedrukt. Wanneer de gebruiker op de\u00a0<i>Enter-toets(#13)<\/i>\u00a0drukt wordt dat geinterpreteerd als een\u00a0<i>J<\/i>. De constructie\u00a0<b>until k in [&#8216;j&#8217;,&#8217;J&#8217;,&#8217;n&#8217;,&#8217;N&#8217;,#13];<\/b>\u00a0is ook erg handig en kunt u letterlijk vertalen met:\u00a0<i>totdat k in de verzameling {&#8216;j&#8217;,&#8217;J&#8217;,&#8217;n&#8217;,&#8217;N&#8217;,Enter} zit.<\/i><br \/>\nVoorbeeld van het gebruik van bovenstaande functie:<br \/>\n<b>repeat<br \/>\n[statements];<br \/>\nuntil JaNee(&#8216;Wilt u stoppen?&#8217;);<br \/>\n<\/b>of<br \/>\n<b>repeat<br \/>\n[statements];<br \/>\nuntil not JaNee(&#8216;Wilt u nog een keer?&#8217;);<br \/>\n<\/b><br \/>\nLet even op het subtiele verschil tussen beide voorbeelden.<\/p>\n<h2>Oefeningen.<\/h2>\n<p><a name=\"9.1\"><\/a><b>9.1<\/b><br \/>\nDe rij van Fibonacci is beroemd. Wanneer u daar het fijne van wilt weten, dan moet u maar even googelen.<br \/>\nDe rij gaat als volgt: 1, 1, 2, 3, 5, 8, 13, 21, &#8230;; de n-de term is de som van de voorgaande twee termen. De eerste twee termen zijn 1.<br \/>\nSchrijf een functie\u00a0<b>FibIter(n: byte): integer;<\/b>\u00a0die de n-e term van de rij van Fibonacci geeft. Dus\u00a0<i>FibIter(12)<\/i>\u00a0moet\u00a0<i>144<\/i>\u00a0opleveren. [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/oefeningen\/#9.1\" target=\"_blank\" rel=\"noopener\">Antwoord<\/a>]\n<p><b>9.2<\/b><br \/>\nSchrijf een functie\u00a0<b>UCase(s: s80): s80;<\/b>\u00a0die alle kleine letters in s omzet naar hoofdletters, waarbij\u00a0<i>s80<\/i>\u00a0een string-type van maximaal 80 karakters is.<br \/>\nHierbij kunt (moet?) je gbruik maken van twee standaard-functies:\u00a0<b>ord<\/b>\u00a0en\u00a0<b>chr<\/b>.<br \/>\nMet\u00a0<b>ord([karakter])<\/b>\u00a0krijgt u de ascii-waarde van\u00a0<i>[karakter]<\/i>. Met\u00a0<b>chr([nummer])<\/b>\u00a0krijgt u het karakter met ascii-waarde\u00a0<i>[nummer]<\/i>.<br \/>\nDe ascii-waardes van resp a en A zijn: 97 en 65. Hiermee moet je het kunnen doen. [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/oefeningen\/#9.2\" target=\"_blank\" rel=\"noopener\">Antwoord<\/a>]\n<p> [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/parameters-en-type-declaratie\/\">Parameters en Type-declaratie<\/a>] &lt;&#8211; &#8211;&gt; [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/bestanden\/\">Bestanden<\/a>]\n","protected":false},"excerpt":{"rendered":"<p>In de vorige paragraven hebben we gekeken naar procedures. In deze paragraaf gaan we kijken naar functies. Het essenti\u00eble verschil tussen een procedure en een functie is dat een functie altijd een waarde moet teruggeven. De syntax voor een functie is als volgt: function [naam][(parameter-lijst)]: [type]; [var-declaratie(s)] begin [statement(s)]; end; Uiteraard zijn er grote overeenkomsten [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":185,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"class_list":["post-204","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Functies - Wiskunst<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Functies - Wiskunst\" \/>\n<meta property=\"og:description\" content=\"In de vorige paragraven hebben we gekeken naar procedures. In deze paragraaf gaan we kijken naar functies. Het essenti\u00eble verschil tussen een procedure en een functie is dat een functie altijd een waarde moet teruggeven. De syntax voor een functie is als volgt: function [naam][(parameter-lijst)]: [type]; [var-declaratie(s)] begin [statement(s)]; end; Uiteraard zijn er grote overeenkomsten [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/\" \/>\n<meta property=\"og:site_name\" content=\"Wiskunst\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-24T08:32:42+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/functies\\\/\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/functies\\\/\",\"name\":\"Functies - Wiskunst\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\"},\"datePublished\":\"2022-01-20T14:53:35+00:00\",\"dateModified\":\"2022-01-24T08:32:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/functies\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/functies\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/functies\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmeren\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Programmeren met Pascal\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Functies\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/\",\"name\":\"Wiskunst\",\"description\":\"2\u221e\u2227&gt;\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wiskunst.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Functies - Wiskunst","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/","og_locale":"nl_NL","og_type":"article","og_title":"Functies - Wiskunst","og_description":"In de vorige paragraven hebben we gekeken naar procedures. In deze paragraaf gaan we kijken naar functies. Het essenti\u00eble verschil tussen een procedure en een functie is dat een functie altijd een waarde moet teruggeven. De syntax voor een functie is als volgt: function [naam][(parameter-lijst)]: [type]; [var-declaratie(s)] begin [statement(s)]; end; Uiteraard zijn er grote overeenkomsten [&hellip;]","og_url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/","og_site_name":"Wiskunst","article_modified_time":"2022-01-24T08:32:42+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"4 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/","url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/","name":"Functies - Wiskunst","isPartOf":{"@id":"https:\/\/wiskunst.nl\/#website"},"datePublished":"2022-01-20T14:53:35+00:00","dateModified":"2022-01-24T08:32:42+00:00","breadcrumb":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/functies\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wiskunst.nl\/"},{"@type":"ListItem","position":2,"name":"Programmeren","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/"},{"@type":"ListItem","position":3,"name":"Programmeren met Pascal","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/"},{"@type":"ListItem","position":4,"name":"Functies"}]},{"@type":"WebSite","@id":"https:\/\/wiskunst.nl\/#website","url":"https:\/\/wiskunst.nl\/","name":"Wiskunst","description":"2\u221e\u2227&gt;","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wiskunst.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/comments?post=204"}],"version-history":[{"count":6,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/204\/revisions"}],"predecessor-version":[{"id":531,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/204\/revisions\/531"}],"up":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/185"}],"wp:attachment":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/media?parent=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}