6. De iteratie of de herhaling (98/12/29)
de begrensde herhaling (for ...)
de herhaling met aanvangsvoorwaarde (while...)
de herhaling met afbreekvoorwaarde (do....)
Als je een getal moet invoeren, dan ga je normaal gewoon gebruik maken van de sequentie of de opeenvolging. Ook voor het invoeren van 5 getallen kun je gemakkelijk volgend schema opmaken:
| lees getal1 |
| lees getal2 |
| lees getal3 |
| lees getal4 |
| lees getal5 |
| som=getal1+getal2+getal3+getal4+getal5 |
| druk som |
Maar als men je eens honderd getallen gaat vragen, dan begrijp je best dat je hier beter voor een andere, eenvoudiger oplossing zorgt. Deze bestaat erin een lus, herhaling of iteratie te gebruiken . Er bestaan een aantal herhalingen, elk voor een andere toepassing:
De meest eenvoudige herhaling is de begrensde hehaling . Hier weet je op voorhand hoeveel maal je iets wilt herhalen.
| De iteratievoorwaarde bevat een begin- en een eindwaarde waarbij de beginwaarde telkens verhoogd of verlaagd wordt met de waarde van de stap. |
Het Nassi Schneidermanndiagram ziet eruit als volgt:

we gebruiken hiervoor
for (startexpressie;voorwaarde;stapgrootte)
de for-lus heeft altijd drie parameters. Ze worden door puntkomma's van elkaar gescheiden.
startexpressie: hier moet je een beginwaarde geven aan de lusvariable
voorwaarde: aan deze voorwaarde moet je voldoen om verder te kunnen gaan met de herhaling. Wordt deze voorwaarde onwaar, dan stopt de herhaling
stapgrootte: dit is een statement dat bij elke herhaling van de lus wordt uitgevoerd. Hier ga je de teller verhogen of verlagen .
opmerking:
voor de beginwaarde mag je
ook een variabele gebruiken die elders in het script voorkomt
6.1.1. Voorbeelden
Voorbeeld 1
Om de getallen van 1 t.e.m. 10 af te drukken doen we het volgende:
Probleemdefinitie: we willen de getallen van 1 t.e.m. 10 afdrukken. Er wordt dus geen invoer
gevraagd, alleen afdruk. We gaan dus een teller ( met als naam GETAL)
maken en eenvoudig de inhoud ervan afdrukken.
Probleemanalyse:

Programmatie:
<html>
<head>
<title></title>
</head>
<body>
<script language="javascript">
for (getal=1;getal<=10;getal++)
{document.write(getal,"<br>")}
</script>
</body>
</html>
Voorbeeld 2
Willen we een tekst 100 maal afdrukken dan doen we dit als volgt:
Probleemdefinitie: Om een tekst 100 maal af te drukken hebben we een telwerk nodig, bv.
teller. Invoer is niet nodig, we drukken gewoon dezelfde tekst af. Deze
tekst moet binnen de lus staan anders wordt hij niet herhaald.
Probleemanalyse:

Programmatie:
<html> <head> <title></title> </head> <body> <script language="javascript">for (teller=1;teller<=100;teller++)
{document.write(" we leren algoritmen en herhalen veel","<br>")}
</script> </body> </html>Voorbeeld 3
je kan echter ook met meer dan één waarde omhoog. Zo kun je bijvoorbeeld de even getallen tussen 1 en 100 afdrukken:
Probleemdefinitie: We hebben een telwerk nodig van 1 t.e.m. 100 waarbij we de inhoud van
de lusvariabele afdrukken en de stapgrootte op 2 plaatsen.
Probleemanalyse:

Programmatie:
<html> <head> <title></title> </head> <body> <script language="javascript">for (getal=2;getal<=100;getal=getal+2)
{document.write (getal,"<br>")}
</script> </body> </html>6.1.2 oefeningen
| Een herhaling met aanvangsvoorwaarde is een programmadeel opgebouwd uit een herhalingsvoorwaarde en een sequentie. Zolang aan de herhalingsvoorwaarde voldaan is, wordt de aangegeven sequentie herhaald. |
Een while-lus wordt gebruikt om een statement te herhalen zolang aan een bepaalde voorwaarde voldaan is. De voorwaarde wordt dus gecontroleerd voordat de lus wordt uitgevoerd.
de statements worden dus uitgevoerd zolang de voorwaarde waar is.
Het Nassi Schneidermanndiagram ziet eruit als volgt:

De instructie ziet eruit als volgt:
while (voorwaarde)
{
statements;
}
6.2.2 Voorbeelden
Voorbeeld 1
Voer een aantal namen in en druk deze telkens af. zolang de invoer niet gelijk is aan "EINDE" mag je blijven invoeren.
Probleemdefinitie: We hebben een variabele naam nodig die we gaan invoeren. Zolang hier
geen einde ingetikt wordt moet de lus uitgevoerd worden. We moeten dus
afdrukken binnen de lus maar ook invoeren.
Probleemanalyse: de variabele naam mag niet gelijk zijn aan "einde", anders start de lus niet.
Het moet dus gaan om een tekstvariabele. We zetten dit op voorhand vast.
Daarna zetten we onze voorwaarde. Binnen de lus komt de invoer. Is de
naam niet gelijk aan einde dan drukken we af.

Programmatie:
<html>
<head>
</head>
<body>
<script language="javascript">
naam=" "
while (naam!="einde")
{
naam=prompt('geef een naam, EINDE om te stoppen'," ")
if (naam!="einde")
document.write(naam,"<br>");
}
</script>
</body>
</html>
voorbeeld 2
Bereken het totaal van een willekeurig aantal ingevoerde getallen. Is het ingevoerde getal=0, druk dan het totaal af.
Probleemdefinitie: we hebben een variabele getal nodig die we onbeperkt moeten kunnen
invoeren. Deze moet dus binnen de lus staan. Het programma stopt bij het
getal gelijk aan 0. Er is dus een controle nodig vooraf, anders zal de lus niet
starten als het getal reeds 0 is. We mogen het getal dus ook niet de
beginwaarde 0 geven. Pas bij getal 0 mag het totaal afgedrukt worden.
Probleemanalyse:

Programmatie: <html>
6.2.2 oefeningen
| Dit is een iteratie met een voorwaarde die achteraf gesteld wordt, dus ná de uitvoering van het ingesloten programmadeel. Zolang aan de voorwaarde niet voldaan is, wordt het aangegeven programmadeel herhaald. |
Het Nassi Schneidermanndiagram ziet eruit als volgt:

We gebruiken hiervoor een do-lus. Een do-lus is precies hetzelfde als een while-us, behalve dat de do-lus een bepaald statement uitvoert totdat de voorwaarde waar is. Hier komt de controle dus achteraf.
6.3.1 voorbeeld
We kunnen hetzelfde voorbeeld nemen als hiervoor besproken nl. we voeren getallen in totdat het getal=0. Alleen zetten we nu de voorwaarde achteraan.
</head>
<body>
<script language="javascript">
totaal=0
getal=1
do
{
getal=prompt('voer een getal in, 0 om te stoppen',0)
totaal+=parseFloat(getal);
if (getal!=0)
document.write(getal,"<br>");
}
while (getal!=0)
document.write (' het totaal is',totaal)
</script>
</body>