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 »  |