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

Zadanie 2 z rozdziału 15 (kalkulator) problem z pętlą

Ostatnio zmodyfikowano 2022-06-10 06:55
Autor Wiadomość
piratek
Temat założony przez niniejszego użytkownika
Zadanie 2 z rozdziału 15 (kalkulator) problem z pętlą
» 2022-06-08 12:29:10
Jestem w trakcie kodowania kalkulatora i natknąłem się na problem, który nie do końca wiem z tego co wynika. Problem pojawia się gdy wpisuje 0 w tym miejscu:
cin >> liczbaA;
. Kod ignoruje
if( liczbaA != 0 )
, ale zamiast pętla wrócić do tego miejsca, to program zakańcza pętlę - nie rozumiem dlaczego. Jeśli dobrze rozumiem, to pętla powinna skończyć się wyłącznie tylko wtedy gdy przy
cin >> dzialanie;
 zadeklaruje 0, mylę się? Bo to wygląda tak, jakby pętle obchodziło tylko wprowadzona liczba, a nie liczba przechowywana w zmiennej. Z góry dziękuję za pomoc.
P.S Czy wszystko w tym kodzie działa zgodnie z treścią zadania? Brakuje mi jeszcze sprawdzenia błędów, ale czy oprócz tego wszystko się zgadza? Mam wrażenie, że mogłem nieprawidłowo zrozumieć treść zadania. Proszę nie zwracać uwagi na zmienną bool.

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

int main()
{
   
int dzialanie = 0;
   
float liczbaA,
   
wynik = 0;
   
bool blad;
   
   
do
   
{
       
cout << "Wynik wynosi = " << wynik << endl << endl;
       
       
cout << "Wprowadz liczbe wymagana do obliczen ";
       
cin >> liczbaA;
       
       
if( liczbaA != 0 )
       
{
           
cout << "[1] Dodawanie" << endl;
           
cout << "[2] Odejmowanie" << endl;
           
cout << "[3] Mnożenie" << endl;
           
cout << "[4] Dzielenie" << endl;
           
cout << "[5] Rezygnuj" << endl;
           
cout << "Wybrales liczbe = ";
           
cin >> dzialanie;
       
}
       
       
if( dzialanie != 0 )
       
{
           
switch( dzialanie )
           
{
           
case 1:
               
cout << "Wybrales dodawanie" << endl;
               
wynik = wynik + liczbaA;
               
break;
           
case 2:
               
cout << "Wybrales odejmowanie" << endl;
               
cout << dzialanie;
               
wynik = wynik - liczbaA;
               
break;
           
case 3:
               
cout << "Wybrales mnozenie" << endl;
               
wynik = wynik * liczbaA;
               
break;
           
case 4:
               
cout << "Wybrales dzielenie" << endl;
               
wynik = wynik / liczbaA;
               
break;
           
case 5:
               
break;
           
}
        }
    }
while( dzialanie != 0 );
   
}
P-179527
pekfos
» 2022-06-08 23:27:37
Gdy wpisujesz zero do liczbaA, program nigdy nie pyta o działanie i pomija całą resztę bo działanie domyślnie jest zerowe.
P-179528
piratek
Temat założony przez niniejszego użytkownika
» 2022-06-09 06:10:05

Gdy wpisujesz zero do liczbaA, program nigdy nie pyta o działanie i pomija całą resztę, bo działanie domyślnie jest zerowe.
O jejku, rzeczywiście masz rację. A ja męczyłem się sporo czasu, by ustalić czemu, to nie działa prawidłowo. Dziękuję za pomoc, kłaniam się po same kule.

Wróciłem z mam nadzieję skończonym kodem. Przetestowałem kod pod każdym względem i wydaję mi się, że wszystko działa prawidłowo, wedle treści zadania. Podsyłam na wszelki wypadek kod, by się upewnić, że rzeczywiście tak jest. Czy można było uprościć ten kod? Zrobić to jakoś inaczej? Trochę mnie pomęczył ten kod, ale cieszę się, że wreszcie udało mi się to zrobić.

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

int main()
{
   
int dzialanie = 0;
   
float liczbaA,
   
wynik = 0;
   
bool blad;
   
   
do
   
{
       
cout << "Wynik wynosi = " << wynik << endl << endl;
       
do
       
{
           
cout << "Wprowadz liczbe wymagana do obliczen ";
           
cin >> liczbaA;
           
           
blad = cin.fail();
           
cin.clear();
           
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
           
       
} while( blad );
       
       
if( liczbaA != 0 )
       
{
           
do
           
{
               
cout << "[1] Dodawanie" << endl;
               
cout << "[2] Odejmowanie" << endl;
               
cout << "[3] Mnożenie" << endl;
               
cout << "[4] Dzielenie" << endl;
               
cout << "[5] Rezygnuj" << endl;
               
cout << "Wybrales liczbe = ";
               
cin >> dzialanie;
               
               
blad = cin.fail();
               
cin.clear();
               
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
               
           
} while( blad );
           
            ;
           
switch( dzialanie )
           
{
           
case 1:
               
cout << "Wybrales dodawanie" << endl;
               
wynik = wynik + liczbaA;
               
break;
           
case 2:
               
cout << "Wybrales odejmowanie" << endl;
               
wynik = wynik - liczbaA;
               
break;
           
case 3:
               
cout << "Wybrales mnozenie" << endl;
               
wynik = wynik * liczbaA;
               
break;
           
case 4:
               
cout << "Wybrales dzielenie" << endl;
               
wynik = wynik / liczbaA;
               
break;
           
case 5:
               
break;
           
}
        }
    }
while( dzialanie != 0 );
   
}
P-179529
pekfos
» 2022-06-09 18:11:43
Jest prawie dobrze. Według treści zadania program powinien kończyć się jak podasz 0 jako liczbę (liczbaA), a nie jako działanie.
P-179531
piratek
Temat założony przez niniejszego użytkownika
» 2022-06-09 23:51:59
Czy teraz jest dobrze?

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

int main()
{
   
int dzialanie;
   
float liczbaA,
   
wynik = 0;
   
bool blad;
   
   
do
   
{
       
cout << "Wynik wynosi = " << wynik << endl << endl;
       
do
       
{
           
cout << "Wprowadz liczbe wymagana do obliczen ";
           
cin >> liczbaA;
           
           
blad = cin.fail();
           
cin.clear();
           
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
           
       
} while( blad );
       
       
if( liczbaA != 0 )
       
{
           
do
           
{
               
cout << "[1] Dodawanie" << endl;
               
cout << "[2] Odejmowanie" << endl;
               
cout << "[3] Mnożenie" << endl;
               
cout << "[4] Dzielenie" << endl;
               
cout << "[5] Rezygnuj" << endl;
               
cout << "Wybrales liczbe = ";
               
cin >> dzialanie;
               
               
blad = cin.fail();
               
cin.clear();
               
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
               
           
} while( blad );
           
           
switch( dzialanie )
           
{
           
case 1:
               
cout << "Wybrales dodawanie" << endl;
               
wynik = wynik + liczbaA;
               
break;
           
case 2:
               
cout << "Wybrales odejmowanie" << endl;
               
wynik = wynik - liczbaA;
               
break;
           
case 3:
               
cout << "Wybrales mnozenie" << endl;
               
wynik = wynik * liczbaA;
               
break;
           
case 4:
               
cout << "Wybrales dzielenie" << endl;
               
wynik = wynik / liczbaA;
               
break;
           
case 5:
               
break;
           
}
        }
    }
while( liczbaA != 0 );
   
}
P-179543
pekfos
» 2022-06-10 06:55:12
Teraz jest dobrze.
P-179544
« 1 »
  Strona 1 z 1