Do-while

A do-while ciklus

Más néven: hátultesztelő ismétlő szerkezet

Szerkezete:

    do {
        utasítás1
        utasítás2
        ...
    } while (feltétel);

Működése:

Végre lesznek hajtva az utasítások, majd ellenőrizzük a feltételt: ha igaz, akkor ismét végre lesznek hajtva és ismét ellenőrizzük stb. Amint a feltétel hamis lesz, leáll.

Példa

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    do {
        cout << n << endl;
        n = n + 1;
    } while (n < 10);

    return 0;
}

Nyomonkövetés

Ha a bemenet n = 8.

    n | 8 9 10
    -------------------------
    
    Kimenet: 8 
             9

Ha a bemenet n = 12.

    n | 12 13
    -------------------------
    
    Kimenet: 12 

A példa átírása while-ra:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    cout << n << endl;
    n = n + 1;
    while (n < 10) {
        cout << n << endl;
        n = n + 1;
    }

    return 0;
}

A belsejét megismételtük a ciklus előtt, hogy legalább egyszer megtörténjen (mint a do-while-nál).

Átírás fordítva

Most while ciklussal megadott ciklus viselkedését akarjuk utánozni egy do-while ciklussal:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    while (n < 10) {
        cout << n << endl;
        n = n + 1;
    }

    return 0;
}

Átíráskor kell egy feltétel a ciklus köré, mert lehet, hogy egyszer sem akarjunk végrehajtani a belsejét.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    if (n < 10) {
        do {
            cout << n << endl;
            n = n + 1;
        } while (n < 10);
    }

    return 0;
}

Feladat

Adott egy n term. szám. Írjuk ki a számjegyeit külön sorokba.

Ötlet:

    135 % 10 == 5
    135 / 10 == 13

    13 % 10 == 3
    13 / 10 == 1

    1 % 10 == 1
    1 / 10 == 0

Itt a megoldást érdemes do-while ciklussal leírni, mert n = 0 esetén is szeretnénk kiírni egyszer az utolsó számjegyet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    do {
        // ???
    } while (/* ??? */);

    return 0;
}