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

Dział 2, Rozdział 17 Kalkulator

Ostatnio zmodyfikowano 2016-03-10 15:10
Autor Wiadomość
MrKash
Temat założony przez niniejszego użytkownika
Dział 2, Rozdział 17 Kalkulator
» 2016-03-10 10:45:47
Witam,

Mam mały problem ponieważ ciężko mi dojść do tego co zrobiłem nie tak, czasem potrzebuję naprowadzenia by coś zrozumieć, więc poniżej podam kod:

C/C++
#include <iostream>

using namespace std;

void menu()
{
    cout << "MENU" << endl;
    cout << "================" << endl;
    cout << "[1] Dodawanie" << endl;
    cout << "[2] Odejmowanie" << endl;
    cout << "[3] Mnozenie" << endl;
    cout << "[4] Dzielenie" << endl;
    cout << "[0] Koniec" << endl;
}

void oblicz( char mat )
{
    cout << "\nWykonuj dzialania zgodnie z programem" << endl;
   
    if( mat == '+' )
    {
        int dodaj( int a, int b )
        cout << "\nPodaj a: ";
        cin >> a;
        cout << "Podaj b: ";
        cin >> b;
        cout << "a + b" << dodaj( a, b ) << endl;
        return a + b;
    }
    else if( mat == '-' )
    {
        int odejmij( int a, int b )
        cout << "\nPodaj a: ";
        cin >> a;
        cout << "Podaj b: ";
        cin >> b;
        cout << "a - b" << odejmij( a, b ) << endl;
        return a - b;
    }
    else if( mat == '*' )
    {
        int pomnoz( int a, int b )
        cout << "\nPodaj a: ";
        cin >> a;
        cout << "Podaj b: ";
        cin >> b;
        cout << "a * b" << pomnoz( a, b ) << endl;
        return a * b;
    }
    else if( mat == '/' )
    {
        int podziel( int a, int b )
        cout << "\nPodaj a: ";
        cin >> a;
        cout << "Podaj b: ";
        cin >> b;
        cout << "a / b" << podziel( a, b ) << endl;
        return a / b;
    }
}

void koniec()
{
    cout << "\nPodales [0], konczymy." << endl;
}

int main()
{
    int liczba;
    do
    {
        menu();
        cout << "Jakie dzialanie wykonac ?: ";
        cin >> liczba;
       
        switch( liczba )
        {
        case 0: koniec(); break;
        case 1: oblicz( '+' ); break;
        case 2: oblicz( '-' ); break;
        case 3: oblicz( '*' ); break;
        case 4: oblicz( '/' ); break;
            default:
            cout << "\nNie ma takiego dzialania." << endl;
        }
    } while( liczba != 0 );
   
    return 0;
}

Z góry dzięki wielkie za pomoc ;)
P-145840
carlosmay
» 2016-03-10 10:53:54
C/C++
int dodaj( int a, int b )
To jest źle. Prawdopodobnie miała to być funkcja, a je definiuje się globalnie, nie w innych funkcjach.

Funkcja oblicz nie może niczego zwracać.
return a + b;
?
P-145841
carlosmay
» 2016-03-10 15:10:50
To powinno być zrozumiałe:
C/C++
#include <iostream>
#include <cmath>
#include <limits>
#include <iomanip>

void menu() {
    std::cout << "Wpisz operacje matem wg wzoru:\n"
    "liczba operator liczba\n";
}

double dodaj( double a, double b ) {
    return a + b;
}

double odejmij( double a, double b ) {
    return a - b;
}

double mnoz( double a, double b ) {
    return a * b;
}

double dziel( double a, double b ) {
    return( b == 0 ) ? 0
        : a / b;
}

double modulo( double a, double b ) {
    return( b == 0 ) ? 0
        : static_cast < int >( a ) % static_cast < int >( b );
}

double fmodulo( double a, double b ) {
    return( b == 0 ) ? 0
        : fmod( a, b );
}

double oblicz( double a, char znak, double b ) {
    std::cout << std::fixed
    << a << ' ' << znak << ' ' << b << " = "
    << std::setprecision( 2 );
    if( znak == '+' ) return dodaj( a, b );
    else if( znak == '-' ) return odejmij( a, b );
    else if( znak == '*' ) return mnoz( a, b );
    else if( znak == '/' ) return dziel( a, b );
    else if( znak == '%' ) {
        char op;
        std::cout << "[c] modulo liczb calkowitych\n[r] modulo liczb zmiennoprzecinkowych\n";
        std::cin >> op;
        if( op == 'c' ) return modulo( a, b );
        else if( op == 'r' ) return fmodulo( a, b );
        else {
            std::cerr << "Blad opcji modulo.\n";
            return 0;
        }
    }
}

int main()
{
    menu();
    double a, b, wynik = 0;
    char znak;
    while( !( std::cin >> a >> znak >> b ) ) {
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
        std::cerr << "Blad wprowadzonych danych: wpisz ponownie:\n";
    }
   
    switch( znak ) {
    case '+':
        wynik = oblicz( a, znak, b );
        break;
    case '-':
        wynik = oblicz( a, znak, b );
        break;
    case '*':
        wynik = oblicz( a, znak, b );
        break;
    case '/':
        wynik = oblicz( a, znak, b );
        break;
    case '%':
        wynik = oblicz( a, znak, b );
        break;
        default:
        std::cerr << "niepoprawny operator\n";
    }
    std::cout << wynik << std::endl;
}
P-145855
« 1 »
  Strona 1 z 1