
Så länge-loop (programmering)

Uppgradera för mer innehåll
Sant eller falskt? Om du vill att kod ska repeteras kan du använda en loop.
Lina har skrivit ett program till sin robot så att den kan ge Leon och Maria deras favoritchoklad. Och det klarar den bra. Leon startar roboten. Den plockar upp en chokladbit, tittar på den, ser att det är ljus choklad ... och kollar om det finns nötter i.
Nej, inga nötter. Därför får Maria chokladbiten. Leon fick ingen choklad. Så han startar programmet igen. Roboten plockar upp en ny chokladbit.
Den här gången är det mörk choklad. Roboten ger chokladbiten till Leon. Jag orkar inte starta programmet igen. Nej, om vi måste starta om roboten, kan vi lika gärna ta chokladen själva. Maria och Leon vill inte starta om programmet gång på gång.
Hur ska de slippa det? Maria vill förbättra Linas program. Då behöver hon först titta på hur pseudokoden ser ut. Instruktionerna är “plocka upp en chokladbit” Och “ge den till Maria eller Leon, eller släng chokladen.” De instruktionerna utförs bara en gång. Men Maria vill att programmet ska börja om igen, och gå i en loop.
Hennes krav är att så länge det finns chokladbitar i asken ska programmet upprepas, itereras. Marias krav är villkoret i loopen. Så länge villkoret är sant, itereras instruktionerna. Om villkoret är falskt går programmet vidare i koden. Det är en “så länge”-loop.
Maria skriver in att programmet ska ställa en fråga till användaren: Hur många chokladbitar finns det i asken? Svaret antecknas i variabeln “chokladbitar”. Kravet “så länge det finns choklad i asken” är samma sak som att “variabeln chokladbitar är större än noll”. Om instruktionerna i loopen blir utförda kommer en chokladbit att plockas bort. Då behövs ett nytt värde på variabeln “chokladbitar”!
Så Maria lägger in en rad längst ned i loopen: Chokladbitar är lika med chokladbitar minus ett Nu är det lite svårt att se vilka rader som tillhör loopen och som ska upprepas. Hur kan det bli tydligare i koden? Jo, Maria drar in de raderna så här: Nu ska Maria testa programmet. Hon startar.. ..och matar in att det finns tio chokladbitar. Sedan testar programmet villkoret i “så länge”-loopen.
Variabeln chokladbitar är lika med tio. Det är större än noll. Villkoret är sant. Om villkoret är sant utförs instruktionerna i loopen. Roboten plockar upp en chokladbit.
Det är ljus choklad, så det första villkoret i loopen....är sant. Nästa villkor: Finns det nötter? Inga nötter. Då utförs inte instruktionen att slänga chokladbiten. Istället går programmet till: “Annars: Ge Maria choklad”.
Nu är antalet chokladbitar en mindre än förut.. Och variabeln “chokladbitar” får värdet tio minus ett, alltså nio. Programmet har utfört alla instruktionerna i loopen, och går tillbaka till loopens topp. Är villkoret fortfarande sant? Ja, “chokladbitar” är nio. Det är större än noll, instruktionerna i loopen utförs igen.
Roboten plockar upp en ny chokladbit. ..och “chokladbitar” minskar med ett...till åtta. Programmet testar villkoret igen. Åtta är större än noll, och villkoret är sant. Och så fortsätter roboten. Den itererar loopen så länge villkoret är sant. Men när asken är tom, när antalet chokladbitar är noll?
Vad händer då? Noll är inte större än noll, så villkoret är falskt... ...och roboten utför inte instruktionerna i loopen. Programmet går vidare, men det finns inga rader efter loopen. Programmet avslutas. Med hjälp av den nya loopen kan Leon och Maria få massor av choklad av roboten, utan att de behöver starta om programmet.
Vad bra! Eller hur, Leon och Maria?