Zamiana pętli "do while" na "for"
Ostatnio zmodyfikowano 2015-11-17 16:10
maciaas87 Temat założony przez niniejszego użytkownika |
Zamiana pętli "do while" na "for" » 2015-11-17 13:25:01 Witam,pytanie dotyczy przykladu z lekcji 27. jak mozna zamienic taka petle na petle for ? (na while nie mam problemu) do { std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl; znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ); } while( znalezionaPozycja != std::string::npos );
ta niestety nie dziala: for( znalezionaPozycja; znalezionaPozycja == std::string::npos; znalezionaPozycja++ ) { std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl; znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ); }
|
|
Szadziu |
» 2015-11-17 13:53:11 Nie widzę sensu ale: for( znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ); znalezionaPozycja != std::string::npos; znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ) )
|
|
maciaas87 Temat założony przez niniejszego użytkownika |
» 2015-11-17 14:06:48 dzięki za odp. sensu jako takiego większego nie ma - po prostu przy okazji próbuje uczyć się przekształcać pętle.
niestety ale szczerze mowiac nie dokonca rozumiem Twoj zapis :( tzn. zwłaszcza warunku środkowego, ktory ma zakonczyc petle ...przeciez ma on zakonczyc petle wtedy kiedy wlasnie znalezionaPozycja == std::string::npos, a nie kiedy "!=". jak mialbys chwile prosze o wytlumaczenie czemu wlasnie taki zapis zastosowales. w petli "while" jest on dla mnie logiczny, ale w petli for juz nie dokonca...
Twoj zapis po skompilowaniu dziala, ale wypisuje liczby od tylu. Jak mozna to zmienic ? |
|
Szadziu |
» 2015-11-17 14:15:46 For działa dopóki warunek jest spełniony. http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-for/294 Edit: w moim zapisie jest błąd: for( znalezionaPozycja = tekst.find( szukanyZnak ); znalezionaPozycja != std::string::npos; znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ) )
|
|
Rashmistrz |
» 2015-11-17 15:21:46 FOR: -inicjalizcja pętli -sprawdzenie warunku -wykonanie instrukcji -"końcowa instrukcja" -powrót do sprawdzenia warunku.
DO ... WHILE: -wykonanie instrukcji -sprawdzenie warunku -ponowne wykonanie instrukcji
//EDIT: Machnąłem się i nie napisałem DO. :F
|
|
carlosmay |
» 2015-11-17 15:24:50 WHILE: -wykonanie instrukcji -sprawdzenie warunku -ponowne wykonanie instrukcji | WHILE: -sprawdzenie warunku -wykonanie instrukcji -ponowne sprawdzenie warunku |
|
maciaas87 Temat założony przez niniejszego użytkownika |
» 2015-11-17 15:50:46 faktycznie... dzięki bardzo za pomoc z przypomniem zasad używania danych pętli. za dużo informacji do zapamietania jak jest sie swiezym :) czyli tak naprawde to oznacza, że nie każdą instrukcję będzie można zapisać w danej pętli tak ? np. int liczba; do { moja_funkcja(); std::cin >> liczba; switch( liczba ) { case 1: dodawanie(); break; case 2: odejmowanie(); break; default: break; } } while( liczba != 0 );
Jesli zapisze ja tak: int liczba; while( liczba != 0 ) { moja_funkcja(); std::cin >> liczba; switch( liczba ) { case 1: dodawanie(); break; case 2: odejmowanie(); break; default: break; } }
lub tak: int liczba; for( int i = 0; liczba != 0; i++ ) { moja_funkcja(); std::cin >> liczba; switch( liczba ) { case 1: dodawanie(); break; case 2: odejmowanie(); break; default: break; } }
to wtedy tak naprawdę instrukcja nie zostanie wykonana bo pierw sprawdzany jest warunek pętli. do...while zostaje wykonana bo warunek sprawdzany jest po pierwszym wykonaniu instrukcji zgadza sie ? da się jakoś zrobić, żeby mimo wszystko wykonać w/w pętlę sposobem for/while, tak, żeby instrukcje zostały wykonane ? czy nie potrzebnie mieszam i po to są różne pętle, żeby używać je w określony sposób ? |
|
carlosmay |
» 2015-11-17 16:10:29 dojdą ci dwie linijki kodu i można int liczba; moja_funkcja(); std::cin >> liczba; while( liczba != 0 ) { switch( liczba ) { case 1: dodawanie(); break; case 2: odejmowanie(); break; default: break; } moja_funkcja(); std::cin >> liczba; }
|
|
« 1 » |