You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

for-toistorakenne

For-rakennetta kannattaa käyttää, jos toistojen määrä tiedetään ohjelmassa, ennen kuin toistot aloitetaan.

Syntaksi

For-rakenteen kieliopillisesta muodosta on oleellista huomata, että kaikki kolme toistoa ohjaavaa operaatiota kirjoitetaan for-riville sulkujen sisään:

for (alkutoimet; toistoehto; lopputoimet)
{
    lauseita;
}
  • 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 ylittänyt sovitun loppuarvon (loppuarvo voi olla vakio tai muuttuja).
  • Jos for-silmukoita on sisäkkäin, tarvitaan useita laskureita. Kts #Esimerkki 2.
  • Sisempien silmukoiden laskureille voidaan käyttää nimiä j ja k.

Toistolaskurin käsittely

Laskuriin kohdistuu kolme oleellista operaatiota. Nämä ovat:

  1. laskurin alkuarvon asettaminen (alkutoimet)
  2. laskurin arvon vertaaminen loppuarvoon (toistoehto)
  3. laskurin arvon kasvattaminen (lopputoimet)

Nämä kaikki asiat tehdään for-lauseen alussa sulkujen sisällä:

int i;
for (i=1; i<=N; i++)
  • alkuarvon asettaminen tehdään kerran (ennen 1. toistoa)
  • toistoehto tutkitaan ennen kunkin toistokerran alkua
  • laskurin arvoa kasvatetaan kunkin toistokerran päätteeksi

Esimerkki 1

Ohjelman pätkä, joka tulostaa arvot 0...9 allekain ruudulle käyttäen for-toistorakennetta:

int i;
for (i=0; i<10; i++)
{
    printf("\n i = %d", i);
}

Esimerkki 2

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

Ohjelmassa käytetään samaa laskuria i kahteen kertaan. Tämä on ok, kunhan silmukat eivät ole sisäkkäisiä.

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

Ohjelma tulostaa seuraavan taulukon:

   |  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
  • No labels
You must log in to comment.