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

Lekcja 15 Kalkulator - zadanie domowe,

Ostatnio zmodyfikowano 2017-03-15 22:42
Autor Wiadomość
ARdiann
Temat założony przez niniejszego użytkownika
Lekcja 15 Kalkulator - zadanie domowe,
» 2017-03-15 20:38:33
Witam, mam mały problem z kalkulatorem i nie do końca wiem jak go rozwiązać, chodzi o to, że chcę aby nie wykonywał mi obliczeń na 0, po wprowadzeniu liczby 0 program ma się zakończyć, od 15 linijki kodu wprowadziłem konstrukcje warunkową if...else ale nie działa tak jakbym chciał - jeśli zmienna a będzie równa 0 program ma się zakończyć (to samo chciałem zrobić z zmienną b), jakimć innym sposobem da się to rozwiązać? Prosiłbym o naprowadzenie.
Z góry dzięki!

C/C++
#include <iostream>
using namespace std;
int main()
{
    float a, b;
    int c;
    bool aa, bb, cc;
    cout << "===== KALKULATOR =====\n";
    do {
       
        cin.clear();
        cin.sync();
        cout << "Podaj pierwsza liczbe: ";
        cin >> a;
        if( a == '0' ) // 15linijka
        { cout << "Nie mozna wykonac obliczen na 0!\n"; } // 16linijka  ta konstrukcja warunkowa nie ma zadnego znaczenia w programie, dlaczego?
        else { // 17linijka
            aa = cin.good();
            if( aa == true )
            { cout << "Podaj druga liczbe: ";
                cin >> b;
                bb = cin.good(); }
            if( bb == true && aa == true )
            {
                cout << "Teraz wybierz dzialanie:\n";
                cout << "[1] Dodawanie.\n" << "[2] Odejmowanie.\n" << "[3] Mnozenie.\n" << "[4] Dzielenie.\n" << "[5] Rezygnuj.\n";
                cin >> c;
                cc = cin.good();
                switch( c )
                {
                case 1:
                    cout << a << " + " << b << " = " << a + b << endl;
                    break;
                case 2:
                    cout << a << " - " << b << " = " << a - b << endl;
                    break;
                case 3:
                    cout << a << " * " << b << " = " << a * b << endl;
                    break;
                case 4:
                    cout << a << " / " << b << " = " << a / b << endl;
                    break;
                case 5:
                    cout << "Zakonczono!" << endl;
                    break;
                default:
                    cout << "Wybrano bledne dzialanie. Sprobuj jeszcze raz." << endl;
                    break;
                } }
           
            else
                 cout << "Wprowadzono bledne dane!" << endl;
           
        } }
    while( c != 5 );
   
    return 0;
}
P-159032
maly7
» 2017-03-15 21:26:27
Rozumiem, że warunek działa prawidłowo, więc do pętli do...while dodaj warunek, że ma się wykonywać jeśli a!=0:
while( a != 0 && c != 5 );

Jeśli chcesz tak samo z b, to wstaw tam również warunek oraz do pętli dodaj:
while( a != 0 && b != 0 && c != 5 );
P-159034
ARdiann
Temat założony przez niniejszego użytkownika
» 2017-03-15 21:49:39
while( a != 0 && b != 0 && c != 5 );

Niestety nie dziala, nic to nie zmienilo w programie.

//EDIT

Zmienilo lecz nie o takie rozwiązanie mi chodziło. Chcę aby od razu po wpisaniu 0 w zmiennej a lub b program się kończył, teraz wykonuje obliczenia na zmiennej 0 i dopiero później się wyłącza.
P-159038
maly7
» 2017-03-15 21:54:24
A po wczytaniu b wstawiłeś warunek, że jeśli b == 0 to żeby nie obliczało?
P-159040
carlosmay
» 2017-03-15 21:58:38
C/C++
if( a == '0' )
Tutaj nie porównujesz zmiennej do liczby typu
float
 tylko do literału znakowego (
const char
).
Poza tym nie powinno się porównywać liczb zmiennoprzecinkowych operatorami ralacji (
==
 oraz
!=
).
P-159042
ARdiann
Temat założony przez niniejszego użytkownika
» 2017-03-15 22:30:15
Tylko jesli w warunku
if( a == 0 )

porównam do zera, to przy wpisywaniu litery zamiast cyfry zwróci mi false czyli 0 i warunek się wykona, trochę głupio to wtedy wygląda bo przy wprowadzaniu danych podam np. "sto, z, x" to wyswietli sie komunikat "Nie mozna wykonac obliczen na 0!" i program się zapętla.
I dlaczego nie powinno się porównywać liczb zmiennoprzecinkowych operatorami
==
 i
!=
?

Usnąłem cały ten warunek

C/C++
if( a == 0 )
{ cout << "Nie mozna wykonac obliczen na 0!\n"; }
else...

I poprawiłem tak jak mlody7 pisał wcześniej - i działa, dzięki mlody7!

if( aa == true && a != '0' )
 tutaj dodałem a!='0'

if( bb == true && aa == true && b != '0' )
 tutaj b!='0'

while( a != 0 && b != 0 && c != 5 );
 tu dopisalem a!=0 && b!=0

Cały kod.

C/C++
#include <iostream>
using namespace std;
int main()
{
    float a, b;
    int c;
    bool aa, bb, cc;
    cout << "===== KALKULATOR =====\n";
    do {
       
        cin.clear();
        cin.sync();
        cout << "Podaj pierwsza liczbe: ";
        cin >> a;
        aa = cin.good();
        if( aa == true && a != '0' )
        { cout << "Podaj druga liczbe: ";
            cin >> b;
            bb = cin.good(); }
        if( bb == true && aa == true && b != '0' )
        {
            cout << "Teraz wybierz dzialanie:\n";
            cout << "[1] Dodawanie.\n" << "[2] Odejmowanie.\n" << "[3] Mnozenie.\n" << "[4] Dzielenie.\n" << "[5] Rezygnuj.\n";
            cin >> c;
            cc = cin.good();
            switch( c )
            {
            case 1:
                cout << a << " + " << b << " = " << a + b << endl;
                break;
            case 2:
                cout << a << " - " << b << " = " << a - b << endl;
                break;
            case 3:
                cout << a << " * " << b << " = " << a * b << endl;
                break;
            case 4:
                cout << a << " / " << b << " = " << a / b << endl;
                break;
            case 5:
                cout << "Zakonczono!" << endl;
                break;
            default:
                cout << "Wybrano bledne dzialanie. Sprobuj jeszcze raz." << endl;
                break;
            } }
       
        else
             cout << "Wprowadzono bledne dane!" << endl;
       
    }
    while( a != 0 && b != 0 && c != 5 );
   
    return 0;
}
P-159043
carlosmay
» 2017-03-15 22:42:47
I dlaczego nie powinno się porównywać liczb zmiennoprzecinkowych operatorami
==
 i
!=
?
Ponieważ nie mają precyzyjniej reprezentacji, tylko przybliżoną.
P-159044
« 1 »
  Strona 1 z 1