Pagini recente » Cod sursa (job #100759) | Cod sursa (job #2738684) | Cod sursa (job #2375619) | Cod sursa (job #1459413) | Cod sursa (job #1644187)
#include <iostream>
#include <cstdio>
using namespace std;
int citire(FILE* f){
char cif;
int n=0;
do{
cif=fgetc(f);
if('0'<=cif && cif<='9')
n=n*10+cif-'0';
}while('0'<=cif && cif<='9');
ungetc(cif,f);
return n;
}
int prod(FILE *f); //prototipul functiilor folosite
int rest(FILE *f);
int suma(FILE* f){
int suma=prod(f);
char cif;
do{
cif=fgetc(f);
if(cif=='+')
suma+=prod(f);
else
if(cif=='-')
suma-=prod(f);
}while(cif=='+' || cif=='-');
ungetc(cif,f);
return suma;
}
int prod(FILE *f){
int produs=rest(f);
char cif;
do{
cif=fgetc(f);
if(cif=='*')
produs*=rest(f);
else
if(cif=='/')
produs/=rest(f);
}while(cif=='*' || cif=='/');
ungetc(cif,f);
return produs;
}
int rest(FILE *f){
int paran=0;
char cif;
cif=fgetc(f);
if(cif=='('){
paran=suma(f);
cif=fgetc(f); //citeste si ')'
}
else{
ungetc(cif,f); //daca am ajuns aici inseamna ca am inceput sa citim un numar, deci deja citim un numar, deci uitam ca i-am citit deja prima cifra si il citim oficial
paran=citire(f);
}
return paran;
}
int main()
{
FILE *f;
f=fopen("calcul.txt","r");
cout<<suma(f);
return 0;
}