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

Lekcja 17 - Kalkulator z wczytywaniem liczb i operatora.

Ostatnio zmodyfikowano 2017-11-12 14:27
Autor Wiadomość
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.

C/C++
#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; // zmienne
    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;
   
}
P-166505
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:
C/C++
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.
P-166801
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.
P-166808
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?
C/C++
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?
P-166814
1 « 2 »
Poprzednia strona Strona 2 z 2