Zamiana ról while() i do while()

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

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

Post 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ć.
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post 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;
    }
}
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

Post 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?
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post 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;
}
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

Post 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?
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post 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.
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

Post 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() ?
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post 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.
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

Post autor: Dudi879 »

Fajnie, wielkie dzięki za pomoc.
Awatar użytkownika
marcin1982
Moderator
Posty: 1731
Rejestracja: 05 maja 2011, 12:59
Lokalizacja: Zagłębie Dąbrowskie

Post autor: marcin1982 »

Rozwiązane wątki oznaczamy jako rozwiązane znakiem [+] edytyjąc tytuł pierwszego postu w wątku.
ODPOWIEDZ