Gestructureerd programmeren: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
kGeen bewerkingssamenvatting
Richardw (overleg | bijdragen)
geen "we gaan..."; de "begrensde herhalingsstructuur" is een structurele mogelijkheid binnen veel programmeertalen maar geen vereiste / eigenschap van "gestructureerd programmeren"
Regel 1:
'''Gestructureerd programmeren''' kan worden gezien als een subdiscipline van [[procedureel programmeren]], een van de belangrijke [[programmeerparadigma]]'s (en waarschijnlijk dehet populairste) voor het [[Programmeren (computer)|programmeren]] van [[computer]]s.
 
In de [[1960-1969|jaren '60zestig]] werd het langzaamaan duidelijk dat de complexiteit van [[computerprogramma]]'s uit de hand begon te lopen. [[Softwareontwikkelaar|Programmeurs]] zagen door de bomen het bos niet meer.
 
Goede programmeurs wisten door structureel te werken echter code te produceren die veel makkelijker te doorzien was. Het viel op dat bekwame programmeurs met name veel minder ''[[GOTO]]''-statements gebruikten. Wetenschappers in de [[informatica]], waaronder met name [[Edsger Dijkstra]], [[Jean-Dominique Warnier]] en [[Michael A. Jackson]], zagen de oplossing in het gestructureerd programmeren, waarbij het door nieuwe constructies in programmeertalen onnodig zou worden constructies als het ''goto''-statement te gebruiken, waardoor de leesbaarheid van code veel beter werd.
Regel 7:
De drie basisconstructies in gestructureerd programmeren zijn:
* ''[[sequentieel programmeren|sequentie]]'' = opeenvolging ''(S1 S2)''
* ''[[selectie (statistiek)|selectie]]'' = keuzestructuur ''(if B then S1 else S2)''
* ''[[repetitie (informatica)|iteratie]]'' = herhaling (met de herhalingsvoorwaarde voorafvoor- of achteraf:; meestal ''while B do S'' en ''do S until B'')
* ''[[Selectie (statistiek)|selectie]]'' = keuzestructuur ''(if B then S1 else S2)''
 
SHierbij staat S voor een opdracht ([[statement|'''S'''tatement]]), en B voor een [[logische expressie]] ([[boolean|'''B'''oolean]]).
Belangrijk is hierbij dat zowel een opdracht als een [[logische expressie]] willekeurig complex mogenmag zijn. In programmeertalen is dat voor opdrachten gerealiseerd door ''begin…end''-constructies:
* ''BEGIN'' en ''END'' in [[programmeertaal Pascal|Pascal]];
* de [[accolade]]s ''{'' en ''}'' in onder meer [[Programmeertaal C|C]], [[Programmeertaal Java|Java]], [[Scala (programmeertaal)|Scala]] en [[PHP]].
 
Men hoopte dat een en ander het bewijzen van de (wiskundige) [[correctheid van een programma]] mogelijk zou maken. (DitDat is inechter detot praktijkop andersheden uitgevallenniet gelukt.<!-- hoezo? -->)
 
Als alternatief voor het [[stroomdiagram]] werd het [[programmastructuur-diagram|Nassi -Shneiderman -diagram]] uitgevonden. De restricties hiervan werken in het voordeel van het programmeren, het zijn dezelfde restricties die men moet hanteren met gestructureerd programmeren.
 
Dit gestructureerde programmeren leidde tot een nieuwe generatie [[programmeertaal|programmeertalen]],. waarvanVrijwel met name de [[programmeertaal Pascal]] het ver geschopt heeft. Alal deze talen kennen nog wel het ''goto''-statement en het label nog wel, maar het gebruik ervan wordt sterk afgeraden en bemoeilijkt door extra labeldeclaratiesdeclaratieverplichtingen.
 
== enkelvoudigeEnkelvoudige keuzestructuur ==
Bij een keuzestructuur gaan wewordt een bepaald stuk code, afhankelijk van een voorwaarde, al ofdan niet laten uitvoerenuitgevoerd door de computer, afhankelijk van de voorwaarde.
 
{| class="wikitable"
Regel 28:
! beschrijving
|-
| if ''v'' then ...''xxx''
| ''xxx'' wordt alleen uitgevoerd als aan de voorwaarde danvoldaan {...}wordt
|-
| if ''v'' then ...''xxx'' else ...''yyy''
| als aan de voorwaarde voldaan wordt, wordt ''xxx'' uitgevoerd; zo niet wordt ''yyy'' uitgevoerd
| anders voeren we een andere opdracht uit
|-
| if v''v1'' then ...''xxx'' elseif ''v2'' ...else
| als niet aan de eerste voorwaarde voldaan wordt, worden vervolgacties afhankelijk van een tweede voorwaarde
| anders voeren we opnieuw een andere opdracht uit
|}
 
'';voorbeeld van een if''
<source lang="php">
<?
$humeur = "slecht";
if ($humeur == "slecht") {
echo ("ik ben slecht gezindslechtgehumeurd");
}
?>
</source>
'';voorbeeld van een elseif''
<source lang="php">
<?
$humeur = "goed";
if ($humeur == "slecht") {
echo "ik ben slecht gezindslechtgehumeurd";
}
elseif ($humeur == "verveeld") {
echo "ik verveel mij";
}
else {
echo "ik ben goed gezindgoedgeluimd";
}
?>
</source>
 
== meervoudigeMeervoudige keuzestructuur ==
Bij een meervoudige keuzestructuur (of: ''switch'') kan gereageerd worden op verschillende waarden. Dit kan ook geïmplementeerd worden met een aantal enkelvoudige keuzestructuren (en de kans is groot dat daar dan "elseif"-statements in voorkomen), maar met een switch gaat het eenvoudiger:
Zoals de naam al zegt, gaan we bij een meervoudige keuzestructuur een keuze maken uit meerdere mogelijkheden. Deze zijn uiteraard ook te maken met een enkelvoudige, maar met een switch gaat dit makkelijker:
 
<source lang="php">
Regel 71:
switch ($humeur) {
case "slecht":
echo "ik ben slecht gezindslechtgehumeurd";
break;
case "verveeld":
echo "ik verveel mij";
break;
default:
echo "ik ben goed gezindgoedgeluimd";
}
?>
</source>
 
== voorwaardelijkeVoorwaardelijke herhalingsstructuur ==
HierAls statements voorwaardelijk herhaald moeten worden zijn 2er twee mogelijkheden:
* eerst testen, daarna de opdracht uitvoeren en vervolgens opnieuw testen (en eventueel de opdracht uitvoeren, opnieuw testen enzovoorts)
* eerst de opdracht uitvoeren, daarna testen, eventueel de opdracht herhalen, opnieuw testen enzovoorts.
In het eerste geval kan het zijn dat de opdracht helemaal nooit uitgevoerd wordt (herhaling van 0 of meer keren), in het tweede geval wordt de opdracht minimaal één keer uitgevoerd.
 
;PHP-voorbeeld van eerste mogelijkheid
* while: eerst testen, daarna de opdracht uitvoeren
 
''PHP voorbeeld''
<source lang="php">
<?
$teller = 0;
while ($teller <= 12) {
echo "de teller zit nu aan: $teller <br />";
$teller++;
}
?>
</source>
 
;PHP-voorbeeld van de tweede mogelijkheid
* do while: eerst opdracht uitvoeren, dan pas testen
 
''PHP voorbeeld''
<source lang="php">
<?
$teller = 0;
do {
$teller++;
echo "de teller zit nu aan: $teller <br />";
} while ($teller <= 12);
?>
</source>
 
=== begrensde herhalingsstructuur ===
Hierbij weten we op voorhand hoeveel maal we een bepaalde blok code willen herhalen:
<source lang="php">
<?
for ($i = 1; $i <= 5; $i++) {
echo "hallo nummer $i ! ";
}
?>
</source>
Hier bevinden zich 3 parameters :
1) initialiseert de variabele 2) voorwaarde en 3) de actie die er moet gebeuren bij de herhaling.
 
Om een Array te doorlopen gebruiken we de foreach uitdrukking. Bij elke doorloop wordt de huidige waarde van de array gegeven aan de variabele $value tot de hele array doorlopen is:
 
<source lang="php">
<?
$arr=array("een", "twee", "drie");
foreach ($arr as $value) {
echo "De waarde is $value <br />";
}
?>
</source>
Regel 138 ⟶ 114:
* [[Jackson Structured Programming]]
* [[Big Design Up Front]]
* [[Nassi Shneiderman diagram]]
 
{{Wikibooks|Programmeren, de basis/De controlestructuren}}