Lekcja 17 - Kalkulator z wczytywaniem liczb i operatora.
Ostatnio zmodyfikowano 2017-11-12 14:27
marcinpro Temat założony przez niniejszego użytkownika |
» 2017-11-05 19:10:24 Nie wszystko jeszcze rozumie, ale pomału. Teraz działa, a można chyba wszystko na zmienno przecinkowych. Dokładniejszy kal będzie. Teraz mam problem bo reszta może wyjść zero i wtedy mam błąd bo będę miał komunikat nie dziel przez zero. Ok narazie przerwa. Dzięki za rady. #include <iostream> #include <cstdio> #include <cmath>
using namespace std;
float wczytajliczbe() { float a; bool spr; do { cin >> a; spr = cin.good(); if( spr == false ) { cout << "Podales bledna liczbe! Podaj poprawna:"; cin.clear(); cin.ignore(); } } while( spr == false ); return a; }
int sproperatora() { char a; bool spr; cout << "Wybierz opcje: "; do { cin >> a; if( a == '+' || a == '-' || a == '*' || a == '/' || a == '%' || a == 'X' || a == 'x' ) { spr = true; } else { cout << "Podales bledny operator! Podaj jeszcze raz:"; spr = false; cin.clear(); cin.ignore(); } } while( spr != true ); return a; }
float dodawanie( float a, float b ) { return a + b; } float odejmowanie( float a, float b ) { return a - b; } float mnozenie( float a, float b ) { return a * b; }
float dzielenie( float a, float b ) { if( b == 0 ) { return 0; } else { return a / b; } }
float reszta( float a, float b ) { double reszta; if( b == 0 ) { return 0; } else { reszta = fmod( a, b ); } return reszta; }
int main()
{ float a, b; char c; do { cout << endl; cout << " Kalkulator by Ziolo" << endl; cout << " [+] Dodawanie" << endl; cout << " [-] Odejmowanie" << endl; cout << " [*] Mnozenie" << endl; cout << " [/] Dzielenie" << endl; cout << " [%] Reszta z dzielenia" << endl; cout << " [X] Rezygnuj" << endl; c = sproperatora(); cout << endl; if( c != 'X' && c != 'x' ) { cout << "Podaj liczbe a:"; a = wczytajliczbe(); cout << "Podaj liczbe b:"; b = wczytajliczbe(); } switch( c ) { case '+': cout << " [+] Dodawanie" << endl; cout << "Wynik = " << dodawanie( a, b ) << endl; break; case '-': cout << " [-] Odejmowanie" << endl; cout << "Wynik = " << odejmowanie( a, b ) << endl; break; case '*': cout << " [*] Mnozenie" << endl; cout << "Wynik = " << mnozenie( a, b ) << endl; break; case '/': cout << " [/] Dzielenie" << endl; if( dzielenie( a, b ) == 0 ) { cout << "Nie dzielimy przez 0!" << endl; } else { cout << "Wynik = " << dzielenie( a, b ) << endl; } break; case '%': cout << " [%] Reszta z dzielenia" << endl; if( reszta( a, b ) == 0 ) { cout << "Nie dzielimy przez 0!" << endl; } else { cout << "Wynik = " << reszta( a, b ) << endl; } } } while( c != 'X' && c != 'x' ); return 0; }
|
|
marcinpro Temat założony przez niniejszego użytkownika |
» 2017-11-12 10:42:17 Ok, wróciłem do tematu, zrobiłem w sumie nie będę wklejał prog, po prostu dodałem w case warunek: case '%': cout << " [%] Reszta z dzielenia" << endl; if( reszta( a, b ) == 0 && b == 0 ) { cout << "Nie dzielimy przez 0!" << endl; } else { cout << "Wynik = " << reszta( a, b ) << endl; }
I teraz zwraca resztę z dzielenia 0 i nie dzieli przez zero. Biorę się dzisiaj za L21. |
|
YooSy |
» 2017-11-12 11:56:47 Pisanie logiki w case robi program mniej czytelnym. Lepiej zamknąć tą logikę w funkcji i wywołać ją tylko w tym miejscu. |
|
marcinpro Temat założony przez niniejszego użytkownika |
» 2017-11-12 14:27:35 Powiem Ci, że nie mam pomysłu jak to w funkcji zrobić. Aha w sumie to nie można w tym case zrobić tak? case '%': cout << " [%] Reszta z dzielenia" << endl; if( b == 0 ) { cout << "Nie dzielimy przez 0!" << endl; } else { cout << "Wynik = " << reszta( a, b ) << endl; }
Jeśli możesz to podpowiedź mi jak to byłoby można w funkcji zrobić, dodatkową funkcję do wyświetlania typu void? |
|
1 « 2 » |