...
for-toistorakenne
...
For
...
-rakennetta
...
kannattaa
...
käyttää,
...
jos
...
toistojen
...
määrä
...
tiedetään
...
ohjelmassa,
...
ennen
...
kuin
...
toistot
...
aloitetaan.
...
- For-lauseessa
...
- toistojen
...
- lukumäärää
...
- hallitaan
...
- yleensä
...
- ohjelmassa
...
- olevan
...
- toistolaskurin
...
- avulla.
...
->
...
- Se
...
- määritellään
...
- yleensä
...
- kokonaislukumuuttujana,
...
- jolle
...
- annetaan
...
- nimi
...
i
...
- .
...
- Toistot
...
- päätetään,
...
- kun
...
- laskuri
...
- on
...
- saavuttanut
...
- sovitun
...
- loppuarvon
...
- (loppuarvo
...
- voi
...
- olla
...
- vakio
...
- tai
...
- muuttuja).
...
Syntaksi
For-rakenteen
...
kieliopillisesta
...
muodosta
...
on
...
oleellista
...
huomata,
...
että
...
kaikki
...
kolme
...
toistoa
...
ohjaavaa
...
operaatiota
...
kirjoitetaan
...
for
...
-riville
...
sulkujen
...
sisään:
Code Block |
---|
} for (alkutoimet; toistoehto; lopputoimet) { lauseita; } {code} h2. Toistolaskurin käsittely Laskuriin kohdistuu kolme oleellista operaatiota. Nämä ovat: || || Toimet || Merkitys || | 1. | alkutoimet | Laskurin alkuarvon asettaminen | | 2. | toistoehto | Laskurin arvon vertaaminen loppuarvoon | | 3. | lopputoimet | Laskurin arvon kasvattaminen | Nämä kaikki asiat tehdään for-lauseen alussa sulkujen sisällä: {code} |
Toistolaskurin käsittely
Laskuriin kohdistuu kolme oleellista operaatiota. Nämä ovat:
| Toimet | Merkitys |
---|---|---|
1. | alkutoimet | Laskurin alkuarvon asettaminen |
2. | toistoehto | Laskurin arvon vertaaminen loppuarvoon |
3. | lopputoimet | Laskurin arvon kasvattaminen |
Nämä kaikki asiat tehdään for-lauseen alussa sulkujen sisällä:
Code Block |
---|
int i;
for (i=1; i<=N; i++)
{code}
* alkuarvon |
- alkuarvon asettaminen tehdään kerran (ennen 1. toistoa)
- toistoehto tutkitaan ennen kunkin toistokerran alkua
- laskurin arvoa kasvatetaan kunkin toistokerran päätteeksi
– - Jos for-silmukoita on sisäkkäin, tarvitaan useita laskureita. Kts #Esimerkki 2.
- Sisempien silmukoiden laskureille voidaan käyttää nimiä
j
jak
, jne.
Esimerkki 1
Ohjelman pätkä, joka tulostaa arvot 0...9 allekain ruudulle käyttäen for-toistorakennetta:
Code Block |
---|
asettaminen tehdään *kerran* (ennen 1. toistoa) * toistoehto tutkitaan *ennen* kunkin toistokerran alkua * laskurin arvoa kasvatetaan kunkin toistokerran *päätteeksi* -- * Jos for-silmukoita on sisäkkäin, tarvitaan useita laskureita. Kts [#Esimerkki 2]. * Sisempien silmukoiden laskureille voidaan käyttää nimiä {{j}} ja {{k}}, jne. h2. Esimerkki 1 Ohjelman pätkä, joka tulostaa arvot 0...9 allekain ruudulle käyttäen _for_\-toistorakennetta: {code} int i; for (i=0; i<10; i++) { printf("\n i = %d", i); } {code} {anchor:Esimerkki 2} h2. Esimerkki 2 Ohjelma, jossa tulostetaan kymmenen kertotaulu käyttäen sisäkkäisiä |
Anchor | ||||
---|---|---|---|---|
|
Esimerkki 2
Ohjelma, jossa tulostetaan kymmenen kertotaulu käyttäen sisäkkäisiä for-rakenteita:
Note |
---|
} Ohjelmassa käytetään samaa laskuria {{
kahteen kertaan. Tämä on ok, kunhan silmukat eivät ole sisäkkäisiä. |
Code Block |
---|
{note} {code} int i, j; // for-rakenteiden laskurit printf(" |"); // alkumuotoilut for (i=1; i<=10; i++) printf("%3d ", i); // tulostetaan ylärivin luvu 1...10 printf("\n--------------------------------------------"); // tulostetaan rivinvaihto ja 40 '-' -merkkiä for (i=1; i<=10; i++) // ulompi silmukka, käydään arvot 1...10 läpi { printf("\n%3d|", i); // tulostetaan vasempaan laitaan luku, millä kerrotaan ylärivin luvut for (j=1; j<=10; j++) // sisempi silmukka, jossa kerrotaan luvuilla 1...10 ulomman silmukan laskuri { printf("%3d ", i*j); // tulostetaan laskenta i*j ruudulle } } printf("\n"); // loppuun rivinvaihto {code} |
Ohjelma
...
tulostaa
...
seuraavan
...
taulukon:
No Format |
---|
} | 1 2 3 4 5 6 7 8 9 10 -------------------------------------------- 1| 1 2 3 4 5 6 7 8 9 10 2| 2 4 6 8 10 12 14 16 18 20 3| 3 6 9 12 15 18 21 24 27 30 4| 4 8 12 16 20 24 28 32 36 40 5| 5 10 15 20 25 30 35 40 45 50 6| 6 12 18 24 30 36 42 48 54 60 7| 7 14 21 28 35 42 49 56 63 70 8| 8 16 24 32 40 48 56 64 72 80 9| 9 18 27 36 45 54 63 72 81 90 10| 10 20 30 40 50 60 70 80 90 100 {noformat} |