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

Pętla do ... while (praca domowa)

Ostatnio zmodyfikowano 2015-11-11 22:25
Autor Wiadomość
carlosmay
» 2015-11-11 21:29:13
  Nie rozumiem Dlaczego pętlę kończy b = 0
 bo '=' jest operatorem przypisania i wyrażenie 'b = 0' ma wartość zero, czyli pętla kończy działanie.
P-139980
Master_Yoga
» 2015-11-11 21:32:06
Usuń printowanie po pętli a zostaw to przy return.

Pętla będzie zapierniczać dopóki wartość bool'a osiąga wartość 0, kończy się w przeciwnym wypadku.
Daj sobie w pętli printowanie i walnij do konsoli jakie wartości i w jakich momentach otrzymuję myślę, że wtedy zrozumiesz.
P-139981
carlosmay
» 2015-11-11 21:38:28
Przykład pokazuje różnicę między przypisaniem a porównaniem, które używane były w programie.
C/C++
int main()
{
    float a = 0;
    cout <<( a = 0 ) << endl; // wypisze 0
    cout <<( a == 0 ) << endl; // wypisze 1 <== pętla kręci
   
    return 0;
}
 
P-139983
Bidi
Temat założony przez niniejszego użytkownika
» 2015-11-11 21:48:46
Dobra zrobiłem jak kazałeś z printowaniem i teraz program działa jak powinien.

"Daj sobie w pętli printowanie i walnij do konsoli jakie wartości i w jakich momentach otrzymuję myślę, że wtedy zrozumiesz". <--- tego do końca nie rozumiem co mam zrobić żeby załapać

A co do "bo '=' jest operatorem przypisania i wyrażenie 'b = 0' ma wartość zero, czyli pętla kończy działanie." to dalej nie jest odpowiedzią na moje pytanie (podejrzewam że dlatego że nie za dobrze mi idzie przedstawianie swojego problemu). Nie rozumiem dlaczego działanie pętli kończy ( b == 0). Wpisuje błędne dane do programu(czyli moje b wynosi 0, więc uruchamia się pętla), program potem pyta mnie znów o dane podaje teraz poprawne dane(więc moje b powinno wynosić teraz 1 tak?
b = cin.good();
) i pętlasię kończy. I teraz pytanie dlaczego się kończy po wpisaniu poprawnych danych jeśli po wpisaniu poprawnych danych moja zmienna bool ma wartość 1 a warunek żeby zakończyła się pętla to (b == 0)



Rozumiem różnicę między "=" a "==" już za pierwszym razem jak o tym ktoś wspomniał załapałem :)
P-139985
carlosmay
» 2015-11-11 21:59:03
Wpisuje błędne dane do programu(czyli moje b wynosi 0, więc uruchamia się pętla)
 uruchamia się instrukcja warunkowa if, w której jest pętla.
Następnie program rozpoczyna pętlę i pyta ponownie o liczbę.
Po wprowadzeniu liczby program przechodzi do sprawdzenia warunku pętli i jeśli b = 0, pętla ma powtórzyć działanie.

podaje teraz poprawne dane(więc moje b powinno wynosić teraz 1 tak? b = cin.good();) i pętlasię kończy.
  i (b == 1) czyli (b != 0) , jeśli pętla ma kręcić póki b == 0 (true) to przestaje gdy b != 0 (false)
P-139989
Bidi
Temat założony przez niniejszego użytkownika
» 2015-11-11 22:12:37


C/C++
#include <iostream>
using namespace std;

int main()
{
    float a;
    bool b;
   
    cout << "Podaj liczbe = ";
    cin >> a;
    b = cin.good();
    cin.clear();
    cin.sync();
   
    if( b == 0 )
    {
        do
        {
            cout << "Podaj liczbe = ";
            cin >> a;
            b = cin.good(); // 1 otrzymujemy gdy wpiszemy poprawne dane natomiast 0 gdy wpiszemy błędne dane.    
            cin.clear();
            cin.sync();
        } while( b == 0 ); // Przy działaniu programu pętla się kończy gdy wpiszemy poprawne dane. A jak dla mnie z tego zapisu while pętla powinna się kończyć gdy wpiszemy błędne dane bo żeby osiągnąć b = 0 czyli spełnić warunek skończenia pętli musimy wpisać błędne dane(Bo żeby b wynosiło zero musimy wpisać błędne dane). A pętla się kończy w momencie wpisania poprawnych danych. Jak dla mnie to jest nie logiczne.
       
    }
   
    cout << "Podales liczbe = " << a;
    return 0;
   
   
}
P-139991
carlosmay
» 2015-11-11 22:20:18
A jeszcze lepiej napisać tak
C/C++
if( !b ) //...
     } while( !b );

 
 zapisz tak warunki i pomyśl.

Złe dane: b = 0;
Warunek: czy b jest równe 0 (b == 0) --> b jest równe 0, czyli warunek jest spełniony (true).
Dobre dane: b = 1;
Warunek: czy b jest równe 0 (b == 0) --> b nie jest równe 0, czyli warunek nie jest spełniony (false).

Już lepiej nie dam rady wytłumaczyć.
P-139992
Bidi
Temat założony przez niniejszego użytkownika
» 2015-11-11 22:25:28
Dobra załapałem mniej wiecej
P-139994
1 2 « 3 »
Poprzednia strona Strona 3 z 3