Cod sursa(job #2843250)

Utilizator RalucaioneteRalucaIonete Ralucaionete Data 2 februarie 2022 11:20:56
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.47 kb
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<cctype>
//evaluarea unei expresii
using namespace std;
const int N = 1000;
char s[N];
int p = 0;
int termen();
int expresie();
int factor();
//deci avem o expresie, ea e impartita in termeni, termenii in factori.
//asa ca vom avea 3 subprograme ce apeleaza una pe alta
//subprogramul ~expresie~ va apela subprogramul ~termen~, subprogramul ~termen~ va apela subprogramul ~factor~, iar subprogramul
//~factor~ va apela subprogramul ~expresie~
//se creeaza un circuit

int termen()
{
	int prod = factor();
	if (s[p] == '*' || s[p] == '/')
	{
		if (s[p] == '*')
		{
			p++;
			prod = prod * factor();
		}
		else if (s[p] == '/')
		{
			p++;
			prod = prod / factor();
		}
	}
	return prod;
}
int expresie()
{
	int sum = termen();
	while (s[p] == '+' || s[p] == '-')
	{
		if (s[p] == '+')
		{
			p++;
			sum += termen();
		}
		else if (s[p] == '-')
		{
			p++;
			sum -= termen();
		}
	}
	return sum;
}

int factor()
{
	int semn = 1, val{};
	if (s[p] == '-' || s[p] == '+')
	{
		p++;
		semn = -semn;
	}
	if (s[p] == '(')
	{
		p++;
		val = expresie();
		p++;
		return semn * val;
	}
	while (isdigit(s[p]))
	{
		val = val * 10 + (s[p] - '0');
		p++;
	}
	return semn * val;
}

int main()
{
	cin.getline(s, N);
	cout << expresie();
	return 0;
}

/*#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;

const int N = 1000;
//evaluare min max; operatorul m calculeaza minimul, operatorul M calculeaza maximul; exista si paranteze
char s[N];
int p = 0;
int expresie();
int termen();
int factor();

int expresie()
{

	int val = termen();
	while (s[p] == 'm' || s[p] == 'M')
	{
		if (s[p] == 'm')
		{
			p++;
			if(val<termen())val= termen();
		}
		else if (s[p] == '-')
		{
			p++;
			if(val>termen())val= termen();
		}
	}
	return val;
}

int termen()
{
	int val2 =factor();
	if (s[p] == 'm' || s[p] == 'M')
	{
		if (s[p] == 'm')
		{
			p++;
			if(val2<factor())val2 =factor();
		}
		else if (s[p] == 'M')
		{
			p++;
			if(val2>factor()) val2=factor();
		}
	}
	return val2;
}

int factor()
{
	int val3{};
	if (s[p] == '(')
	{
		p++;
		val3 = expresie();
		p++;
		return  val3;
	}
	while (isdigit(s[p]))
	{
		val3 = val3 * 10 + (s[p] - '0');
		p++;
	}
	return  val3;
}
int main()
{
	cin.getline(s, N);
	cout << expresie();
	return 0;
}*/