Cod sursa(job #2819509)

Utilizator roberttrutaTruta Robert roberttruta Data 18 decembrie 2021 15:02:52
Problema Evaluarea unei expresii Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <stdio.h>
#include <stdlib.h>
//recursivitate mutuala
int expression(char *p, int *i)
{
    int rez = term(p,i);
    while(p[*i]=='+' || p[*i]=='-')
    {
        if(p[*i]=='+')
        {
            (*i)++;
            rez += term(p,i);
        }
        if(p[*i]=='-')
        {
            (*i)++;
            rez -= term(p,i);
        }
    }
    return rez;
}
int term(char *p, int *i)
{
    int rez = factor(p,i);
    while(p[*i]=='*' || p[*i]=='/')
    {
        if(p[*i]=='*')
        {
            (*i)++;
            rez *= factor(p,i);
        }
        if(p[*i]=='/')
        {
            (*i)++;
            rez /= factor(p,i);
        }
    }
    return rez;
}
int factor(char *p, int *i)
{
    int nr = 0;
    if(p[*i]=='(')
    {
        (*i)++;
        nr=expression(p,i);
        (*i)++;
        return nr;
    }
    while(p[*i]>='0' && p[*i]<='9')
    {
        nr = nr*10 + p[*i]-'0';
        (*i)++;
    }
    return nr;
}

int main()
{
    FILE* in = fopen("evaluare.in", "r");
    FILE* out = fopen("evaluare.out", "w");
    char s[100005];
    char *p;
    int i = 0;
    fscanf(in,"%s", s);
    p = s;
    fprintf(out,"%d\n", expression(p, &i));
    return 0;
}