Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

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 ja k, 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
Esimerkki 2

Esimerkki 2

Ohjelma, jossa tulostetaan kymmenen kertotaulu käyttäen sisäkkäisiä for-rakenteita:

{
Note
}

Ohjelmassa

käytetään

samaa

laskuria

{{

i

}}

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}