[KALKULATOR] Wykonywanie się wszystkich działań zamiast jednego, zależnego do przycisku.
Ostatnio zmodyfikowano 2014-05-30 19:38
Pete12234 Temat założony przez niniejszego użytkownika |
[KALKULATOR] Wykonywanie się wszystkich działań zamiast jednego, zależnego do przycisku. » 2014-05-30 17:47:13 Witam. Tak jak w temacie. Zabezpieczyłem program przed wprowadzeniem złych danych i klops. Mój kod wygląda tak: #include<iostream> using namespace std;
int dodawanie( int L1, int L2 ) { int wynik = L1 + L2; cout << wynik; return wynik; }
int odejmowanie( int L1, int L2 ) { int wynik = L1 - L2; cout << wynik; return wynik; }
int mnozenie( int L1, int L2 ) { int wynik = L1 * L2; cout << wynik; return wynik; }
int dzielenie( int L1, int L2 ) { int wynik = L1 / L2; cout << wynik; return wynik; }
int potegowanie( int L1, int L2 ) { int i; int wynik; do { L1 * L1; i++; } while( i <= L2 ); }
int main() { int wybor; int liczba1; int liczba2; cout << "Siema! To je moj kalkulator" << endl; cout << "Podaj dwie liczby: " << endl; cin >> liczba1; if( cin.fail() ) { do { cin.clear(); cin.sync(); cout << "Podaj LICZBE!: "; cin >> liczba1; } while( cin.fail() ); } cin >> liczba2; if( cin.fail() ) { do { cin.clear(); cin.sync(); cout << "Podaj LICZBE!: "; cin >> liczba2; } while( cin.fail() ); } cout << "Wybierz co chcesz z nimi zrobic: " << endl; cout << "Dodawanie [1]" << endl; cout << "Odejmowanie [2]" << endl; cout << "Mnozenie [3]" << endl; cout << "Dzielenie [4]" << endl; cout << "Potegowanie [5]" << endl; cin >> wybor; if( cin.fail() ) { do { cin.clear(); cin.sync(); cout << "Podaj LICZBE!: "; cin >> wybor; } while( cin.fail() ); } switch( wybor ) { case 1: { int wynik; wynik = dodawanie( liczba1, liczba2 ); cout << liczba1 << " + " << liczba2 << " jest rowne " << wynik << endl; } case 2: { int wynik; wynik = odejmowanie( liczba1, liczba2 ); cout << liczba1 << " - " << liczba2 << " jest rowne " << wynik << endl; } case 3: { int wynik; wynik = mnozenie( liczba1, liczba2 ); cout << liczba1 << " * " << liczba2 << " jest rowne " << wynik << endl; } case 4: { int wynik; wynik = dzielenie( liczba1, liczba2 ); cout << liczba1 << " / " << liczba2 << " jest rowne " << wynik << endl; } case 5: { int wynik; wynik = potegowanie( liczba1, liczba2 ); cout << liczba1 << " ^ " << liczba2 << " jest rowne " << wynik << endl; } } }
A efekt tak: Siema! To je moj kalkulator Podaj dwie liczby: 1 4 Wybierz co chcesz z nimi zrobic: Dodawanie [1] Odejmowanie [2] Mnozenie [3] Dzielenie [4] Potegowanie [5] 3 41 * 4 jest rowne 4 01 / 4 jest rowne 0 1 ^ 4 jest rowne 5
Process returned 0 (0x0) execution time : 7.563 s Press any key to continue.
Co z tym zrobić? Zmieniałem typy zmiennych, ale to nic nie dało. |
|
jarek1402b |
» 2014-05-30 18:02:08 To jest poprawna składnia instrukcji Swich Case porównaj sobie ze swoim kodem i będziesz widział co masz źle i dlaczego wszystko Ci sie wykonuje ;) switch( zmienna ) { case wartosc_1: break; case wartosc_2: break; case wartosc_n: break; default: break; }
|
|
Pete12234 Temat założony przez niniejszego użytkownika |
» 2014-05-30 18:06:11 No tak... dzięki, tego nie zauważyłem :D Swoją drogą. Dlaczego na samym początku już wyniku pojawiają się jakieś losowe liczby? Kiedy miałem tam nadane typy long, to pojawiało się ich więcej, teraz, kiedy jest int pojawia się mniej, ale ostatnia jest zawsze ta, która była wprowadzona na początku. Co na to można zaradzić? |
|
jarek1402b |
» 2014-05-30 18:12:23 wlasnie przeanalizowalem Twój kod w calosci no i jednak stwierdzilem że masz więcej niedoskonałości w swoim programie :) Po pierwsze po poprawieniu składni nie będzie Ci sie kompilowało ponieważ masz zadeklarowaną 5 razy zmienną wynik :) jeśli chcesz w ten sposób działać musisz każdą zminną inaczej nazwać tj. wynik1 wynik2 itd :) po drugie przy wypisywaniu pokazuje tak -> 486 * 8 = 48 czyli pierwsze 48 to jest cout z funkcji a reszta to ze switch case'ów po co robisz w funkcjach wypisywanie skoro liczysz tam tylko wynik i zwracasz go a wypisywanie i tak robisz w switch'ach ? :) no i dzielenie nie będzie dokładnie działało bo wynik masz jako int :) a jeżeli podzielisz 5:2=2.5 a int nie przechowa Ci liczby zmiennoprzecinkowej 2.5 :) to chyba tyle z uwag :) |
|
Pete12234 Temat założony przez niniejszego użytkownika |
» 2014-05-30 19:38:57 Poprawiłem, działa przepięknie, dzięki za wszystkie uwagi :D |
|
« 1 » |