Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #2171965) | Cod sursa (job #2791002)
#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 100000
#define MAXNR 50000
/// Ultima era sursa gresita
char s[MAXLENGTH];
int si;
int v[MAXNR],iv,io;
char o[MAXNR];
int priority(char c){
if(c == '+' || c == '-')
return 1;
if(c == '*' || c == '/')
return 2;
if(c == '(')
return -1;
return 0;
}
int factor(){
int r=0;
while(s[si] >= '0' && s[si] <= '9'){
r *= 10;
r += s[si] - '0';
si++;
}
return r;
}
int calcul(int a, int b, char semn){
if(semn == '+')
return a+b;
if(semn == '-')
return b-a;
if(semn == '*')
return a*b;
return b/a;
}
void computeTop(){
int a, b;
char semn;
a = v[iv - 1];
b = v[iv - 2];
semn = o[io - 1];
v[iv - 2] = calcul(a,b,semn);
iv --;
io --;
}
int main(){
FILE *fin, *fout;
int n,i;
fin = fopen("evaluare.in","r");
si = 0;
s[0] = fgetc(fin);
while(s[si] != '\n'){
si++;
s[si] = fgetc(fin);
}
n = si;
si = 0;
fclose(fin);
iv=0;
io=0;
while(si < n){
if(s[si] >= '0' && s[si] <= '9'){
v[iv] = factor();
iv ++;
} else if(s[si] == '('){
o[io] = '(';
io++;
si++;
} else if(s[si] == ')'){
while(o[io-1] != '(')
computeTop();
io--;
si++;
} else if(priority(s[si]) != 0){
while(io > 0 && priority(o[io-1]) >= priority(s[si]))
computeTop();
o[io] = s[si];
io++;
si++;
} else
si++;
// printf("V: ");
// for(i=0;i<iv;i++)
// printf("%d ",v[i]);
// printf("\nO: ");
// for(i=0;i<io;i++)
// printf("%c ",o[i]);
// printf("\n\n");
}
while(io > 0)
computeTop();
// printf("V: ");
// for(i=0;i<iv;i++)
// printf("%d ",v[i]);
// printf("\nO: ");
// for(i=0;i<io;i++)
// printf("%c ",o[i]);
// printf("\n\n");
fout = fopen("evaluare.out","w");
fprintf(fout,"%d\n",v[0]);
fclose(fout);
return 0;
}