Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- int main()
- {
- using namespace std;
- char carattere;
- float tot = 0.f;
- int cur_number = 0;
- float tmp = 1.f;
- int operation_pending = 0;
- int block_begin = 0;
- cout << "Inserire un carattere per volta dell'espressione partendo da un intero positivo:" << endl;
- cin >> carattere;
- while (true)
- {
- if (carattere >= '0' && carattere <= '9')
- {
- cur_number = cur_number * 10 + (carattere - '0');
- }
- else
- {
- switch(carattere) {
- // 17 + 2 +
- // 5(tot) - 4 * 3 * 2 + 3 - 2 =
- case '+':
- if (operation_pending) {
- if (operation_pending == 1)
- tmp *= cur_number;
- else
- tmp /= cur_number;
- if (block_begin == 1)
- tot += tmp;
- else if (block_begin == 2)
- tot -= tmp;
- else
- tot = tmp;
- operation_pending = 0;
- block_begin = 1;
- tmp = 1.f;
- }
- else {
- if (block_begin == 1)
- tot += cur_number;
- else if (block_begin == 2)
- tot -= cur_number;
- else
- tot = cur_number;
- block_begin = 1;
- }
- cur_number = 0;
- break;
- case '-':
- if (operation_pending) {
- if (operation_pending == 1)
- tmp *= cur_number;
- else
- tmp /= cur_number;
- if (block_begin == 1)
- tot += tmp;
- else if (block_begin == 2)
- tot -= tmp;
- else
- tot = tmp;
- operation_pending = 0;
- block_begin = 2;
- tmp = 1.f;
- }
- else {
- if (block_begin == 1)
- tot += cur_number;
- else if (block_begin == 2)
- tot -= cur_number;
- else
- tot = cur_number;
- block_begin = 2;
- }
- cur_number = 0;
- break;
- case '*':
- if (operation_pending == 2)
- tmp /= cur_number;
- else if (operation_pending == 1)
- tmp *= cur_number;
- else
- tmp = cur_number;
- operation_pending = 1;
- cur_number = 0;
- break;
- case '/':
- if (operation_pending == 1)
- tmp *= cur_number;
- else if (operation_pending == 2)
- tmp /= cur_number;
- else
- tmp = cur_number;
- operation_pending = 2;
- cur_number = 0;
- break;
- case '=':
- if (operation_pending) {
- if (operation_pending == 1)
- tmp *= cur_number;
- else
- tmp /= cur_number;
- if (block_begin == 1)
- tot += tmp;
- else if (block_begin == 2)
- tot -= tmp;
- else
- tot = tmp;
- operation_pending = 0;
- block_begin = 2;
- tmp = 1.f;
- }
- else {
- if (block_begin == 1)
- tot += cur_number;
- else if (block_begin == 2)
- tot -= cur_number;
- else
- tot = cur_number;
- }
- cout << tot << endl;
- cin >> carattere;
- return EXIT_SUCCESS;
- }
- }
- cin >> carattere;
- }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement