{"id":202,"date":"2022-01-20T15:52:58","date_gmt":"2022-01-20T14:52:58","guid":{"rendered":"https:\/\/wiskunst.hjgsoft.nl\/?page_id=202"},"modified":"2022-01-24T09:33:59","modified_gmt":"2022-01-24T08:33:59","slug":"parameters-en-type-declaratie","status":"publish","type":"page","link":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/","title":{"rendered":"Parameters en Type-declaratie"},"content":{"rendered":"<p>In de vorige paragraaf hebben we een voorbeeld gezien van een procedure die een regel gecentreerd in een kader zet. Dit was al heel wat, maar het wordt interessanter wanneer we zouden kunnen aangeven welke regel we in een kader zouden willen zetten en met welk karakter we het kader willen maken. Dit kan door gebruik te maken van zogenaamde parameters (waarbij de klemtoon op de tweede lettergreep ligt).<\/p>\n<p>Een parameter is eigenlijk een soort van variabele die we gerbuiken om gegevens tussen procedures (of functies) uit te wisselen, dan wel procedures (of functies) te voorzien van de juiste informatie.<\/p>\n<p>Om de zaken niet al te simpel te houden gaan we kijken naar resp. het verschil tussen formele- en actuele-parameters en het verschil tussen var- en value-parameters.<\/p>\n<p>Maar eerst gaan we kijken naar een simpel voorbeeld: maak een procedure die de som van twee getallen geeft.<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">program p8_1;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">var getal1, getal2: integer;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">procedure telop(a,b: 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 writeln(a,&#8217;+&#8217;,b,&#8217;=&#8217;,a+b);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end;<\/span><\/p>\n<p><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(&#8216;Geef eerste getal: &#8216;);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 readln(getal1);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 write(&#8216;Geef tweede getal: &#8216;);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 readln(getal2);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 telop(getal1, getal2);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end.<\/span><\/p>\n<p>Wat gebeurt er nu precies? In de op \u00e9\u00e9n na laatste regel (van het hoofdprogramma) wordt de procedure\u00a0<b>telop<\/b>\u00a0aangeroepen. Tussen haken staan nu twee argumenten. Deze argumenten dienen qua aantal en qua type overeen te komen met de definitie van\u00a0<b>telop<\/b>! Als aan beide is voldaan (in ons voorbeeld is dat zo, ga dat na!!!), dan vindt er &#8216;parameter-overdracht&#8217; plaats. Dat wil in ons voorbeeld zeggen dat\u00a0<i>getal1<\/i>\u00a0met\u00a0<i>a<\/i>\u00a0wordt gekoppeld en\u00a0<i>getal2<\/i>\u00a0met\u00a0<i>b<\/i>\u00a0wordt gekoppeld. Tijdens de uitvoer krijgt\u00a0<i>a<\/i>\u00a0dus de waarde van\u00a0<i>getal1<\/i>\u00a0en\u00a0<i>b<\/i>\u00a0de waarde van\u00a0<i>getal2<\/i>.<\/p>\n<h2>Actuele- vs. formele parameters.<\/h2>\n<p>In het voorbeeld hierboven zijn\u00a0<i>getal1<\/i>\u00a0en\u00a0<i>getal2<\/i>\u00a0in de aanroep van som de actuele parameters (ze hebben daar een &#8216;echte&#8217; waarde). De parameters\u00a0<i>a<\/i>\u00a0en\u00a0<i>b<\/i>\u00a0zijn formeel, omdat ze alleen voorkomen in de definitie van\u00a0<b>telop<\/b>, en daar geen &#8216;echte&#8217; waarde hebben.<\/p>\n<p>Voor we verdergaan is het belangrijk bovenstaand concept goed te begrijpen!<\/p>\n<p>Overigens heb ik om verwarring te voorkomen in het programma de namen van de variabelen en parameters verschillend gehouden. Dit is niet noodzakelijk!<\/p>\n<p>In het volgende voorbeeld gaan we de procedure telop aanpassen en wel als volgt: Ik wil een derde parameter hebben waarin de waarde van de som van de eerste twee parameters komt.<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">program p8_2;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">var getal1, getal2, som: integer;<\/span><\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">procedure telop(a,b,s: 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 s := a + b;<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end;<\/span><\/p>\n<p><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(&#8216;Geef eerste getal: &#8216;);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 readln(getal1);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 write(&#8216;Geef tweede getal: &#8216;);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 readln(getal2);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 telop(getal1, getal2, som);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">\u00a0 writeln(getal1,&#8217;+&#8217;,getal2,&#8217;=&#8217;,som);<\/span><br \/>\n<span style=\"font-family: 'courier new', courier, monospace; font-size: 12pt;\">end.<\/span><\/p>\n<p>Run het programma. Wat valt je op? Uit iedere optelling komt 0! Dat is natuurlijk niet goed en ook niet de bedoeling. Wat is hier aan de hand?<\/p>\n<h2>Var- en value-parameters.<\/h2>\n<p>De parameters die we tot op heden zijn tegengekomen, fungeerde voor de procedure als invoer. Dat noemen we value-parameters, ook wel invoer-parameters of val-parameters genoemd.<br \/>\nIn de meeste gevallen zal dat ook de bedoeling zijn. Dat is de reden dat in Pascal een parameters standaard (default) als value-parameter wordt aangemerkt.<br \/>\nIn ons laatste geval echter willen we dat de optelling van de parameters\u00a0<i>a<\/i>\u00a0en\u00a0<i>b<\/i>\u00a0als resultaat in\u00a0<i>s<\/i>\u00a0wordt gestopt en dat die waarde\u00a0<i>s<\/i>\u00a0wordt teruggegeven (geretourneerd) aan de aanroepende regel.<br \/>\nOm dit voor elkaar te krijgen moeten we van de parameter\u00a0<i>s<\/i>\u00a0een var-parameter maken.<\/p>\n<p>In Pascal gaat dat d.m.v. het woordje\u00a0<b>var<\/b>\u00a0voor de parameter(s) te plaatsen.<\/p>\n<p>De defini\u00ebrende regel wordt nu:<\/p>\n<p><b>procedure telop(a,b: integer; var s: integer);<br \/>\n<\/b><br \/>\nDe implementatie blijft verder hetzelfde.<\/p>\n<p>Wanneer je nu het programma runt, zul je zien dat de waarde van de formele parameter\u00a0<i>s<\/i>\u00a0keurig wordt teruggegeven aan de actuele parameter\u00a0<i>som<\/i>.<\/p>\n<h2>Type-declaratie.<\/h2>\n<p>Alvorens we naar de oefeningen gaan, moet je eerst weten dat je in Pascal ook zelf Types kan declareren.<br \/>\nVolgens de standaard van Pascal moet je dat voor de variabele-declaratie(s) doen.<br \/>\nIn Pascal gaat dat als volgt:<\/p>\n<p><b>Type [naam] = [soort-type];<\/b>,<\/p>\n<p>waarbij [naam] een unieke naam moet zijn, en [soort-type] aangeeft wat [naam] voor soort type is.<br \/>\nJe gebruikt deze constructie voor de zgn. gestructureerde types (waarover in een later hoofdstuk meer), voor opsombare types of (in Turbo Pascal) voor string-types.<br \/>\nDeze laatste zijn voor de volgende situatie van groot belang. Wanneer je een string-variabele declareert moet je tussen blokhaken aangeven hoe groot die string maximaal mag zijn. Wanneer je nu een parameter van het type string wilt hebben, dan vindt Pascal het niet goed dat je daarbij blokhaken gebruikt.<br \/>\nDit mag dus niet:\u00a0<b>procedure wiv(s: string[60]);<\/b>!<\/p>\n<p>Voorbeeldjes:<\/p>\n<p><b>Type<br \/>\nNulTotHonderd = 0..100;<br \/>\nKarakter = char;<br \/>\ns80 = String[80];<br \/>\n<\/b><br \/>\nHet type\u00a0<b>NulTotHonderd<\/b>\u00a0accepteert getallen vanaf 0 t\/m 100.<br \/>\nHet type\u00a0<b>Karakter<\/b>\u00a0is nu hetzelfde als het type char (redelijk onzinnig dus).<br \/>\nHet type\u00a0<b>s80<\/b>\u00a0kan een string van maximaal 80 karakters bevatten.<\/p>\n<p>Met het type\u00a0<b>s80<\/b>\u00a0in de hand kan nu wel een parameter worden gedeclareerd. Goed is dus:\u00a0<b>procedure wiv(s: s80);<\/b>!<\/p>\n<h2>Oefeningen.<\/h2>\n<p><b>8.1<\/b><br \/>\nPas het programma p7_1.pas zo aan dat de ingevoerde regel als parameter aan de\u00a0<b>procedure kader<\/b>\u00a0wordt meegegeven. [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/oefeningen\/#8.1\" target=\"_blank\" rel=\"noopener\">Antwoord<\/a>]\n<p><b>8.2<\/b><br \/>\nPas het programma p7_1.pas zo aan dat de procedure kader een tweede parameter krijgt die aangeeft uit welk karakter het kader moet worden gebouwd. [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/oefeningen\/#8.2\" target=\"_blank\" rel=\"noopener\">Antwoord<\/a>]\n<p> [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/deelprogrammas-en-variabelen2\/\">Deelprogramma&#8217;s en variabelen(2)<\/a>] &lt;&#8211; &#8211;&gt; [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/functies\/\">Functies<\/a>]\n","protected":false},"excerpt":{"rendered":"<p>In de vorige paragraaf hebben we een voorbeeld gezien van een procedure die een regel gecentreerd in een kader zet. Dit was al heel wat, maar het wordt interessanter wanneer we zouden kunnen aangeven welke regel we in een kader zouden willen zetten en met welk karakter we het kader willen maken. Dit kan door [&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-202","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>Parameters en Type-declaratie - 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\/parameters-en-type-declaratie\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Parameters en Type-declaratie - Wiskunst\" \/>\n<meta property=\"og:description\" content=\"In de vorige paragraaf hebben we een voorbeeld gezien van een procedure die een regel gecentreerd in een kader zet. Dit was al heel wat, maar het wordt interessanter wanneer we zouden kunnen aangeven welke regel we in een kader zouden willen zetten en met welk karakter we het kader willen maken. Dit kan door [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/\" \/>\n<meta property=\"og:site_name\" content=\"Wiskunst\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-24T08:33:59+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\\\/parameters-en-type-declaratie\\\/\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/parameters-en-type-declaratie\\\/\",\"name\":\"Parameters en Type-declaratie - Wiskunst\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\"},\"datePublished\":\"2022-01-20T14:52:58+00:00\",\"dateModified\":\"2022-01-24T08:33:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/parameters-en-type-declaratie\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/parameters-en-type-declaratie\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/parameters-en-type-declaratie\\\/#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\":\"Parameters en Type-declaratie\"}]},{\"@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":"Parameters en Type-declaratie - 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\/parameters-en-type-declaratie\/","og_locale":"nl_NL","og_type":"article","og_title":"Parameters en Type-declaratie - Wiskunst","og_description":"In de vorige paragraaf hebben we een voorbeeld gezien van een procedure die een regel gecentreerd in een kader zet. Dit was al heel wat, maar het wordt interessanter wanneer we zouden kunnen aangeven welke regel we in een kader zouden willen zetten en met welk karakter we het kader willen maken. Dit kan door [&hellip;]","og_url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/","og_site_name":"Wiskunst","article_modified_time":"2022-01-24T08:33:59+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\/parameters-en-type-declaratie\/","url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/","name":"Parameters en Type-declaratie - Wiskunst","isPartOf":{"@id":"https:\/\/wiskunst.nl\/#website"},"datePublished":"2022-01-20T14:52:58+00:00","dateModified":"2022-01-24T08:33:59+00:00","breadcrumb":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/parameters-en-type-declaratie\/#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":"Parameters en Type-declaratie"}]},{"@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\/202","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=202"}],"version-history":[{"count":6,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/202\/revisions"}],"predecessor-version":[{"id":536,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/202\/revisions\/536"}],"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=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}