Kalkulator ONP

0

Witam

Muszę na jutro napisąć program kalkulator do szkoły. Próbuje napisać z ONP ale w ogóle mi nie wychodzi. Jestem początkującym programistą mógłby mi ktoś wyjaśnic jak to napisa patrzyłem na algorytmy ale nie moge tego wykminic. w załączniku jest plik w visual studio 2008 i część kodu który działa teraz potrzebuje tej częsci z ONP napisałem ale wydają mi się to straszne niechlujne. Mógłby ktoś pomóc byłbym strasznie wdzięczny.

Pozdrawiam Jacek

klasa działania jej deklaracja

#pragma once

class działania
{
public:
działania(void);
~działania(void);
double dodawanie();
double roznica();
double iloczyn();
double dzielenie();
double pierwiastek();
double potega();
double sinus();
double cosinus();
double tanges();
double cotanges();
double ONP();

};

Klasa działania jej deklaracja

#include "działania.h"
#include <iostream>
#include <math.h>

using namespace std;

działania::działania(void)
{
}

działania::~działania(void)
{
}

double działania::dodawanie()
{
double c,a,b;
cout<<"Podaj wartosc skladnika"<<endl;
cin>>a;
cout<<"Podaj wartosc skladnika"<<endl;
cin>>b;
c=a+b;
return c;
}

double działania::roznica()
{
double c,a,b;
cout<<"Podaj wartosc Odejmnej"<<endl;
cin>>a;
cout<<"Podaj wartosc Odejmowanej"<<endl;
cin>>b;
c=a-b;
return c;
}

double działania::iloczyn()
{
double c,a,b;
cout<<"Podaj wartosc czynnika"<<endl;
cin>>a;
cout<<"Podaj wartosc czynnika"<<endl;
cin>>b;
c=ab;
return c;
}
double działania::dzielenie()
{
double c,a,b;
cout<<"Podaj wartośc dzielonej"<<endl;
cin>>a;
cout<<"Podaj wartość dzielnej"<<endl;
cin>>b;
c=a/b;
return c;
}
double działania::pierwiastek()
{
double c,a;
cout<<"Podaj liczbe do spierwiastkowania"<<endl;
cin>>a;
c=sqrt(a);
return c;
}
double działania::potega()
{
double c,a;
cout<<"Podaj liczbe do spotegowania"<<endl;
cin>>a;
c=a
a;
return c;
}
double działania::sinus()
{
double a,c;
cout<<"Podaj wartośc kata w stopniach"<<endl;
cin>>a;
a=a3.1415;
c=a/180;
c=sin(c);
return c;
}
double działania::cosinus()
{
double a,c;
cout<<"Podaj wartosc kata w stopniach "<<endl;
cin>>a;
a=a
3.1415;
c=a/180;
c=cos(c);
return c;
}double działania::tanges()
{
double a,b,c,d;
cout<<"Podaje wartosc kata w stopniach"<<endl;
cin>>a;
a=a*3.1415;
a=a/180;
d=sin(a);
b=cos(a);
c=d/b;
return c;

}
double działania::cotanges()
{
double a,b,c,d;
cout<<"Podaje wartosc kata w stopniach"<<endl;
cin>>a;
a=a*3.1415;
a=a/180;
d=sin(a);
b=cos(a);
c=b/d;
return c;
}

#include<iostream>
#include "działania.h"
#include<conio.h>
using namespace std;

void main()
{
int a,m=1,r=1,d,t,p=1;
double c;
działania b;

while(m==1)
{
	cout<<"\t\tKalkulator"<<endl;
	cout<<"\t1.Podstawowe operacje matematyczne"<<endl;
	cout<<"\t2.Operacje trygonometryczne"<<endl;
	cout<<"\t0.Zakoncz"<<endl;
	cout<<"\t3.Operacje z użyciem odwrotenej notacji polskiej"<<endl<<endl;
	cout<<"\tCo chcesz wykonac?"<<endl;

	cin>>a;
	if(a==0)
	{
	
		{
			m=0;
		}
		break;
	}

	if(a==1)
	{
		while(r==1)
		{
				cout<<"\t|0.Wyjscie"<<endl;
				cout<<"\t|1.Dodawanie"<<endl;
				cout<<"\t|2.odejmowanie"<<endl;
				cout<<"\t|3.mnozenie"<<endl;
				cout<<"\t|4.Dzielenie"<<endl;
				cout<<"\t|5.Pierwiastkowanie"<<endl;
				cout<<"\t|6.Potega"<<endl<<endl;
				cout<<"\tCo chcesz wykonac ??"<<endl;
				cin>>d;
				switch (d)
				{
					case 0:
						{
							r=0;
						}
						break;
					case 1:
						c=b.dodawanie();
						cout<<"wynik operacji:  "<<c<<endl;
						break;
					case 2:
						c=b.roznica();
						cout<<"wynik operacji:  "<<c<<endl;
						break;
					case 3:
						c=b.iloczyn();
						cout<<"wynik operacji:  "<<c<<endl;
						break;
					case 4:
						c=b.dzielenie();
						cout<<"wynik operacji:  "<<c<<endl;
						break;
					case 5:
						c=b.pierwiastek();
						cout<<"wynik operacji:  "<<c<<endl;
						break;
					case 6:
						c=b.potega();
						cout<<"wynik operacji:  "<<c<<endl;
				}
		}
	}
		
	if(a==2)
	{
		while (p==1)
			{
				cout<<"\t|0.Wyjscie"<<endl;
				cout<<"\t|1.Sinus"<<endl;
				cout<<"\t|2.Cosinus"<<endl;
				cout<<"\t|3.Tanges"<<endl;
				cout<<"\t|4.Cotanges"<<endl;
				cout<<"\tCo chcesz wykonac ??"<<endl;
				cin>>t;
				switch(t)
				{
				case 0:
					{
					p=0;
					}
					break;
				

				case 1:
					c=b.sinus();
					cout<<"wynik operacji:  "<<c<<endl;
				case 2:
					c=b.cosinus();
					cout<<"wynik operacji:  "<<c<<endl;
				case 3:
					c=b.tanges();
					cout<<"wynik operacji:  "<<c<<endl;
				case 4:
					c=b.cotanges();
					cout<<"wynik operacji:  "<<c<<endl;
				}
			}
		}
	

	else
	{
		cout<<"Wybierz jeszcze raz (Nie podano cyfry przypisanej do operacji)"<<endl<<endl;
	}


}
}
0

To co napisałeś nie ma nic wspólnego z ONP.
Powinieneś zrobić tak:

  1. wczytujesz całe równanie od użytkownika (np: 2+4*sin(5) )
  2. przekształcasz równanie do ONP (algorytm bardzo fajnie opisany: http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska )
  3. z postaci ONP obliczasz wynik
  4. wyświetlasz wynik

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