Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kalkulator- nieograniczona liczba dzialan

Ostatnio zmodyfikowano 2013-10-29 18:48
Autor Wiadomość
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.

C/C++
#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();
   
}
P-94790
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.
P-94791
matiko101
Temat założony przez niniejszego użytkownika
» 2013-10-29 18:40:01
Zrobione :)
P-94792
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:

Frazy, które należy wpisać w wyszukiwarkę google:
[C++] Tworzenie parsera matematycznego
http://pl.wikipedia.org/wiki​/Odwrotna_notacja_polska

Lub 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.
C/C++
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:
C/C++
void pobierz_dzialanie() {
    cout << "Podaj dzialanie\n\n";
    cin >> a;
    cin >> b;
    ?
}

? policz( ? ) {
    if( ? ) {
        return ?;
    } else if( ? ) {
        return ?;
    }
    ...?
}
P-94793
« 1 »
  Strona 1 z 1