kalkulator - Optymalizacja

0

Witam, napisalem "na kolanie" prosty kalkulator ( w ramach takiej małej powtórki).

http://wklej.org/id/1973533/

Chciałbym ,żeby funkcja np. Dodawanie była "idiotoodporna". Nie przerabiałem jeszcze (Bool - True/False). W klasycznym C użyłbym tutaj " %d...", chodzi mianowicie o to ,żeby użytkownik nie mógł wpisać niczego oprócz Liczb, jaka koncepcje tutaj najlepiej waszym zdaniem zastosowac?
Mój "
switch(liczba) **" bardziej elegancko będzie zaimplementować jako funkcje ( Void ?) i poprotu wywołać ją w odpowiednim miejscu w Main() ?
*Czy widzicie tutaj jakieś rażące błędy w kodzie/kolejnosci...etc ?
*Opcjonalnie- :D Jeżeli macie jakieś fajne zadania o podobnym stopniu ""zaawansowania"" to jestem otwarty na propozycje

1

http://4programmers.net/Forum/1214208

funkcja potega(liczba podstawa, liczba wykladnik) zwraca(liczbe)
  liczba ile_razy = wykladnik;
  liczba akumulator = podstawa;
  dopoki ile_razy --> 1 rob
      akumulator *= podstawa;
  wystarczy;
 
  zwroc akumulator;
wystarczy;
 
alias_funkcji(potega, potege);
 
 
program("N-ty kalkulatorek na forum") to
  staly slownik<znakow i akcji> slownik_akcji zawiera
    pare('+' i [](liczba a oraz 
                  liczba b){ zwroc a + b; }),
    pare('-' i [](liczba a oraz
                  liczba b){ zwroc a - b; }),
    pare('^' i [](liczba a oraz
                  liczba b){ zwroc potege(a, b); })
  wystarczy;
 
  liczba a, b;
  znak decyzja;
 
  wypisz << "podaj [a] [znak] [b]: " << koniec_linii;
  pobierz >> a >> decyzja >> b;
 
  liczba wynik = wartosc_slownika(slownik_akcji, decyzja)(a, b);
 
  wypisz << a << " " << decyzja << " " << b << " = " << wynik << koniec_linii;
wystarczy;

Jeśli chcesz, możesz do tego dorzucić menu: http://4programmers.net/Forum/C_i_C++/256774-menu_w_programie_konsolowym_tablica_string_czy_zmienna_z_ifami_co_lepsze?p=1170628#id1170628

http://4programmers.net/Forum/Newbie/174071-kalklulator_konsolowy_-_ocena_kodu_i_wskazowki?p=1088658#id1088658

#include <iostream>
#include <string>
#include <map>
#include <functional>
using namespace std;
 
double add(double a, double b){
    return a+b;
}
double subtract(double a, double b){
    return a-b;
}
double multiply(double a, double b){
    return a*b;
}
double divide(double a, double b){
    return a/b;
}
 
int main() {
    map<string, function<double(double, double)>> functions = {
        {"+", add},
        {"-", subtract},
        {"*", multiply},
        {"/", divide}
    };
    string inFuncName;
    double a, b;
    while(cin>>a>>inFuncName>>b)
        cout << a << inFuncName << b 
        << " = " << functions[inFuncName](a, b) << endl;
    return 0;
}
#include <iostream>
#include <string>
#include <map>
#include <functional>
using namespace std;
 
int main() {
    map<string, function<double(double, double)>> functions = {
        {"+", [](double a, double b){return a+b;}},
        {"-", [](double a, double b){return a-b;}},
        {"*", [](double a, double b){return a*b;}},
        {"/", [](double a, double b){return a/b;}}
    };
    string inFuncName;
    double a, b;
    while(cin>>a>>inFuncName>>b)
        cout << a << inFuncName << b 
        << " = " << functions[inFuncName](a, b) << endl;
    return 0;
}

Kalkulator w petli

3
  • Zabezpieczenie przed wpisywaniem liter
  • tak, main powinien miec jak najmniej instrukcji
  • tak widze razace bledy, to sie nie kompiluje i jest za bardzo "rozpisane" (w sensie funkcja dodawanie wczytuje i wyswietla...). lamiesz zasade DRY

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