# Kuidas toimivad while-tsüklid R-is?

Silmused on **programmeerimise** üks **põhimõisteid**. Need tagavad, et teatud koodilõigud täidetakse korduvalt teatud tingimuse alusel. R-keeles kasutatavate while-silmustega korratakse lõiku seni, kuni eelnevalt määratud tingimus muutub valeks.

## Milleks kasutatakse R-keeles while-tsükleid?

While-tsüklid kasutatakse tingimusest sõltuva **koodiblokki korduvaks täitmiseks**. Niikaua, kui see tingimus on tõene, täidetakse while-tsüklis olev kood.

R-programmeerimises kasutatakse silmuseid sageli R-nimekirja elementide uurimiseks ja nende suhtes individuaalsete tegevuste sooritamiseks. Näiteks võite kuvada ekraanil mis tahes stringi R-stringide nimekirjast. Lisaks kasutatakse R-s while-silmuseid koodi tingimuslikuks täitmiseks. While-silmuse sarnased silmused on paljude tuntud **sorteerimisalgoritmide** aluseks, mis korraldavad andmebaasi teatud kriteeriumide järgi.

## R-keeles while-tsüklite struktuur ja süntaks

R-keeles on while-tsüklite süntaks sarnane enamiku teiste programmeerimiskeelte while-tsüklite süntaksiga. Tsükli päises, mis algab märksõnaga *while*, on tingimus määratud sulgudes. Tsükli korpuse täitmiseks peab viimane olema tõene. See korpus ei ole midagi muud kui tsükli päise järel olev omaette koodiblokk, mis on sulgudes.

Selle illustreerimiseks oleme loonud näite. See R-tsükli näide näitab while-tsüklit, mis väljastab väärtused 1 kuni 10:

```R
x <- 1
while (x <= 10) {
    print(x)
    x <- x + 1
}
```

## Bubblesort R-keeles näide

Bubblesort on klassikaline sorteerimisalgoritm, mida kasutatakse **R-vektori või R-massiivi elementide sorteerimiseks kasvavas järjekorras**. Selles sorteerimisalgoritmis kasutatakse while-tsüklit sorteerimiskoodi täitmiseks, kuni kõik vektori elemendid on sorteeritud:

```R
bubblesort <- function(x) {
    swapped <- TRUE
    n <- length(x) - 1
    while (swapped) {
        swapped <- FALSE
        for (i in 1:n) {
            if (x[i] > x[i+1]) {
                tmp <- x[i]
                x[i] <- x[i+1]
                x[i+1] <- tmp
                swapped <-TRUE
                }
        }
    }
    return(x)
}
```

Eespool toodud koodis luuakse R-funktsioon nimega *bubblesort*. See tagab numbrilise vektori järjestamise kasvavas järjekorras. While-tsüklit kasutatakse vahetusprotsessi läbiviimiseks, mis on Bubblesorti jaoks hädavajalik, kuni sorteerimine on lõpetatud.

## R-keeles while-tsükli katkestamine

Teatud tingimuse korral while-tsükli **ennetähtaegseks lõpetamiseks** võite kasutada märksõna „break”. See tagab, et tsükkel lõpetatakse ja sinna ei pöörduta tagasi. Siin on näide „break”-lause kasutamisest:

```R
x <- 10
while (x >= 0) {
    print(x)
    if (x == 5) {
        break
        }
        x <- x - 1
}
```

Eespool toodud tsükkel väljastab ekraanile numbrid 10 kuni 5. Kui muutuja „x” jõuab väärtuseni 5, täidetakse R-keele tingimus „if” ja tsükkel lõpetatakse ennetähtaegselt käsu „break” abil.

## Muud silmused R-is

R-keeles ei ole while-tsükkel ainus tsükkel. On olemas ka for-tsükkel, mida peetakse sageli **loendamise tsükliks**, ja repeat-tsükkel, mida kasutatakse koodi **mitmekordseks** täitmiseks **, sõltumata tingimusest**. Repeat-tsüklitest tuleb väljuda märksõnaga „break”, vastasel juhul on tegemist lõputute tsüklitega.

### For-tsükkel R-is

For-tsükleid kasutatakse, kui iteratsioonide arv on eelnevalt teada. Iteratsioonide arv on tsükli pealkirjas selgesõnaliselt määratud. For-tsükkel, mis väljastab numbrid 1 kuni 5, näeb välja järgmine:

```R
for (z in 1:5) {
print(i)
}
```

### Korda silmus R-is

R-keeles kasutatakse kordusringe koodi mitmekordseks täitmiseks, sõltumata tingimusest. Kui te pole programmeerimises alles algaja, siis olete ilmselt tuttav do-while-ringidega teistest programmeerimiskeeltest, nagu Java. R-keeles pole selgesõnalist do-while-ringi, kus koodiblokk täidetakse vähemalt üks kord. Kuid seda funktsionaalsust saab hõlpsasti rakendada kordusringidega:

```R
x <- 1
repeat {
    print(x)
    if (x >= 10) {
        break
        }
x <- x + 1
}
```

Eespool toodud koodinäide väljastab numbrid 1 kuni 10. Kood täidetakse vähemalt üks kord (klassikalises do-while-tsüklis koodiblokis „do”) enne „if”-lauset, mis lõpetab tsükli, kui määratud tingimus on tõene.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/r-kuni-silmus/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/r-kuni-silmus/) for AI/LLM consumption.