Kalkulator- nieograniczona liczba dzialan
Ostatnio zmodyfikowano 2013-10-29 18:48
matiko101 Temat założony przez niniejszego użytkownika |
Kalkulator- nieograniczona liczba dzialan » 2013-10-29 18:25:57 Witam, Od tygodnia, może mniej interesuje się pisaniem programów.Przeczytałem prawie cały kurs i napisałem taki oto kalkulator: Problem leży w tym co zrobić, aby liczył dowolne działania np. 1+6/2*4*542*5*2*-1-435-64=... bez określonego limitu itd. Moglibyście tez powiedzieć mi czy coś mogę zrobić inaczej w tym aktualnym kalkulatorze i co zrobiłem źle. #include <conio.h> #include <cstdlib> #include <iostream> using namespace std;
int wybor_menu; double a, b; void menu()
{ cout << "<::::::::::::::::::::::::::::::::::KALKULATOR::::::::::::::::::::::::::::::::::>"; cout << "\n\nJesli chcesz dodawanie kliknij [1]\n\nJesli chcesz odejmowanie kliknij [2]\n\nJesli chcesz mnozenie kliknij [3]\n\nJesli chcesz dzielenie kliknij [4]\n\nJesli chcesz potegowanie kliknij [5]\n\nJesli chcesz wyjsc z programu kliknij [0]\n\n"; }
void dodawanie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a + b << "\n"; } void odejmowanie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a - b << "\n"; } void mnozenie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a * b << "\n"; } void dzielenie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a / b << "\n"; } void potegowanie() { cout << "Podaj dzialanie\n\n"; cin >> a; cout << "Twoj wynik to: " << a * a << "\n"; } void wyjscie() { }
int main()
{ do { menu(); int wybor; cin >> wybor; switch( wybor ) { case 1: dodawanie(); cout << "\nJesli chcesz powrocic do menu kliknij [0]\n"; cin >> a; break; case 2: odejmowanie(); cout << "\nJesli chcesz powrocic do menu kliknij [0]\n"; cin >> a; break; case 3: mnozenie(); cout << "\nJesli chcesz powrocic do menu kliknij [0]\n"; cin >> a; break; case 4: dzielenie(); cout << "\nJesli chcesz powrocic do menu kliknij [0]\n"; cin >> a; break; case 5: potegowanie(); cout << "\nJesli chcesz powrocic do menu kliknij [0]\n"; cin >> a; break; case 6: wyjscie(); break; } } while( a == 0 ); getch(); }
|
|
akwes |
» 2013-10-29 18:29:08 Popraw temat i formatowanie kodu zgodnie z zasadami, które możesz poznać czytając link w czerwonej ramce pod Twoim postem. |
|
matiko101 Temat założony przez niniejszego użytkownika |
» 2013-10-29 18:40:01 Zrobione :) |
|
akwes |
» 2013-10-29 18:48:24 Problem leży w tym co zrobić, aby liczył dowolne działania np. 1+6/2*4*542*5*2*-1-435-64=... bez określonego limitu
|
Bez limitu się nie da :) Zawsze będzie albo limit softwarowy (np. założysz sobie 1000 operacji) albo hardwarowy czyli po prostu braknie pamięci w komputerze. Możliwości implementacji tego jest wiele. Jeżeli zależy Ci na skalowalnym rozwiązaniu (czyli takim gdzie łatwo dodać kolejną opcję) to poczytaj o: [C++] Tworzenie parsera matematycznegohttp://pl.wikipedia.org/wiki/Odwrotna_notacja_polskaLub zrób to na piechotę jeżeli chcesz obsługiwać tylko 4 rodzaje działań (dodawanie i odejmowanie oraz mnożenie i dzielenie). Zawsze możesz sobie wczytać całe wyrażenie jako std::string (można sprawdzić, czy działanie jest poprawne i jest w postaci: liczba operator liczba operator liczba operator liczba). Następnie kolejno wykonać dzielenia oraz mnożenia zastępując elementy "liczba * liczba" oraz "liczba / liczba" ich wynikami i potem drugi raz przeszukać std::string wykonując kolejno dodawania i odejmowania. Druga metoda jest kiepska i wolna, ale wielu ludzi słowa "praser matematyczny" czy "odwrotna notacja polska" przerażają. Z całego serca polecam skorzystać z "lepszego" rozwiązania. Da to więcej satysfakcji i więcej nauczy. // Edit, możesz też trochę pomyśleć nad aktualnym kodem i go skrócić. Akcje, które się powtarzają w kodzie, można spróbować pogrupować, podzielić i zrobić tak, aby się nie powtarzały. void dodawanie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a + b << "\n"; } void odejmowanie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a - b << "\n"; } void mnozenie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a * b << "\n"; } void dzielenie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; cout << "Twoj wynik to: " << a / b << "\n"; }
A może: void pobierz_dzialanie() { cout << "Podaj dzialanie\n\n"; cin >> a; cin >> b; ? }
? policz( ? ) { if( ? ) { return ?; } else if( ? ) { return ?; } ...? }
|
|
« 1 » |