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! #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' ) { cout << "Nie mozna wykonac obliczen na 0!\n"; } else { 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; }
|
|
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 ); |
|
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. |
|
maly7 |
» 2017-03-15 21:54:24 A po wczytaniu b wstawiłeś warunek, że jeśli b == 0 to żeby nie obliczało? |
|
carlosmay |
» 2017-03-15 21:58:38 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 != ). |
|
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 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. #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; }
|
|
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ą. |
|
« 1 » |