Dział 2, Rozdział 17 Kalkulator
Ostatnio zmodyfikowano 2016-03-10 15:10
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: #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 ;) |
|
carlosmay |
» 2016-03-10 10:53:54 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; ? |
|
carlosmay |
» 2016-03-10 15:10:50 To powinno być zrozumiałe: #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; } |
|
« 1 » |