int _tmain() { privetstvie(); int mass[9] = { 0 }; int mass2[9] = { 0 }; int deistvie = 0; for (;;){ for (int i = 0; i < 9; i++){ mass [i]= init(); if (mass [i]== 43 || mass [i]== 42 || mass [i]== 47 || mass [i]== 45 || mass [i]== 94 || mass [i]== 32){ deistvie = mass[i]; break; } }
if (deistvie == 32){ exit(0); }
int ch1 = chislo(mass);
printf("%c", deistvie); for (int i = 0; i < 9; i++){ mass2 [i]= init2(); if (mass2 [i]== 61){ break; } } int ch2 = chislo(mass2); cout << "="; int sum = summa(ch1, ch2); int minus = raznitsa(ch1, ch2); int ymnozh = ymnozhenie(ch1, ch2); int stepen2 = stepen(ch1, ch2); float delen = delenie(ch1, ch2); switch (deistvie) { case 43: print2(sum); break; case 45: print2(minus); break; case 47: if (delen != 0) print2(delen); if (delen == 0) cout << "Error! 2-e chislo = 0." << endl; break; case 42: print2(ymnozh); break; case 94: print2(stepen2); break; default: error(); break; } } return 0; }
int init(){ //первая группа числ int a = 0; int key = _gettch(); if (key == 27){ a = 0; } else if (key == 43 || key == 42 || key == 47 || key == 45 || key == 94 || key == 32){ //проверка на нажатие клавиш действия a = key; } else if (key == 48 || key == 49 || key == 50 || key == 51 || key == 52 //проверка на нажатие клавиш с цифрами || key == 53 || key == 54 || key == 55 || key == 56 || key == 57){ a = key; int b = a - 48; cout << b; } return a; } int init2(){ //вторая группа числ int a = 0; int key = _gettch(); if (key == 61){ //проверка на нажатие = a = key; } else if (key == 48 || key == 49 || key == 50 || key == 51 || key == 52 //проверка на нажатие клавиш с цифрами || key == 53 || key == 54 || key == 55 || key == 56 || key == 57){ a = key; int b = a - 48; cout << b; } return a; } int chislo(int mass[9]) { int mass1[9] = {0}; int chislo = 0; int k = 0; //счетчик положения арифметической операции int i = 0; for (i = 0; i < 9; i++){ //преобразование аски значений в числа if (mass [i]== 48 || mass [i]== 49 || mass [i]== 50 || mass [i]== 51 || mass [i]== 52 || mass [i]== 53 || mass [i]== 54 || mass [i]== 55 || mass [i]== 56 || mass [i]== 57) { mass [i]= mass [i]- 48;
}
}
for (int j = 0; j < 9; j++){ //определение положения арифметической операции if (mass[j]>9){ break; } else{ k++; }
} for (int j = 0; j < k; j++){ //присвоение значения значения оригинального массива временному mass1 [j]= mass[j]; }
int summa(int a, int b){ return a + b; } int raznitsa(int a, int b){ return a - b; } int ymnozhenie(int a, int b){ return a*b; } int stepen(int a, int b){ int st = 1; if (a == 1 || b == 0){ st = 1; } else{ for (int i = 1; i <= b; i++){ st = st*a; } } return st; } float delenie(int c, int d){ if (d != 0) { return (float) c / d; } else{ return 0; } }
Вариант со string. Работает только с положительными числами и без комментариев. Буду доделывать и обновлять тут.
Код
#include "stdafx.h" #include <iostream> #include <windows.h> #include <tchar.h> #include <string> #include <stdlib.h> using namespace std; int glob=0; int chislo() {
int temp; int a = 0; string b; while (true) { a = _gettche(); if (a == 32) { break;
} if (a == 42 || a == 43 || a == 45 || a == 47 || a == 94) { glob = a; break; } if (a == 61) { break; } int c = a - 48; string d = to_string(c); b = b + d;
} temp = stoi(b); return temp; } int sum(int A, int <img src="http://s27.ucoz.net/sm/24/cool.gif" border="0" align="absmiddle" alt="cool" /> { return A + B; } int minoos(int A, int <img src="http://s27.ucoz.net/sm/24/cool.gif" border="0" align="absmiddle" alt="cool" /> { return A - B; } int mult(int A, int <img src="http://s27.ucoz.net/sm/24/cool.gif" border="0" align="absmiddle" alt="cool" /> { return A*B; } float divis(int A, int <img src="http://s27.ucoz.net/sm/24/cool.gif" border="0" align="absmiddle" alt="cool" /> { float res = (float)A / B; return res; } int step(int A, int <img src="http://s27.ucoz.net/sm/24/cool.gif" border="0" align="absmiddle" alt="cool" /> {
return pow(A, B); } int main() { while (true) { int a = chislo(); int b = chislo(); switch (glob) { case 43: cout << sum(a, b) << endl; break; case 45: cout << minoos(a, b) << endl; break; case 42: cout << mult(a, b) << endl; break; case 47: cout << divis(a, b) << endl; break; case 94: cout << step(a, b) << endl; break; default: break; } } system("pause"); return 0; }