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:

6.1  de begrensde herhaling

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:

java6.1.jpg (198426 bytes)

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:

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:

java6.2.jpg (6639 bytes)

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:

java6.3.jpg (198426 bytes)

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:

java6.4.jpg (198426 bytes)

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

Antwoorden

6.2de herhaling met aanvangsvoorwaarde

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:

java6.5.jpg (198426 bytes)

 

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.

java 6.6.jpg

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:

java6.7.jpg

 

Programmatie:

<html>
<head>
</head>
<body>
<script language="javascript">
totaal=0
getal=1
while (getal!=0)
{
getal=prompt('voer een getal in, 0 om te stoppen',0)
totaal+=parseFloat(getal);
if (getal!=0)
document.write(getal,"<br>");
}
document.write (' het totaal is',totaal)
</script>
</body>
</html>

6.2.2 oefeningen

Antwoorden

6.3   de herhaling met afbreekvoorwaarde 

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:

java6.8.jpg (186122 bytes)

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>

terug naar inhoudstabel