Pętle po raz trzeci! Na do widzenia prezentuję ostatnią część tłumaczeń podstawowych pętli. Teraz pętla "do while" na celownik i szybko tłumaczę podając niektóre zastosowania i przykłady. Część pierwsza znajduje się tutaj, a część druga jest tutaj.

PĘTLA "DO WHILE" - WYJAŚNIENIE

Powyższa pętla jest używana bardzo rzadko. Nie tylko dlatego, że nie występuje ona w tylu językach jak jej poprzedniczki, ale również dlatego, że rzadko zdarza się przypadek jej użyteczności. Czym ta pętla się różni od pozostałych? Brakiem warunku wejścia! Zamiast tego, warunek jest sprawdzany dopiero po pierwszym wykonaniu instrukcji. I to jest najbardziej rzucająca się w oczy różnica. W związku z tym, pętla "do while" zawsze wykona się przynajmniej jeden raz niezależnie od tego, czy warunek jest spełniony, czy nie. Oprócz tego, wyróżnia się jeszcze nieco bardziej skomplikowaną składnią z małą delikatną "pułapką" w postaci średnika na końcu. Tak wygląda zapis:

do
{
    instrukcje;
}
while (warunek);

Obowiązują te same reguły jak przy pętli "while" jeśli chodzi o samodzielne dbanie o wyjście z pętli dodając zewnętrzny licznik (jeśli warunek jest od niego zależny):

int i = 0;

do
{
    instrukcje;
    ++i;
}
while (i < 10);

Tak wygląda przypadek z preinkrementacją jako często widziany zapis u innych programistów (również pętla "do while"):

int i = 0;

do
{
    instrukcje;
}
while (++i < 10);

Mimo "późnego" sprawdzania warunku pętla "do while" również nadaje się bardziej do operacji, których końca nie sposób przewidzieć:

do
{
    instrukcje;
}
while (wciazNieZnalezionoDrogiDoWyjscia());

Tak wygląda tytułowa pętla i jej budowa.

Pętla "do while"

Pętla "do while" również posiada jedynie część warunku, ale jest on sprawdzany dopiero po wykonaniu instrukcji czyli pętla zawsze jest wykonywana przynajmniej jeden raz.

ZASTOSOWANIE PĘTLI

Gdy omówiliśmy sobie schemat działania tej pętli, przedstawię przykłady w miarę sensownego jej wykorzystania, chociaż wierzcie mi, nie znajdziecie ich za dużo a nawet jeśli występują, to większość ludzi i tak wybierze pętlę "while", aby potencjalnie się uchronić przed jednokrotnym wykonywaniem bloku instrukcji mimo wszystko. Oto przykłady:

  1. wypisywanie menu dostępnych opcji przed zapytaniem użytkownika jaką z nich wybiera
  2. aktualizowanie planszy gry przed wykonaniem jakichkolwiek ruchów zarówno przez gracza, jak i przeciwnika

Mało oryginalne, ale tak jak napisałem: użycie tej pętli jest BARDZO RZADKO widziane.

PĘTLA "DO WHILE" - PRZYKŁADY

Pod ostatnim akapitem kryje się prezentacja dwóch przykładów użycia tej pętli (język C):

#include <stdio.h>

int main(void)
{
	char c = '!';
	
	printf("Program pokazujacy kody ASCII wprowadzanych znakow.\n");
	printf("Wprowadz dowolny znak, a program pokaze Ci jego kod ASCII.\n");
	printf("Dla przykladu podano znak %c, aby zaprezentowac dzialanie.\n", c);
	printf("Podaj znak '!', aby zakonczyc dzialanie programu.\n");
	getchar();
	
	do
	{
		getchar();
		printf("Oto kod ASCII podanego znaku: %d.\n", c);
	}
	while (scanf("%c", &c) == 1 && c != '!');
        
        getchar();
	
	return 0;
}

Oto drugie przykładowe użycie pętli "do while":

#include <stdio.h>
#include <string.h>

int main(void)
{
	char *text = "Dzialanie-petli-do-while";
	int i = strlen(text);
	
	do
	{
		putchar(text[i]);
	}
	while (--i >= 0);
	
	getchar();
	
	return 0;
}

Nie są to przebojowe przykłady, natomiast pokazują one, że od biedy można wepchnąć pętlę "do while" i też będzie działać.


Koniec na dzisiaj. Namordowałem się przy robieniu trzech artykułów naraz, ale mam nadzieję, że wyciągnięcie z tego użytek.