Masmix Temat założony przez niniejszego użytkownika |
Problem z enum-em » 2015-10-27 17:55:10 Witam, jako zadanie domowe mam do zrobienia program : "Napisz prosty kalkulator (dodawanie, odejmowanie, mnożenie, dzielenie) wykorzystując typ wyliczeniowy enum, pętlę for oraz funkcje. Program powinien kończyć się po wciśnięciu znaku `k` " . I tu się zaczyna mój problem o ile z for, z 'k' i z funkcjami sobie poradziłem, to nie widzę sensu ( podobnie jak moi koledzy ) zastosowania enum-a w tym programie. Dlatego proszę o waszą pomoc w "dodaniu", albo nakierowanie mnie gdzie i jak mam dodać enuma do mojego programu, którego niżej zamieszczę. ( W for nie miałem pomysłu, dlatego dałem, żeby dodawał do zbioru i)
Z góry dzięki, Masmix.
#include <iostream> #include <conio.h>
using namespace std;
double menu() { cout << "[1] - Dodawanie " << endl; cout << "[2] - Odejmowanie " << endl; cout << "[3] - Mnozenie " << endl; cout << "[4] - Dzielenie " << endl;
} double dodawanie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << "Wynik dodawania " << a << " i " << b << " to " << a+b << endl; }
double odejmowanie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << " Wynik odejmowania " << a << " i " << b << " to " << a-b << endl; }
double mnozenie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << "Wynik mnozeniea " << a << " i " << b << " to " << a*b << endl; }
double dzielenie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << "Wynik dzielenia " << a << " i " << b << " to " << a/b << endl; }
int main() { cout << " Jaka operacje wybierasz?" << endl ;
int liczba, i; char znak;
for( i=1; znak!='k'; i++ )
{ menu(); cin >> liczba || znak; switch ( liczba ) {
case 1 : dodawanie(); break; case 2 : odejmowanie(); break; case 3 : mnozenie(); break; case 4 : dzielenie(); break; default: break; } znak = getche( );
}
return 0; }
|
|
michal11 |
» 2015-10-27 18:05:59 Zamiast cyfr w switchu dodaj sobie enuma, nie wiem na jakim jesteś poziomie ale ja bym dodał sobie jeszcze mapę która by miała zapisaną informację jaki numer jest przypisany do jakiego działania. enum dzialania { dodawanie, odejmowanie, mnozenie, dzielenie };
map < int, dzialania > przypisania;
przypisania[ 1 ] = dodawanie; przypisania[ 2 ] = odejmowanie; przypisania[ 3 ] = mnozenie; przypisania[ 4 ] = dzielenie;
swich( przypisania[ wczytanaLiczba ] ) { case dodawanie: ... }
Dzięki temu możesz w łatwy sposób sobie zmieniać pod którym numerem masz jakie działanie, zmieniasz przypisanie tylko w jednym miejscu i jest to rozwiązanie dość uniwersalne. Dodatkowo nie sprawdzasz przy dzieleniu czy liczba przez którą dzielisz nie jest zerem. Zamiast pętli |
|
carlosmay |
» 2015-10-27 18:08:52 Enum'a możesz użyć jako opcje menu(). enum { DODAWANIE, ODEJMOWANIE, MNOZENIE, DZIELENIE }; cin >> opcja; if( opcja == DODAWANIE )
|
|
Masmix Temat założony przez niniejszego użytkownika |
» 2015-10-27 18:24:01 Z enumem nie czuję się za bardzo na siłach, czy moglibyście pokazać jakby wyglądał cały program? Tak najlepiej się uczę. P.S michal11 jak pytałeś o mój poziom zaawansowania, to Ci odpowiem, że dzisiaj miałem swoje 4 zajęcia i nie mam pojecia co to jest mapa. |
|
carlosmay |
» 2015-10-27 18:42:58 enum { DODAWANIE = 1, ODEJMOWANIE, MNOZENIE, DZIELENIE }; cin >> opcja; if( opcja == DODAWANIE )
Tak zdefiniowany numeruje elementy składowe od jeden w górę. Każda nazwa jest aliasem dla liczby całkowitej. W kodzie dla poprawienia czytelności zamiast gołych liczb np. if( opcja == DODAWANIE )
switch( opcja ) { case DODAWANIE:
|
|
Masmix Temat założony przez niniejszego użytkownika |
» 2015-10-27 19:12:28 Czyli chodziło tylko o to żeby zamiast case 1 napisać case DODAWANIE, co jest równoważne ?( Czuję się teraz trochę głupi z tego powodu :) ) Program teraz wygląda tak jak poniżej, jeżeli nie macie żadnych porad bądź zastrzeżeń to bardzo dziękuję za pomoc. #include <iostream> #include <conio.h>
using namespace std; enum { DODAWANIE=1, ODEJMOWANIE, MNOZENIE, DZIELENIE};
double menu() { cout << "[1] - Dodawanie " << endl; cout << "[2] - Odejmowanie " << endl; cout << "[3] - Mnozenie " << endl; cout << "[4] - Dzielenie " << endl;
return 0; }
double dodawanie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << "Wynik dodawania " << a << " i " << b << " to " << a+b << endl;
return a+b; }
double odejmowanie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << " Wynik odejmowania " << a << " i " << b << " to " << a-b << endl; return a-b; }
double mnozenie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << "Wynik mnozeniea " << a << " i " << b << " to " << a*b << endl; return a*b; }
double dzielenie() { double a,b; cout << "Podaj pierwsza liczbe" << endl; cin >> a; cout << "Podaj druga liczbe" << endl; cin >> b; cout << "Wynik dzielenia " << a << " i " << b << " to " << a/b << endl; return a/b; }
int main() { cout << " Jaka operacje wybierasz?" << endl ;
int liczba, i; char znak;
for( i=1; znak!='k'; i++ )
{ menu(); cin >> liczba || znak; switch ( liczba ) {
case DODAWANIE : dodawanie(); break; case ODEJMOWANIE : odejmowanie(); break; case MNOZENIE : mnozenie(); break; case DZIELENIE : dzielenie(); break; default: break; } znak = getche( );
}
return 0; }
|
|
carlosmay |
» 2015-10-27 19:58:03 Program można skrócić do jednej funkcji wykonującej obliczenia. case DODAWANIE: obliczenia( '+' ); return;
void obliczenia( char znak ) { if( znak == '+' ) else if( znak == '-' )
Jeśli nie używasz zwracanej wartości z funkcji używaj funkcji typu void. |
|
« 1 » |