Strona 1 z 1

[+] Zamiana ról while() i do while()

: 28 października 2014, 12:10
autor: Dudi879
Witam.

Mam podać możliwie najprostszy sposób spowodowania, że program zawierający pętlę while( )
zacznie się zachowywać jak program zawierający pętlę do while( ) - w przykładzie napisałem nieskończoną pętlę while(1), bo zawsze się wykona. Czy to jest dobrze?

Czy istnieje analogiczna możliwość zamiany rolami pętli do while( ) za pomocą pętli while( )? - Tu mam podać przykład i zupełnie nie wiem od której strony się za to zabrać.

: 28 października 2014, 12:48
autor: dedito
Ja to widzę na przykładzie pętli tak:

Pętla oryginalna:

Kod: Zaznacz cały

while (warunek_org) 
{ 
rób coś; 
}
Pętla skonwertowana do do while:

Kod: Zaznacz cały

warunek_pom=true;
while (warunek_pom) 
{
 rób coś;
 If warunek_org = false
    {
      warunek_pom = false;
    }
}

: 28 października 2014, 16:10
autor: Dudi879
Pierwszy program:

Kod: Zaznacz cały

do
{
    instrukcje
} while (warunek);
    while (warunek)
    {
        instrukcje
    }
    cout << endl;
return 0;
Drugi program:

Kod: Zaznacz cały

if (warunek)                              
{
    do 
    {
        instrukcja;
    } while (warunek);
}
Czy takie rozwiązanie jest prawidłowe?

: 28 października 2014, 17:06
autor: dedito
Wg mnie rozwiązanie jest złe.
W pierwszym programie masz dwie pętle.
W drugim nie bardzo rozumiem co ty tam robisz. Którą pętlę pierwszego programu konwertujesz ?

Przy okazji przyszła mi do głowy prostsza konwersja

Kod: Zaznacz cały

while (warunek) 
{  
rób coś;  
}
i po konwersji

Kod: Zaznacz cały

pierwsze_uruchomienie = true;
while ( pierwsze_uruchomienie || warunek) 
{  
rób coś;
pierwsze_uruchomienie = false;
}

: 28 października 2014, 17:43
autor: Dudi879
Ok, czyli konwersja z while() na "do while()":

Kod: Zaznacz cały

bool pierwsze_uruchomienie = true;
while ( pierwsze_uruchomienie || warunek) 
{  
instrukcje
pierwsze_uruchomienie = false;
}
A na odwrót? Mam użyć samych pętli while()/instrukcji warunkowej?

: 28 października 2014, 18:07
autor: dedito
A na odwrót to pomyśl już samodzielnie.
Pamiętaj o podstawowej różnicy pomiędzy pętlami do ... while i while.
Jeśli warunek pętli jest nie spełniony (warunek = false) to:
- pętla do ... while wykona się jeden raz bo warunek sprawdzany jest na końcu pętli.
- pętla while nie wykona się ani razu.

: 28 października 2014, 19:29
autor: Dudi879
Ok, a czy w konwersji "do while" na "while" mogę to zrobić tak:

Kod: Zaznacz cały

do
{
if (warunek) 
{
instrukcje
}
else break;
}while (warunek)
?
Czy muszę użyć w jakiś inny sposób pętli while() ?

: 28 października 2014, 19:47
autor: dedito
Można tak, całkiem eleganckie rozwiązanie. Opcja else jest chyba tutaj zbędna ale jak jest też nic złego się nie dzieje.

: 28 października 2014, 19:56
autor: Dudi879
Fajnie, wielkie dzięki za pomoc.

: 28 października 2014, 20:23
autor: marcin1982
Rozwiązane wątki oznaczamy jako rozwiązane znakiem [+] edytyjąc tytuł pierwszego postu w wątku.