[C++] Kalkulator. Ćwiczenie na funkcjach. Dzielenie wykonuje się dwukrotnie.
Ostatnio zmodyfikowano 2014-08-17 22:37
carlosmay Temat założony przez niniejszego użytkownika |
[C++] Kalkulator. Ćwiczenie na funkcjach. Dzielenie wykonuje się dwukrotnie. » 2014-08-17 20:54:48 Założyłem: 1. Kalkulator ma zabezpieczyć wejście. 2. Ma informować o niepoprawnym dzieleniu przez 0. #include <iostream> #include <cstdio> using namespace std;
void opcje() { cout << "[1] dodawanie\n"; cout << "[2] odejmowanie\n"; cout << "[3] mnozenie\n"; cout << "[4] dzielenie\n"; cout << "[5] reszta z dzielenia\n"; cout << "[6] wyjscie z programu\n\n"; }
(...) float dzielenie() { float a; cout << "Podaj liczbe a: "; cin >> a; bool ap = cin.good(); cin.clear(); cin.sync(); float b; cout << "Podaj liczbe b: "; cin >> b; bool bp = cin.good(); cin.clear(); cin.sync(); cout << "Wynik = "; if( ap != false && bp != false && b != 0 ) return a / b; else return 0; }
(...) int main() { cout << "\t\tZAPRASZAMY\n\n"; cout << "W programie dostepne sa nastepujace opcje:\n\n"; int x; bool koniec = false; do { cout << "\n\nWybierz jedna z opcji: \n"; opcje(); cout << endl; cin >> x; if( x >= 1 && x <= 6 ) { switch( x ) { case 1: cout << dodawanie() << endl; break; case 2: cout << odejmowanie() << endl; break; case 3: cout << mnozenie() << endl; break; case 4: if( dzielenie() != 0 ) cout << dzielenie() << endl; else cout << "Dzielenie przez zero niedozwolone./n"; break; case 5: if( resztaZdzielenia() != 0 ) cout << resztaZdzielenia() << endl; else cout << "Dzielenie przez zero niedozwolone./n"; break; case 6: koniec = true; break; } } else cout << "\n\nWybrales niepoprawna opcje.\n\n"; } while( x != 6 && !koniec ); cout << "ZAPRASZAMY PONOWNIE\n\n"; system( "pause" ); return 0; } Podaj liczbe a: 5 Podaj liczbe b: 9 Wynik = Podaj liczbe a: 5 Podaj liczbe b: 9 Wynik = 0.555556
|
|
Vister26 |
» 2014-08-17 21:06:59 Wywołujesz funkcję dzielenie() dwa razy pod rząd if( dzielenie() != 0 ) cout << dzielenie() << endl;
Aby tego uniknąć, możesz zapisać sobie wartość zwracaną przez tą funkcję do jakiejś zmiennej i na niej wykonywać dalsze operacje. @edit Z obsługą funkcji resztaZdzielenia() to samo. |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2014-08-17 22:03:32 Nie bardzo to wychodz. case 4: { float zastapDziel = dzielenie(); if( zastapDziel != 0 ) cout << dzielenie() << endl; else cout << "Dzielenie przez zero niedozwolone./n"; break; }
Wykonuje się przy przypisywaniu i póżniej normalnie. Jeśli zrobie przypisanie na poczatku funkcji main to wykonje się przed możliwością wyboru. Nie mam pomyslu jak to zrobic. |
|
Vister26 |
» 2014-08-17 22:18:11 Musisz zrozumieć jak to działa: case 4: { float zastapDziel = dzielenie(); if( zastapDziel != 0 ) cout << dzielenie() << endl; else cout << "Dzielenie przez zero niedozwolone./n"; break; }
Wystarczy, że cout << dzielenie() << endl; zamienisz na cout << zastapDziel << endl; (ponieważ ta zmienna zawiera wynik dzielenia) i powinno być dobrze. Jeśli nadal nie rozumiesz, to spróbuj po kolei od początku przeanalizować kod. Być może cię olśni ;) |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2014-08-17 22:37:58 Czyli funkcja jest wywołana float zastapDziel = dzielenie(); i wykonuje polecenia, następnie przypisuje sam wynik tego działania do zmiennej float zastapDziel , a tutaj if( zastapDziel != 0 ) cout << zastapDziel << endl;
wyświetla tylko wynik juz wykonanego działania, bez wywoływania funkcji. Chyba zaskoczyłem. Taki detal niezrozumiany a tyle krwi. Podziękowania. |
|
« 1 » |