En datorprogrammering slinga utför en iterativ process som kör ett visst antal gånger ( n ) . Ställ in en variabel i , känd som loop variant , och utföra ett test som kallas en uppsägning check . Om testet utvärderas till sant, då loopen kommer att upphöra .
Ett enkelt exempel slinga skriver siffror från 1 till 10. Skapa en jag slinga variant och ange värdet till 1 . På varje iteration i slingan , skriva ut det aktuella värdet av i och inkrement jag med 1 . Uppsägningen kontrollera avslutas loopen om jag är större än 10 i slutet av slingan kroppen .
i=1
slinga
skriver jag
I=I + 1
om jag <= 10 då goto loop
kommer dock ett par vanliga programmeringsfel resultera i oändliga loopar som kan hänga programmet .
inte ändra Loop Variant
uppsägning kontrollera förlitar sig på slingan variant jag komma närmare uppsägningen skick . Om slingan variant är konstant och ändras inte , då uppsägning kontrollera alltid misslyckas och loopen kommer att fortsätta på obestämd tid .
Detta problem kommer också uppstå om öglan varianten är beroende av en oredovisad-för tillstånd . Anta att ditt program skriver ut varje nummer mellan 1 och 5 , sedan 7 , sedan upphör. Din slinga kan se ut på följande sätt:
i=1
slinga
skriver jag
Om jag <5 I=I + 1 ( steg slingan variant , skriver siffrorna 1 till 5 )
om jag <= 7 goto loop ( återställer slinga för värden på I mindre än eller lika med 7 )
I detta loop , när jag når 5 kommer loopen startas utan att någonsin uppräkning och trycka 5 för evigt . Programmet skall innehålla en linje som ändras slingan variant .
i=1
slinga
skriver jag
om jag <5 I=I + 1 ( steg slingan variant , skriver siffrorna 1 till 5 )
annanstans I=I + 2 ( steg med 2 när jag når 5 )
om jag <= 7 goto loop ( återställer loop när jag når 7 )
Detta slinga kommer att avslutas efter att jag når 7 .
Återställa Loop Variant
Du kan ställa in ett kommando i mitten av slingan organ som återställer slingan variant och skapar en oändlig loop . Till exempel :
slinga
i=1 ( återställer loop variant 1)
skriver jag
i=i + 1
om jag <5 goto loop
Detta ställer jag tillbaka till 1 på varje iteration , vilket ger en oändlig loop.
Ställa in Loop Variant att gå bort från uppsägningen Skick
slinga varianten måste gå mot uppsägning skick på varje iteration .
i=1
slinga
skriver jag
Om i=2 då i=i-1
I=I + 1
om jag <3 goto loop
I detta exempel slingan att hänga sig när jag når 2 . Du kan göra denna typ av misstag när man skriver komplicerat slingor som sträng tolkning .
Inställning av en felaktig uppsägning Skick
i=1
slinga
skriver jag
i=i + 1
Om jag> 0 goto loop
I detta exempel uppsägning skick kommer att orsaka en oändlig loop som jag ökar utan gräns för varje iteration .