Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zamiana pętli "do while" na "for"

Ostatnio zmodyfikowano 2015-11-17 16:10
Autor Wiadomość
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)


   
C/C++
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:
C/C++
for( znalezionaPozycja; znalezionaPozycja == std::string::npos; znalezionaPozycja++ )
{
    std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl;
    znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 );
}

P-140283
Szadziu
» 2015-11-17 13:53:11
Nie widzę sensu ale:

C/C++
for( znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ); znalezionaPozycja != std::string::npos; znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ) )


P-140287
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 ?
P-140292
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:
C/C++
for( znalezionaPozycja = tekst.find( szukanyZnak ); znalezionaPozycja != std::string::npos; znalezionaPozycja = tekst.find( szukanyZnak, znalezionaPozycja + 1 ) )
P-140293
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
P-140299
carlosmay
» 2015-11-17 15:24:50
WHILE:
-wykonanie instrukcji
-sprawdzenie warunku
-ponowne wykonanie instrukcji
 
WHILE:
-sprawdzenie warunku
-wykonanie instrukcji
-ponowne sprawdzenie warunku
P-140300
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.

C/C++
int liczba;
do
{
    moja_funkcja();
    std::cin >> liczba;
    switch( liczba )
    {
    case 1:
        dodawanie();
        break;
    case 2:
        odejmowanie();
        break;
        default:
        break;
    } //switch
} while( liczba != 0 );


Jesli zapisze ja tak:

C/C++
int liczba;
while( liczba != 0 )
{
    moja_funkcja();
    std::cin >> liczba;
    switch( liczba )
    {
    case 1:
        dodawanie();
        break;
    case 2:
        odejmowanie();
        break;
        default:
        break;
    } //switch
}

lub tak:

C/C++
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;
    } //switch
}

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 ?


P-140301
carlosmay
» 2015-11-17 16:10:29
dojdą ci dwie linijki kodu i można
C/C++
int liczba;
moja_funkcja();
std::cin >> liczba;
while( liczba != 0 )
{
    switch( liczba )
    {
    case 1:
        dodawanie();
        break;
    case 2:
        odejmowanie();
        break;
        default:
        break;
    } //switch
    moja_funkcja();
    std::cin >> liczba;
}
 
P-140303
« 1 »
  Strona 1 z 1