Kalkulator obiektowy z pamięcią

0

Witam
Miałem za zadanie stworzyć kalkulator obiektowy w C++. Stworzyłem coś takiego:

#include <iostream>
#include <math.h>
#include<cstdlib>
using namespace std;

class kalkulator
{
    float a, b;
    public:

    void wynik()
    {
        cout << "podaj 2 liczby: \n";
        cout << "a = ";
        cin >> a;
        cout << "b = ";
        cin >> b;
    }
    void wynikp()
    {
        cout << "podaj 1 liczbe: ";
        cin >> a;
    }

    float dodawanie()
    {
        return a + b;
    }

    float odejmowanie()
    {
        return a - b;
    }

    float  mnozenie()
    {
        return a * b;
    }

    float dzielenie()
    {
        if (b == 0)
        {
            cout << "!!!!NIE WOLNO DZIELIC PRZEZ ZERO!!!!" <<
                endl;
            return 0;
        }
        else
        {
            return a / b;
        }
    }
    int  modulo()
    {
        if (b == 0)
        {
            cout << "!!!!NIE WOLNO DZIELIC PRZEZ ZERO!!!!" <<
                endl;
            return 0;
        }
        else
        {
            cout << "reszta z dzielenia to ";
            return (int)roundf(a) % (int)roundf(b);
        }
    }
    float pierwiastek()
    {
        if (a < 0){
            cout << "nie mozna pierwiastkowac liczb ujemnych";
        }
        else {
            return sqrt(a);
        }
        
    }
};
    int main()
    {
        int x;
        char wybor;
        kalkulator c;
        cout << "Opcje do wyboru \n" <<
            "1 - dodac\n" <<
            "2 - odjac\n" <<
            "3 - pomnozyc\n" <<
            "4 - podzielic \n" <<
            "5 - podac resztę z dzielenia\n" <<
            "6 - podac pierwiastek kwadratowy\n"<<
            "C - CZYSZCZENIE PROGRAMU\n"<<
            "E - WYJSCIE Z PROGRAMU\n";

        do {
            cout << "Prosze zaznaczyc, co kalkulator ma zrobic z podanymi liczbami: \n";
            cin >> x;
            while (x <= 0 || x > 6)
            {
                cout << "Prosze wpisac poprawne dzialanie \n";
                cin >> x;
            }
            switch (x)
            {
            case 1:
                c.wynik();

                cout << "wynik: " <<
                    c.dodawanie() << endl;
                break;
            case 2:

                c.wynik();
                cout << "wynik: " <<
                    c.odejmowanie() << endl;
                break;
            case 3:
                c.wynik();

                cout << "wynik: " <<
                    c.mnozenie() << endl;
                break;
            case 4:
                c.wynik();

                cout << "wynik: " <<
                    c.dzielenie() << endl;
                break;
            case 5:
                c.wynik();

                cout << "wynik: " <<
                    c.modulo() << endl;
                break;

            case 6:
                c.wynikp();

                cout << "wynik: " <<
                    c.pierwiastek() << endl;
                break;
            default:
                cout << "\n";
            }
            cout << "\nChcesz kontunuowac? \n C - czyszczenie pamieci i kolejne dzialanie \n E - wyjscie \n ";
            cin >> wybor;
            if (wybor == 'E' || wybor == 'e')
            {
                return 0;
            }
        } while (wybor == 'C' || wybor == 'c');
            return 0;
    }
 
        

Problem zaczyna się w momencie, kiedy chcę zacząć dalszą część zadania, czyli:
Utwórz rozszerzenie kalkulatora prostego, tak aby działał w następujący sposób:
a) Można zmienić znak działania zastępując go innym.
b) Można zmienić liczbę w działaniu zastępując ją inną.
c) należy dopisać implementację obsługi pamięci (M+, M- itd. sufixowane działaniem, aby wykonać operację na pamięci (wykonuje się względem aktualnego wyniku)
d) MC - czyszczenie pamięci MR - przywołanie wyniku z pamięci.
Czy byłby ktoś w stanie pomóc w tym zadaniu? Wiem, że należałoby użyć stringów i przetwarzać łańcuch znaków na liczbę, jednak nie zabardzo wiem jak się za to zabrać.

4

Moim zdaniem nie podałeś pełnej specyfikacji zadania.
Na podstawie końcowego opisu, wygląda na to, że program ma udawać stary kalkulator elektorniczny.
W takim kalkulatorze każde naciśnięcie przycisku powodowało jakąś akcję.
Np naciskanie cyfr powoduje dodwanie cyfr do liczby, naciśniecie backspace kasowało ostatnią cyfrę. Naciśnięcie znaku operacji +-*/ zakańczało tworzenie pierwszej liczby i powodowało wyliczanie ostatniej operacji oraz definiowało nową operację do wykonania.
Tymczasem standardowe wejście połączone z konsolą działa całymi liniami co powoduje problem interpretacyjny jak to włąściwie ma działać.
Ergo jest problem nieprzystających do siebie interfaceów użytkownika (UI).

Jeśli mam rację z powyższym, to twój obecny kod z wypisaniem menu zupełnie nie przystaje do takiego zachowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1