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

Toistorakenteet

Kun jotain koodin osaa halutaan toistaa ennalta tiedetty määrä kertoja tai ennalta tuntematon määrä, niin voimme käyttää toistorakennetta.

...

C-kielessä

...

on kolme toistorakennetta:

  1. while
  2. for
  3. do...while

Näistä kaksi ensimmäistä ovat ns. alkuehtoisia ja viimeinen, do...while on loppuehtoinen toistorakenne.

...

"Ikuinen" silmukka

  • Joskus on tarpeen rakenne, joka toistaa haluttua koodia "ikuisesti".
  • Lainausmerkit siksi, että ei tietenkään mikään ohjelma pyöri ikuisesti, mutta merkintää käytetään ilmaisemaan että toistorakenne toistuu ennalta tuntemattoman määrän kertoja.

Esimerkki

Seuraavassa on esimerkki ikuisen silmukan sekä if ja else-lauseiden käytöstä.
Ikuista silmukkaa tarvitaan ohjelmissa, missä ei ennalta tiedetä milloin ohjelmasta tulisi poistua.
Ikuisesta silmukasta poistutaan break tai return käskyillä.

Code Block

/*  kolme toistorakenetta for, do while ja while for-toistorakenne on ehkä selväpiirteisin, for-sanan jälkeen tulee kaikki silmukan toimintaan
liittyvät määrittelyt.


----

h2. for

         for(alkuarvo; silmukassa olo ehto ; lisäys toistokertojen välillä)
         {
                 toiminnot silmukan sisällä;
         }

Esimerkiksi seuraavassa for-silmukassa tulostetaan i:n arvo 0...9

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

&nbsp;


----
h2. do-while

do-while\- tostorakennetta käytetään silloin, kun silmukkaan täytyy mennä kerran, vaikka silmukassa oloehto ei olisikaan tosi. do-while-rakennetta sanotaan loppuehtoiseksi while-silmukaksi

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toiminnot silmukan sisällä;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}while(silmukassa olo ehto);

Esimerkki
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; int i=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;printf("\ni = %d",i);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}while(i<10);



----
h2.



h2. while

while\- tostorakennetta käytetään silloin, kun silmukkaan ei mennä alkuehto ei ole tosi. while-rakennetta sanotaan alkuehtoiseksi while-silmukaksi

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(silmukassa olo ehto)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  toiminnot silmukan sisällä;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

Esimerkki
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(i<10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\ni = %d",i);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }


h2. "Ikuinen" silmukka

Seuraavassa on esimerkki ikuisen silmukan ja if sekä else\- lauseiden käytöstä. Ikuista silmukkaa tarvitaan hyvin usein ohjelmassa, kun ennalta ei tiedetä koska ohjelmasta tulisi poistua. Tyypillisesti ikuisesta silmukasta poistutaan break tai return käskyillä.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Ohjelma, joka tulostaa millä välillä annettu luku on.&nbsp;
 * Lukuvälit ovat <10, 10-100 ja >100.
 * Käytetään ohjelmassa if, else if ja else -lauseita&nbsp;.
 \*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include<stdio.h>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include<conio.h>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void main()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int Luku;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(1)//"ikuinen silmukka"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
#include <stdio.h>
#include <conio.h>

int main()
{
   int Luku;
   while (1) // "ikuinen" silmukka
   {
      printf("\nAnna jokin luku: ");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      scanf("%d",&Luku);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if

      if (Luku < 10)                      printf("Luku on < 10");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      else if (Luku >= 10 && Luku <= 100)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Luku on 10...100");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else       else                                printf("Luku on > 100");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Luku==

      if (Luku == 500) break; //* poistutaan silmukasta, kun käyttäjä antaa luvun 500*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
   }
   return 1;
}