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:
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
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.