Pagini recente » Cod sursa (job #1779150) | Cod sursa (job #668403) | Cod sursa (job #3194473) | Cod sursa (job #2837499) | Cod sursa (job #942157)
Cod sursa(job #942157)
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <fstream>
using namespace std;
double eval(int st, int dr);
char s[100];
void trimm() {
for(int i=strlen(s)-1; i >= 0 ; i--)
if(s[i]=='(')
for(int j=i;j<strlen(s);j++)
if(s[j] == ')') {
double rez = eval(i+1, j-1);
char post[100];
strcpy(post, s+j+1);
strcpy(s+i, "");
sprintf(s+i, "%lf", rez);
strcat(s, post);
int debug;
return;
}
}
double eval(int st, int dr)
{
for(int i=dr; i>=st; i--)
if(s[i]=='+')
return eval(st, i-1) + eval(i+1, dr);
for(int i=dr; i>=st; i--)
if(s[i]=='-')
return eval(st, i-1) - eval(i+1, dr);
for(int i=dr; i>=st; i--)
if(s[i]=='/')
return eval(st, i-1) / eval(i+1, dr);
for(int i=dr; i>=st; i--)
if(s[i]=='*')
return eval(st, i-1) * eval(i+1, dr);
double bla;
sscanf(s+st,"%lf", &bla);
return bla;
}
int main()
{
/** faza cu sscanf
char s[200]="mada are -21 de ani";
int x;
for(int i=0;i<strlen(s); i++)
if(s[i]=='-' || isdigit(s[i]))
{
sscanf(s+i,"%d", &x);
break;
}
cout << x;
*/
ifstream f("evaluare.in");
ofstream g("evaluare.out");
memset(s, 0, sizeof(s));
f.getline(s,100);
while(strchr(s, '(') || strchr(s,')'))
trimm();
g << eval(0, strlen(s)-1);
return 0;
}