IT
For og while-løkker
Jeg har følgende while-løkke (skrevet i pseudokode)
procedure linear search(x: integer, a_1, a_2, ... a_n: distinct integers)
i:=1
while (i =
i:=i+1
if i =
else location:=0
Tegnet =
Denne løkke bruges til at finde ud af, om x er indeholdt i talfølgen bestående af alle a'erne. Hvis x er det, vil vi gerne have udskrevet dets placering.
a) Mit spørgsmål går på, om denne while-løkke kan omskrives til følgende forløkke:
procedure linear search(x: integer, a_1, a_2, ... a_n: distinct integers)
For i=1 to n
if x=a_i then location:=i
b) Generelt kunne jeg godt tænke mig at vide, hvornår det er smart at bruge forløkker, og hvornår while-løkker med fordel kan anvendes?
c) Man man altid lave en forløkke om til en while-løkke og omvendt?
Svar #1
05. februar 2006 af IzNo (Slettet)
>
>procedure linear search(x: integer, a_1, a_2, ... a_n: distinct integers)
>For i=1 to n
>if x=a_i then location:=i
Næsten... Du mangler lige et location := 0 i starten. Men ellers gør den det samme (sålænge du har forskellige ints i dit input. Er der to ens vil while løkken returnere den første, mens for løkken vil returnere den sidste, da du ikke breaker ud af løkken når du finder noget).
> b) Generelt kunne jeg godt tænke mig at vide, hvornår det er smart at bruge forløkker, og hvornår while-løkker med fordel kan anvendes?
Det er svært at sige præcis hvornår det ene er bedre end det andet, men der er en grundregel i at hvis du ved at du skal iterere over et interval vil man normalt bruge en for løkke. Som i dit eksempel ovenfor.
> c) Man man altid lave en forløkke om til en while-løkke og omvendt?
Ja. De kan omskrives begge veje:
for( startSætning; terminationCondition; iterationsSætning) {
BLOCK of code
}
kan omskrives til:
startSætning;
while(!terminationCondition) {
Block of code
iterationsSætning
}
Tilsvarende kan det gøres den anden vej. En for-løkke kan jo fint ignorere at den har start og iterationssætninger
while(Condition) {
Block of code
}
kan blive
for( ; not Condition ; ;) {
Block of code
}
/IzNo
Svar #2
07. februar 2006 af Sabrina (Slettet)
Mange tak for din hjælp. Det blev faktisk udpenslet så meget, at jeg ikke har yderligere spørgsmål :)
Dog hvis du gad uddybe, hvad du mener med begreberne startSætning, terminationsCondition og iterationsSætning vil det være rigtig skønt.
Tak for din hjælp!
Svar #3
08. februar 2006 af IzNo (Slettet)
Normalt vil en for-løkke ligne følgende:
for(int i = 0; i
Men det er ikke et krav. Det det betyder er:
før vi starter udføres første del 'int i = 0'
Ved hver iteration laves et check, hvis den midterste del returnere boolean true fortsætter vi, ellers stopper den
I slutningen af hver iteration udføres den sidste sætning. F.eks for at tælle en tæller en op.
Men man kunne også skrive:
for(String s = ""; not s == "aaaaaa"; s + "a")
(hvor + er concatenering af strenge)
Du kan altså skrive en vilkårlig sætning først og sidst, og i midten skal der bare stå et boolsk udtryk.
/IzNo
Svar #5
19. februar 2006 af Penthesilea (Slettet)
Med en while løkke kan man fex vente på at en variabel bliver sat (af en anden proces fx), mens det ikke kan lade sig at gøre med en forløkke.
Med en while løkke kan man også blive ved med at spørge en bruger om noget, ind til man har fået det rigtige svar, hvilket heller ikke kan lade sig at gøre i en forløkke.
Så med hensyn til hvornår man skal vælge hvad, ja så kommer det jo helt an på hvad man skal bruge sin løkke til. Skal man bare tælle noget op, så er det en smagssag. Jeg foretrækker for-løkker i dette tilfælde.
Skriv et svar til: For og while-løkker
Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk?
Klik her for at oprette en bruger.
