Вот пример реализации ОПЗ, возможно местами криво. Как из этого сделать бинарное дерево? У меня идея была построить двумерный массив и уже оттуда считать правда трудно получается.
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
//ОПЗ запись с++
int main()
{
setlocale(LC_ALL, "Russian");
int i = 0, s = 0, e = 0, n1 = 0, v = 0, ch, s2 = 0;
char vr[100], stek[100], exit[100];
double stek2[100];
cout << "Введите выражение: \n";
cin >> vr;
for (i = 0; vr[i] != '\0'; i++)
switch (vr[i])
{
case '+':
while ((s != 0) && (stek[s - 1] != '('))
{
exit[e] = stek[s - 1]; //на выход
e++;
s--;
}
stek[s] = '+'; //в стек
s++;
break;
case '-':
while ((s != 0) && (stek[s - 1] != '('))
{
exit[e] = stek[s - 1];
e++;
s--;
}
stek[s] = '-';
s++;
break;
case '*':
while ((s != 0) && (stek[s - 1] != '(') && (stek[s - 1] != '+') && (stek[s - 1] != '-'))
{
exit[e] = stek[s - 1];
e++;
s--;
}
stek[s] = '*';
s++;
break;
case '/':
while ((s != 0) && (stek[s - 1] != '(') && (stek[s - 1] != '+') && (stek[s - 1] != '-'))
{
exit[e] = stek[s - 1];
e++;
s--;
}
stek[s] = '/';
s++;
break;
case '(':
{
stek[s] = '(';
s++;
break; }
case ')':
while ((stek[s - 1] != '(') && (s != 0))
{
exit[e] = stek[s - 1];
e++;
s--;
}
stek[s - 1] = ' ';
s--;
break;
default:
{
exit[e] = vr[i];
e++;
if ((vr[i + 1] == '+') || (vr[i + 1] == '-') || (vr[i + 1] == '*') || (vr[i + 1] == '/') || (vr[i + 1] == '(') || (vr[i + 1] == ')'))
{
exit[e] = ' ';
e++;
}
}
}
exit[e] = ' ';
e++;
while (s != 0)
{
exit[e] = stek[s - 1];
e++;
s--;
}
cout << "ОПЗ ";
for (i = 0; i < e; i++)
{
cout << exit[i];
}
system("pause");
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть код, который расписывает матрицу и считает суммы диагоналей(будет ниже) В коде есть функция которая задаёт размер матрицы с клавиатуры(Матрица...
Ребят, помогите, пожалуйста с реализацией алгоритма cosалгоритм cos Описанный там алгоритм, не могу понять, может сможете объяснить на понятном...