Korduslaused ehk tsüklid

Mis on tsüklid?

Tsükkel on konstruktsioon, mis kordab koodiplokki mitu korda. Selle asemel, et kirjutada sama asja kümme korda, kirjutatakse tsükkel. Tsüklid on programmeerimises ühed olulisemad tööriistad — neid kasutatakse andmete töötlemisel, loendamisel, kasutaja sisendi korduvaks küsimisel ja palju muuks.

C#-s on neli erinevat tsüklit: for, while, do-while ja foreach. Igaühel on oma otstarve.


for-tsükkel

for-tsüklit kasutatakse siis, kui korduste arv on ette teada. See koosneb kolmest osast:

  • algväärtus — kust loendamine algab
  • tingimus — millal tsükkel lõpeb
  • samm — kuidas loendaja muutub
for (algväärtus; tingimus; samm)
// Kuvame numbrid 1 kuni 10
for (int i = 1; i <= 10; i++)
{
    Console.WriteLine("Arv: " + i);
}
// Loendame tagurpidi 5-st 1-ni
for (int i = 5; i >= 1; i--)
{
    Console.WriteLine(i + "...");
}
Console.WriteLine("Start!");
// Arvutame 1 kuni 100 summa
int summa = 0;
for (int i = 1; i <= 100; i++)
{
    summa += i; // sama mis summa = summa + i
}
Console.WriteLine("Summa 1 kuni 100: " + summa);

while-tsükkel

while-tsüklit kasutatakse siis, kui korduste arv ei ole ette teada — tsükkel jätkub seni, kuni tingimus on tõene. Oluline on jälgida, et tingimus lõpuks muutuks vääraks, muidu jookseb tsükkel lõputult.

// Küsime salasõna seni, kuni kasutaja sisestab õige
string oige = "maasikas";
Console.Write("Sisesta salasõna: ");
string sisestatud = Console.ReadLine();

while (sisestatud != oige)
{
    Console.WriteLine("Vale salasõna! Proovi uuesti.");
    Console.Write("Sisesta salasõna: ");
    sisestatud = Console.ReadLine();
}

Console.WriteLine("Õige! Tere tulemast.");
// Kuvame paarisarvud 2 kuni 20
int arv = 2;
while (arv <= 20)
{
    Console.Write(arv + " ");
    arv += 2; // liidame 2, et saada järgmine paarisarv
}

do-while-tsükkel

do-while on sarnane while-ga, kuid erinevus on oluline: koodiplokk täidetakse alati vähemalt üks kord, isegi kui tingimus on kohe algusest väär. Tingimust kontrollitakse alles pärast esimest täitmist.

// Menüü, mis kuvatakse alati vähemalt kord
int valik;
do
{
    Console.WriteLine("\n=== MENÜÜ ===");
    Console.WriteLine("1 - Alusta mängu");
    Console.WriteLine("2 - Vaata tulemusi");
    Console.WriteLine("3 - Välju");
    Console.Write("Sinu valik: ");
    valik = int.Parse(Console.ReadLine());

    if (valik == 1) Console.WriteLine("Mäng algab!");
    else if (valik == 2) Console.WriteLine("Tulemused puuduvad.");
    else if (valik != 3) Console.WriteLine("Vale valik!");

} while (valik != 3); // kordame kuni kasutaja valib 3

Console.WriteLine("Nägemist!");

foreach-tsükkel

foreach-tsüklit kasutatakse kogumite (massiivid, listid) läbimiseks. See on kõige lihtsam viis kõigi elementide töötlemiseks — ei pea ise indeksit haldama.

// Käime läbi nimede massiivi
string[] nimed = { "Anna", "Marta", "Jaan", "Peeter", "Liis" };

foreach (string nimi in nimed)
{
    Console.WriteLine("Tere, " + nimi + "!");
}

Millal kasutada millist tsüklit?

  • for — kui tead täpselt, mitu korda korrata (nt 10 korda, 1 kuni 100)
  • while — kui ei tea korduste arvu, aga tead lõpetamise tingimust
  • do-while — kui kood peab täituma vähemalt üks kord (nt menüü kuvamine)
  • foreach — kui käid läbi massiivi või listi kõik elemendid
using System;

class Program
{
    static void Main()
    {
        // for — korrutustabel
        Console.Write("Sisesta arv, mille korrutustabel kuvada: ");
        int arv = int.Parse(Console.ReadLine());

        Console.WriteLine($"\n{arv} korrutustabel:");
        for (int i = 1; i <= 10; i++)
        {
            Console.WriteLine($"{arv} x {i} = {arv * i}");
        }

        // while — arvamine mäng
        Console.WriteLine("\n=== Arva arv ===");
        int salaarv = 42;
        int arvamine;

        do
        {
            Console.Write("Sisesta oma arvamine (1-100): ");
            arvamine = int.Parse(Console.ReadLine());

            if (arvamine < salaarv)
                Console.WriteLine("Liiga väike!");
            else if (arvamine > salaarv)
                Console.WriteLine("Liiga suur!");

        } while (arvamine != salaarv);

        Console.WriteLine("Õige! Arvasid arvu " + salaarv + " ära!");
    }
}

Tultmus: