For loop?
For loop?
Tänker jag helt fel.
for(int i=0; i<=3; i=i+1)
deklarera i, om i är mindre eller lika med tre kör på, i är lika med i plus ett
Fine, men eftersom i är 0 och det är mindre än 3 så borde i bli 1 direkt, och alltså skulle koden skriva ut 1, 2, 3. Men så är det inte, den skriver ut 0, 1, 2, 3.
Eller är det så här det faktiskt funkar:
1. i = 0
2. om i är mindre eller lika med 3, kör koden nedan.
Nästa runda på loopen.
3. om i är mindre eller lika med 3 gör nästa steg i koden i=i+1
4. kör koden nedan.
5. tillbaks till 3.
Jag har alltid tyckt att det är ologiskt att man deklarerar "i" det första man gör i en loop för i mitt huvud så sätter den ju då "i" till 0 varje gång loopen börjar. Men jag ser nog fel på det hela. ?
Men jag har aldrig sett eller fått höra att för for loopar så kör den första "statment" en gång,
andra "statment" första rundan och alla andra,
tredje "statment" körs först andra rundan på loopen så länge andra "statment" uppfylls.
for(int i=0; i<=3; i=i+1)
deklarera i, om i är mindre eller lika med tre kör på, i är lika med i plus ett
Fine, men eftersom i är 0 och det är mindre än 3 så borde i bli 1 direkt, och alltså skulle koden skriva ut 1, 2, 3. Men så är det inte, den skriver ut 0, 1, 2, 3.
Eller är det så här det faktiskt funkar:
1. i = 0
2. om i är mindre eller lika med 3, kör koden nedan.
Nästa runda på loopen.
3. om i är mindre eller lika med 3 gör nästa steg i koden i=i+1
4. kör koden nedan.
5. tillbaks till 3.
Jag har alltid tyckt att det är ologiskt att man deklarerar "i" det första man gör i en loop för i mitt huvud så sätter den ju då "i" till 0 varje gång loopen börjar. Men jag ser nog fel på det hela. ?
Men jag har aldrig sett eller fått höra att för for loopar så kör den första "statment" en gång,
andra "statment" första rundan och alla andra,
tredje "statment" körs först andra rundan på loopen så länge andra "statment" uppfylls.
Re: For loop?
Det är så det funkarEller är det så här det faktiskt funkar:
1. i = 0
2. om i är mindre eller lika med 3, kör koden nedan.
Nästa runda på loopen.
3. om i är mindre eller lika med 3 gör nästa steg i koden i=i+1
4. kör koden nedan.
5. tillbaks till 3.
Först körs första argumentet, därefter andra och sedan tredje.
En längre version är
Kod: Markera allt
i=0;
while (i<=3)
{
........;
i++;
}
men man kan likaväl skriva
Kod: Markera allt
while (i<4)
och det är identiskt med både
Kod: Markera allt
<for (i=0; i<=3; i++)
Kod: Markera allt
<for (i=0; i<4; i++)
Senast redigerad av TomasL 24 februari 2021, 21:34:12, redigerad totalt 1 gång.
- Klas-Kenny
- Inlägg: 11344
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: For loop?
1. i sätts till 0.
2. Jämförelse, är i mindre än eller lika med tre?
3. Om så, kör koden.
4. Öka i med 1
5. Åter till steg 2.
2. Jämförelse, är i mindre än eller lika med tre?
3. Om så, kör koden.
4. Öka i med 1
5. Åter till steg 2.
Re: For loop?
Jag använder aldrig for-loopar.
While-loopar är naturligare att förstå och mera läsbara. Ingen skillnad i prestanda och kodstorlek.
While-loopar är naturligare att förstå och mera läsbara. Ingen skillnad i prestanda och kodstorlek.
Re: For loop?
Det där är fan mer logiskt . Speciellt eftersom i++ kommer sist och deklarationen av i görs utanför själva "loopen".
- Klas-Kenny
- Inlägg: 11344
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: For loop?
För mig är for-loopar det mest naturliga och lättförståeliga så länge man använder dem till att räkna ett specifikt antal gånger, såsom i exemplet här.
Men det är klart att man tex. Inte skriver
Kod: Markera allt
for(;true;) {
if(något villkor)
break;
}
Re: For loop?
Tja, det är en smaksak, jag använder alltid "for"-loopar.
Sedan i while-loopen spelar det ingen roll var "i++" hamnar, den kan vara första raden eller sista eller mitt i, hela loopen körs oavsett.
Man kan ju naturligt vis skriva en "do while" också, och då blir det
istället, eftersom kontrollen görs efter loopen körts, i en while görs kontrollen innan loopen körts, vilket är samma för en for-loop
Sedan i while-loopen spelar det ingen roll var "i++" hamnar, den kan vara första raden eller sista eller mitt i, hela loopen körs oavsett.
Man kan ju naturligt vis skriva en "do while" också, och då blir det
Kod: Markera allt
do while (i<3)
- Mickecarlsson
- EF Sponsor
- Inlägg: 3841
- Blev medlem: 15 april 2017, 18:06:15
- Ort: Malmö
- Kontakt:
-
- Inlägg: 120
- Blev medlem: 24 december 2015, 11:35:17
Re: For loop?
Har aldrig tänkt på det, men nu när ni säger det är ju while-loopar mer logiska. Fördelen med for-loopar i standard-format (t ex for(int i = 0; i<3; i++)) är att man när man har sett dem tusen gånger vet man direkt vad loopen gör när man ser en ny (såvida ingen pillar på loop-variabeln inuti loopen, eller kör en break, men det senare ser man ofta snabbt). Och är det lite ostandard, typ en loop som räknar neråt eller eller använder <= som jämförelse eller ökar med två i varje iteration, ser man också det rätt fort. while-loopar åas kan lite vad som helst hända i och man får titta en stund längre. Vana programmerare använder också while-loopen för att på sätt och vis tala om för läsaren att här är det inte nödvändigtvis en enkel iteration över någonting som görs, utan något mer komplicerat.
Det är iaf mina åsikter/erfarenheter.
Det är iaf mina åsikter/erfarenheter.
Re: For loop?
Och det menar du gäller för alla kompilatorer/processorarkitektorer?
Man kan ju vinna tid bara genom att vända riktningen på vissa platformar...
Re: For loop?
Jag tycker att denna loop är lätt att läsa och att förstå (loop-counter är en "int"):
Om man inte behöver något index utan bara vill göra något ett visst antal gånger:
Som att läsa en bok...
Kod: Markera allt
Perform varying loop-counter from zero by 1 until loop-counter is greater than 3
display "Loop counter = ", loop-counter
End-Perform
$ run loop
Loop counter = 000
Loop counter = 001
Loop counter = 002
Loop counter = 003
$
Kod: Markera allt
Perform 3 times
display "In the loop"
End-Perform
$ run loop2
In the loop
In the loop
In the loop
$
Re: For loop?
Hur är det, kan mitten parametern i en C-for loop ha flera villkor?
Alltså något i stil med:
Loopa så länge som i är mindre än 3 och x inte är 5.
Alltså något i stil med:
Kod: Markera allt
for(int i=0; (i<=3 or x<>5); i=i+1)
Re: For loop?
Ja, absolut. Hela uttrycket i mitten evalueras och så länge det är sant så körs loopen ett varv till.
Re: For loop?
>Och det menar du gäller för alla kompilatorer/processorarkitektorer?
Så klart... jag som hobbyprogrammerare kan svara för all världens kompilatorer...
Ett programspråk är ju även till för att göra det enkelt för människan, därför tycker jag man ska sträva i den riktningen och göra program läsbara. Göra programkoden så enkel och förståelig som möjlig. Man kan kommentera programmet, och det behövs, men om programkoden är tydlig så hjälper det också förståelsen. Om programmet ändras är det lätt hänt att man glömmer ändra kommentarerna.
Redan i denna tråd har det uppstått flera frågor om hur for-loopen funkar, som i första inlägget, men även:
>Hur är det, kan mitten parametern i en C-for loop ha flera villkor?
Så blir det inte med while-loopen.
Befria hjärnan från sånt och använd den till själva programmet.
Vad jag förstått så är den allmänna meningen att for-loopar används vid bestämt antal iterationer och while-loopar vid variabelt, men rent tekniskt har det ingen betydelse för varken for eller while.
Dock, en fördel med for-loop är att man får en påminnelse om att öka räknevariabeln.
Glömmer man ändra räknevariabeln, får man en oändlig loop och programmet låser sig.
Därför har jag som vana att skriva den direkt när jag skriver "stommen" till while-loopen, och sen fyller med innehåll om vad som ska hända.
Så klart... jag som hobbyprogrammerare kan svara för all världens kompilatorer...
Ett programspråk är ju även till för att göra det enkelt för människan, därför tycker jag man ska sträva i den riktningen och göra program läsbara. Göra programkoden så enkel och förståelig som möjlig. Man kan kommentera programmet, och det behövs, men om programkoden är tydlig så hjälper det också förståelsen. Om programmet ändras är det lätt hänt att man glömmer ändra kommentarerna.
Redan i denna tråd har det uppstått flera frågor om hur for-loopen funkar, som i första inlägget, men även:
>Hur är det, kan mitten parametern i en C-for loop ha flera villkor?
Så blir det inte med while-loopen.
Befria hjärnan från sånt och använd den till själva programmet.
Vad jag förstått så är den allmänna meningen att for-loopar används vid bestämt antal iterationer och while-loopar vid variabelt, men rent tekniskt har det ingen betydelse för varken for eller while.
Dock, en fördel med for-loop är att man får en påminnelse om att öka räknevariabeln.
Glömmer man ändra räknevariabeln, får man en oändlig loop och programmet låser sig.
Därför har jag som vana att skriva den direkt när jag skriver "stommen" till while-loopen, och sen fyller med innehåll om vad som ska hända.