Help with parenthesis in calculator

Hi,
I need help, first does the code i've written look ok and second how du I write it so the calculator can understand parenthesis ex. (3+4*5)/(7*4).
The program is written in swedish, I hope you can help me anyway.

Source code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <iomanip>
#include <iostream>
#include <cmath>
using namespace std;

double sin(double x);
double cos(double x);
double sqrt(double x);
double exp(double x);
double log(double x);
double log10(double x);
double tan(double x);
double asin(double x);
double acos(double x);
double atan(double x);
double pow(double x, double y);

int main()
{
	double summa = 0;
	double x, y;
	char test = 'r';
	char op;
	while (test == 'c' || test == 'r')
	{
		if (test == 'r')
		{
			summa = 0;
			cout << "___________________________________________________________________" <<endl;
			cout << "R\x84knes\x84tt som kan anv\x84ndas \x84r: Addition '+', subtraktion '-'," << endl;
			cout << "multiplikation '*', division '/', sinus 's', cosinus 'c', roten ur 'v'" << endl;
			cout << "tangens 't', upph\x94jt till '^', log 'l', log10 'a', arcsinus 'q'" << endl;
			cout << "arc-cosinus 'p', arctangens 'm'." << endl;
			cout << endl << "Du m\x86ste addera, subtrahera, multiplicera eller dividera tv\x86 tal" <<endl;
			cout << "innan du kan anv\x84nda sinus m.m." << endl;
			cout << "\nSkriv in det uttryck du vill r\x84kna ut och avsluta med tv\x86 punkter.\n";
		}	
		if (test == 'c')
		{
			cout << "Skriv in ett uttryck som du vill l\x84gga till ditt f\x94rra\n";
			cout << "Ditt f\x94rra uttryck hade v\x84rdet : " << summa << endl;
		}

		cin >> x;
		cin >> op;
		cin >> y;

		if (op == '+')
		{
			summa = (summa+x+y);
		}
		if (op == '-')
		{
			summa = (summa+x-y);
		}
		if (op == '*')
		{
			summa = (summa+x*y);
		}
		if (op == '/')
		{
			summa = (summa+x/y);
		}
		if (op == 's')
		{
			double summa = sin(x);
		}
		if (op == 'c')
		{
			double summa = cos(x);
		}
		if (op == 'v')
		{
			double summa = sqrt(x);
		}
		if (op == 't')
		{
			double summa = tan(x);
		}
		if (op == '^')
		{
			double summa = pow(x, y);
		}
		if (op == 'l')
		{
			double summa = log(x);
		}
		if (op == 'a')
		{
			double summa = log10(x);
		}
		if (op == 'q')
		{
			double summa = asin(x);
		}
		if (op == 'p')
		{
			double summa = acos(x);
		}
		if (op == 'm')
		{
			double summa = atan(x);
		}

		

		while (op != '.')
		{
			cin >> op;
			if (op == '.') break;
			cin >> y;
			if (op == '+')
			{
				summa = (summa+y);
			}
			if (op == '-')
			{
				summa = (summa-y);
			}
			if (op == '*')
			{
				summa = (summa*y);
			}
			if (op == '/')
			{
				summa = (summa/y);
			}
			if (op == 's')
			{
				summa = (summa+sin(y));
			}
			if (op == 'c')
			{
				summa = (summa+cos(y));
			}
			if (op == 'v')
			{
				summa = (summa+sqrt(y));
			}
			if (op == 't')
			{
				summa = (summa+tan(y));
			}
			if (op == '^')
			{
				summa = (summa+pow(x, y));
			}
			if (op == 'l')
			{
				summa = (summa+log(y));
			}
			if (op == 'a')
			{
				summa = (summa+log10(y));
			}
			if (op == 'q')
			{
				summa = (summa+asin(y));
			}
			if (op == 'p')
			{
				summa = (summa+acos(y));
			}
			if (op == 'm')
			{
				summa = (summa+atan(y));
			}
		
		}

		cout << "Resultatet av din utr\x84kning \x84r: \n:" << summa << endl;
		cout << "Skriv in c f\x94r att forts\x84tta att r\x84kna vidare p\x86 ditt gamla resultat\n";
		cout << "Skriv in r f\x94r att b\x94rja om och r\x84kna fr\x86n 0\n";
		cout << "Skriv in e f\x94r att avsluta programmet\n";
		cin >> test;
		if (test == 'e')
		{
			break;
		}
	}
	system("pause");
	return 0;
}


Thanks for your help
Last edited on
You don`t need parentheses round 7*4. If you had 7*3-1 you would get 20 because * has a higher precedence than -. I think i`m missing your question.
I mean if I want to calculate the whole expression (3+4*5)/(7*4) so I get the answer 0,8214.
Hi C++ already gives higher precedence to expressions using parentheses like that
Doubts? try it your self:

1
2
3
4
5
6
int main()
{
	cout << (double)(3+4*5)/(7*4) << endl;
	return 0;
}


In order to make your calculator accept parenthesis you might wanna change your variables to strings and do some conversions.
The std lib can help you with the conversion handling:
http://www.cplusplus.com/reference/clibrary/cstdlib/

Jeff
Last edited on
Topic archived. No new replies allowed.