TOISTOLAUSEET (silmukat eli loopit)

PHP-kielessä ohjelmalauseet suoritetaan normaalisti vain kerran. Tämä ei aina ole kovin joustava eikä käytännöllinen ratkaisu, jos ohjelmalausetta joudutaan suorittamaan useamman kerran. Tällaisia tapauksia varten kieleen on rakennettu toistolauseet, eli silmukkarakenteet, eli loopit, joiden avulla ohjelmalausetta toistetaan niin kauan kunnes tietty ehto on täytetty.

PHP:ssä on käytössä seuraavat toistolauseet: for, foreach, while ja do...while.


for - KOMENTO

for-komentoa käytetään tilanteissa, joissa halutaan suorittaa jotakin tehtävää tietty kertamäärä.

for-komennon yleinen muoto:

for (alustus; ehto; päivitys) { lause; }

Avainsanan for jälkeen tulevissa suluissa on kolme osaa:
Alustus on toiminto jolla silmukkaa ohjaava muuttuja alustetaan, eli alustetaan laskuri jonka avulla toistojen määrää kontrolloidaan.
Ehto-osa on aina TOSI tai EPÄTOSI. Ehto-osan ollessa tosi voidaan silmukan suoritusta jatkaa, ehto-osaa voidaan pitää myös lopetusehtona.
Päivitys-osassa suoritetaan uudet arvottamiset esim. lisätään silmukan laskuria.

Osista jokin tai kaikki voivat puuttua mutta puolipisteet on laitettava sulkujen sisälle.

for on aloitusehtoinen komento, joka tarkoittaa, että ehto testataan ennen silmukkaan menoa.

Alla oleva esimerkki näyttää numerot yhdestä kymmeneen.

/* for-esimerkki */ <!DOCTYPE HTML> <html lang="en"> <html> <head> <meta charset="UTF-8"> <title>TESTISIVU</title> </head> <body> <?php for ($kertaa = 0; $kertaa <= 10; $kertaa++) { echo "Numero on: $kertaa <br> "; } ?> </body> </html>

Numero on: 0
Numero on: 1
Numero on: 2
Numero on: 3
Numero on: 4
Numero on: 5
Numero on: 6
Numero on: 7
Numero on: 8
Numero on: 9
Numero on: 10

Tehtävä 1 Kirjoita toistolause, joka näyttää numerot kymmenestä yhteen.




/* lasketaan sataan kymmenen välein */ <?php for ($luku = 0; $luku <= 100; $luku = $luku + 10) { echo "Luku on: $luku <br>"; } ?>

/* lasketaan sataan kymmenen välein */ Luku on: 0
Luku on: 10
Luku on: 20
Luku on: 30
Luku on: 40
Luku on: 50
Luku on: 60
Luku on: 70
Luku on: 80
Luku on: 90
Luku on: 100

Tehtävä 2 Kirjoita toistolause, missä lasketaan tuhanteen sadan välein.




Alla, ohjelma joka kysyy yksiuloitteiseen taulukkoon 10 desimaalilukua ja tulostaa annetut luvut taulukosta näytölle.

/* for-esimerkki, kymmenen lukua taulukkoon ja niiden tulostus */ #include <stdio.h> int main() { int x=1, rivi; float lukuja[10]; for (rivi = 0; rivi <= 9; rivi++) { printf("%f \n", lukuja[rivi]); } getch(); return 0; }

/* for-esimerkki, kymmenen lukua taulukkoon ja niiden tulostus */ 1
2
3
4
5
6
7
8
9
10

Tehtävä 3 Tähän tulee myöhemmin tehtävä 3.




Alla, sisäkkäisistä for-lauseista esimerkki. Sisäkkäisellä for-lauseella voi käsitellä esim. kaksi-uloitteista taulukkoa.

/* sisäkkäiset for-lauseet */ <?php for ($X = 1; $X <= 10; $X++) { for ($Y = 1; $Y <= 10; $Y++){ echo " _ "; } echo "<br>"; } ?>

/* sisäkkäiset for-lauseet */ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _




Alla pseudo-kielinen versio kaksiuloitteisen taulukon käsittelystä. Pseudo-kielellä ratkaistaan ohjelman rakenteita kirjoittamatta ohjelmointikieltä.

/* Pseudo-kielinen malli kaksiuloitteisen taulukon käsittelystä */ rivi, sarake, taulukko 5*4 toista ( viidelle riville ) toista ( neljään sarakkeeseen ) pyydä luku lue luku sarakkeeseen sarake

Tehtävä 4 Tähän tulee myöhemmin tehtävä 4.




while - KOMENTO

PHP-kielen kolmas silmukkarakenne, eli looppi, on while-rakenne. while -silmukassa silmukan runko suoritetaan niin kauan kuin ehto on tosi. Kun ehto tulee epätodeksi, ohjelman suoritus siirtyy silmukkaa seuraavaan lauseeseen. while on alku-ehtoinen toistolause, eli ensin tutkitaan toteutuuko ehto ennenkuin rakenteen sisään mennään.

while -komennon yleinen muoto:

while (ehto on totta) { ohjelmalause; }

Alla, while-komentoa käytetään toistolauseena.

Esimerkki <?php $x = 1; while($x <= 5) { echo "Numero on: $x
"; $x++; } ?>


while-silmukka käytössä Numero on: 1
Numero on: 2
Numero on: 3
Numero on: 4
Numero on: 5

Tehtävä 5 Tähän tulee myöhemmin tehtävä 5.




do ... while - KOMENTO

do..while-silmukan rakenne on samantyyppinen kuin while-silmukan. do..while-rakenteen ero while ja for rakenteeseen on, että se on lopetusehtoinen. do..while-silmukka suoritetaan aina vähintään yhden kerran, koska ehto testataan silmukan lopussa eikä sen alussa.

do..while-silmukan yleinen muoto:

do { lause_1; lause_2; ....... } while(ehto);

HUOM! Avainsanan while jälkeen tulee ehto sulkuihin ja sulkujen jälkeen puolipiste ; .

/* do_while käyttö */ #include <stdio.h> int main() { int x = 1; do { printf(”%d\n”, x++); } while(x <= 10); getch(); return 0; }

Tehtävä 6 Tähän tulee myöhemmin tehtävä 6.




do..while-silmukka on yleisin rakenne toteutettaessa ohjelmien tai ohjelmistojen lopetus-ehto.

#include <stdio.h> int main(void) { int luku1, luku2; char vastaus; do { printf ("\nYhteenlaskukone"); printf ("\nAnna kaksi kokonaislukua: "); scanf ("%d %d", &luku1, &luku2); printf ("Summa on: %d",luku1+luku2); printf ("\nJatketaanko (k/e): "); vastaus = getche(); }while (vastaus == 'k'); }

Tehtävä 7 Tähän tulee myöhemmin tehtävä 7.




Edellinen esimerkki hiukan erilailla, tässä ohjelman lopetus tapahtuu ESC-painikkeella. Lopetus-ehto voi lukea seuraavasti:
toistetaan mikäli vastaus on eri suurikuin 27 eli Esc-painike.

#include <stdio.h> int main(void) { int luku1, luku2; char vastaus; do { printf ("\nYhteenlaskukone (Lopetus, ESC-painikkeella)"); printf ("\nAnna kokonaisluku: "); scanf ("%d", &luku1); printf ("Anna kokonaisluku: "); scanf ("%d", &luku2); printf ("Summa on: %d \n",luku1+luku2); vastaus = getche(); }while (vastaus != 27); }




goto - KOMENTO

C-kieli sisältää myös goto -komennon, tosin sen käyttöä ei suositella koska se johtaa usein sekaviin ohjelmatoteutuksiin. Esim.

int main() { otsikko: /* otsikko, johon goto viittaa */ printf(”*”); goto otsikko; return 0; }



break - KOMENTO

break-komennon ensisijainen käyttö on keskeyttää case-komento. Sillä voidaan myös pakottaa lopettamaan silmukan suoritus. Kun kääntäjä havaitsee break-komennon silmukan sisäpuolella, silmukan ajo keskeytetään ja kontrolli siirretään silmukkaa seuraavalle ohjelmariville.

/* break esimerkki */ #include <stdio.h> int main() { int x; for (x = 0; x < 100; x++) { printf(”Muuttujan arvo on %d\n”, x); if (x == 10) break; } getch(); return 0; }




continue - KOMENTO

continue -komentoa käytetää ohittamaan silmukan loppuosa. Komentoa käytetään kuten break komentoa mutta komennon käyttö ei johda silmukan keskeyttämiseen vaan silmukan suoritusta jatketaan silmukan alusta.

/* continuen käyttö */ #include <stdio.h> int main() { int x; for (x = 0; x < 50; x++) if ( x % 2) { continue; printf(”Muuttuja x on suuruudeltaan %d\n, x); } return 0; }




while ja while...do -silmukassa continue -komento siirtää ohjelman kontrollin suoraa ehto-osaan. Silmukkaprosessia jatketaan ehto-osan jälkeen. for -silmukan yhteydessä suoritetaan ensin alustusosa jonka jälkeen suoritetaan testi.