Prosty kalkulator

0

Witam jestem nowy i chce zrobić kalkulator z użyciem char. Ma wygladac nastepujaco zapoznawszy sie z menu :) naciskamy znak (+ - * /) po czym podajemy dwie liczby obliczajace sie podanym przez nas znakiem. ale nie mam ponoc srednika O.o prosze o pomoc :) ( z uwagi ze jestem dosyc zielony nie chce jakis skomplikowanych kodow )

// Arithmetic - proste działania matematyczne 
 
#include <iostream> 
#include <conio.h> 
 


using namespace std; void main()
{

char znak;

cout << "+ Dodawanie \n";

cout << "- Odejmowanie \n";

cout << "* Mnozenie \n";

cout << "/ Dzielenie \n\n";

cout << "Wybierasz: ";
cin>> znak;

int nLiczba1; 
cout << "Podaj pierwsza liczbe: "; 
cin >> nLiczba1; 

int nLiczba2;
cout << "Podaj druga liczbe: ";  
cin >> nLiczba2; 

int nWynik = nLiczba1 znak nLiczba2; 
std::cout << nLiczba1 << znak  << nLiczba2 <<  znak  << nWynik; 


 
getch(); 
}
2
int nWynik = nLiczba1 znak nLiczba2;

Tak nie można.

1
#include <iostream> 
using namespace std; 

int main()
  {
   char op;
   double a,b,c;
   cout
      <<"Dozwolone operacje"<<endl
      <<"\t+ Dodawanie"<<endl
      <<"\t- Odejmowanie"<<endl
      <<"\t* Mnozenie"<<endl
      <<"\t/ Dzielenie"<<endl
      <<endl
      <<"Wpisz wyrazenie (np 2*3): "
     ;
   if(cin>>a>>op>>b)
     {
      if(op=='+') c=a+b;
      else if(op=='-') c=a-b;
      else if(op=='*') c=a*b;
      else if(op!='/') op='.';
      else if(b) c=a/b;
      else op=0;
      if(!op)  cout<<"Cholera, nie dziel przez zero."<<endl;
      else if(op=='.') cout<<"Nieznana operacja"<<endl;
      else cout<<a<<' '<<op<<' '<<b<<" = "<<c<<endl;
     }
   else
     {
      cin.clear();
      cout<<"Niepoprawne wyrazenie"<<endl;
     }
   cin.sync();
   cin.get();
   return 0;
  }
3

Miało być prosto więc proszę:

 #include <iostream>
#include <conio.h>



using namespace std;
int main()
{

char znak;

cout << "+ Dodawanie \n";

cout << "- Odejmowanie \n";

cout << "* Mnozenie \n";

cout << "/ Dzielenie \n\n";

cout << "Wybierasz: ";
cin>> znak;

int nLiczba1;
cout << "Podaj pierwsza liczbe: ";
cin >> nLiczba1;

int nLiczba2;
cout << "Podaj druga liczbe: ";
cin >> nLiczba2;

if(znak=='+') cout<<"Wynik: "<<nLiczba1+nLiczba2;
else if(znak=='-') cout<<"Wynik: "<<nLiczba1-nLiczba2;
else if(znak=='*') cout<<"Wynik: "<<nLiczba1*nLiczba2;
else if(znak=='/') cout<<"Wynik: "<<nLiczba1/nLiczba2;



getch();
return 0;
}

Nie ingerowałem w resztę programu, jest jaka jest. Zamiast wielokrotnego else if można użyć switch, ale to już może być dla kogoś trudniejsze, a miało być prosto :P.

1

Lepiej i chyba nawet bardziej zrozumiale byłoby to zrobić z pomocą switch'a, ale jak to zrobić to chyba @mekrin sam się dowie, bo szukać gotowce potrafi ( http://delphi_kpiwo.ovh.org/KursCpp/cppkurs2,5.htm ). Pozmieniał coś "na pałę", ale komentarz w kodzie się ostał :) Za to -1.

Podpowiem tylko:

 
char zmienna;
cin >> zmienna;
switch(zmienna)
{
	case '1':
	{
		//to się wykona po wybraniu opcji 1,
		//podobnie w pozostałych przypadkach

		break;
	}
	case '2':
	{
		break;
	}
	case '3':
	{
		break;
	}
	default:
	{
		//gdy np. wybierzesz opcję 7,
		//która nie jest obsługiwana
		
		break;
	}
}
3

Lepiej i chyba nawet bardziej zrozumiale byłoby to zrobić z pomocą tablicy struktur:

double add(double a,double b) { return a+b; }
double sub(double a,double b) { return a-b; }
double mul(double a,double b) { return a*b; }
double div(double a,double b) { return a*b; }
typedef double OpFun(double a,double b);
const struct { char op; OpFun *fun; } Tb[]={ {'+',add},{'-',sub},{'*',mul},{'/',div}, };
const unsigned TbSize=sizeof(Tb)/sizeof(*Tb);
0

dzieki wielkie :D hawk zrobil dokladnie to o co mi chodzilo ale reszta tez mi sie przyda tylko musze to obczaic bo bez wyjasnienia (thx za komenty do kodu kolega wyzej :D ) nie skumam bo zem swiezak
aa i tam wole float bo w dzieleniu sie przydaje

0

Chodzi tu o to żeby jak zechcesz rozwijać ten program (np dodać ^ jako potęgi) to trzeba dopisać tylko jeden wiersz:

{'^',pow,"Potegowanie"}, 

no i dołączyć <cmath> i więcej żadnych zmian w kodzie.

#include <iostream> 
using namespace std; 

double add(double a,double b) { return a+b; }
double sub(double a,double b) { return a-b; }
double mul(double a,double b) { return a*b; }
double div(double a,double b) { return a/b; }
typedef double OpFun(double a,double b);
const struct { char op; OpFun *fun; char *info; }
   Tb[]=
    {
     {'+',add,"Dodawanie"},
     {'-',sub,"Odejmowanie"},
     {'*',mul,"Mnozenie"},
     {'/',div,"Dzielenie"}, 
    };
const unsigned TbSize=sizeof(Tb)/sizeof(*Tb);

int main()
  {
   while(true)
     {
      cout<<"Dozwolone operacje"<<endl;
      for(unsigned i=0;i<TbSize;++i) cout<<'\t'<<Tb[i].op<<' '<<Tb[i].info<<endl;
      cout<<endl<<"Wpisz wyrazenie (np 2*3): ";
      char op;
      double a,b;
      if(cin>>a>>op>>b)
        {
         unsigned i;
         for(i=0;i<TbSize;++i) if(Tb[i].op==op) break;
         if(i<TbSize) cout<<a<<' '<<op<<' '<<b<<" = "<<Tb[i].fun(a,b)<<endl;
         else cout<<"Nieznana operacja"<<endl;
        }
      else
        {
         cin.clear();
         cout<<"Niepoprawne wyrazenie"<<endl;
        }
      cout<<endl;
     }
   return 0;
  }
0

kurcze tyle ze jestem raczej swiezakiem wiec musialbym miec szczegolowe objasnienie kodu zeby to przeanalizowac i sie dobrze nauczyc : o

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