Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo programar una calculadora sencilla?

¿Cómo programar una calculadora sencilla?

Este tipo de operación es más problemática, pero los cuatro símbolos de operación tienen la misma prioridad y deben escribirse de manera simple. ¿Tengo aquí un algoritmo que puede realizar cuatro operaciones aritméticas simples, en Delphi, como referencia?

Función Math_Evaluate(S0:string):Extendido;?

Función Evaluate(S0:String):Extendido;Adelante;?

Limpieza de procedimiento(var s0: string);?

Var?

I:entero;?

¿Comenzar?

S0:=LowerCase(s0);?

I:=Pos(' ',s0);?

¿Mientras I>0 hago?

¿Empezar?

Eliminar( S0,I,1 );?

I:=Pos(' ',S0);?

Fin;?

Fin;?

Función GetFirstOpp(Tot:Integer;S0:String):Integer;?

Const?

Sopps:String=('+-*/^');?

Var?

I:Entero;?

¿Comenzar?

Si Tot=0 Entonces Tot:=Longitud(S0); ?

Para I:=1 a 5 ¿Hacer?

¿Comenzar?

Resultado:=Pos(Sopps[i],S0);?

Si ((I<3) y (Resultado>0)) ¿entonces?

Si ((Resultado=1) o (Pos(S0[Resultado-1],Sopps)>0) ) ¿Entonces?

p>

Resultado:=0;?

Si Resultado>0 Entonces?

Si Resultado

Salir;?

Fin;?

Si Resultado>Tot Entonces?

Resultado:=0;?

Fin;?

Función EspecialF(P1:Entero;S0:Cadena):Extendido;?

Var?

Operstr:Cadena;?

Arg:Extendido;?

¿Comenzar?

Resultado:=0;?

Operstr:=Copiar(S0,1,P1-1);?

Si S0[Longitud(S0)]<>')' ¿Entonces?

Salir;?

Operstr:=LowerCase(Operstr);?

Arg:= Evaluar(Copiar(S0,P1+1,Longitud(S0)-P1-1));?

if Operstr ='sin' ¿Entonces?

Resultado:=Sin(Arg )?

Si no, Operstr ='cos' ¿Entonces?

Resultado:=Cos(Arg)?

Si no, Operstr ='tan' ¿Entonces?

Resultado:=Sin(Arg)/Cos(Arg)?

Si no, si Operstr ='arctan' ¿Entonces?

Resultado :=Arco

tan(Arg)?

De lo contrario, si Operstr ='log' ¿Entonces?

Resultado:=Ln(Arg)/Ln(10)?

De lo contrario, si Operstr ='ln' ¿Entonces?

Resultado:=Ln(Arg)?

¿O si Operstr ='exp' Entonces?

Resultado:=Exp( ¿Arg)?

Si no, si Operstr ='sqrt' ¿entonces?

Resultado:=Sqrt(Arg)?

{ingrese funciones adicionales aquí}?

Otro Salir;?

Fin;?

Función GetValue(S0:String):Extendido;?

¿Comenzar?

Resultado:=0;?

Si Longitud(S0)<1 Entonces Salir;?

Si Longitud(S0)=1 Entonces?

Resultado:=StrToFloat(S0)?

¿Otro?

Caso s0[1] de?

'x':Resultado:=1;? p>

'y':Resultado:=1;?

'z':Resultado:=1;?

Else Resultado:=StrToFloat(S0); ?

Fin;?

Fin;?

Procedimiento MatchBracket(Var I:Integer;S0:String);?

Var ?

J,Len:Entero;?

¿Comenzar?

J:=1;?

Len:=Longitud(S0 ?

Repetir Inc(I);?

Si I>Len entonces salir;?

Si S0[I]='(' Entonces Inc (J );?

Si S0[I]=')' Entonces Dec(J);?

Si J<0 Entonces Salir;?

Hasta J =0;?

Fin;?

Función Calcular(P1:Integer;S0:String):Extendido;?

Var?

V1,V2:Extendido;?

¿Comenzar?

Resultado:=0;?

V1:=Evaluar(Copiar(S0,1 ,P1 -1));?

V2:=Evaluar(Copiar(S0,P1+1,Longitud(s0)-P1));?

Caso S0[P1] De?

'+': Resultado:=V1+V2;?

'-': Resultado:=V1-V2;?

'/' : Resultado :=V1/V2;?

'*': Resultado:=V1*V2;?

'^': Resultado:=Exp(V2*Ln(V1) ); ?

Else Salir;?

Fin;?

Fin;?

Función Evaluar (S0:string):Extendido ;?

Var?

P1,P2,Q1:Entero;?

¿Comenzar?

P1:=Pos('( '

,S0);?

P2:=P1;?

Si P2>0 entonces?

MatchBracket(P2,S0);?

Si P1=1 ¿entonces?

¿Empezar?

Si P2=Longitud(S0) ¿entonces?

¿Empezar?

Eliminar(S0,P2,1);?

Eliminar(S0,1,1);?

Resultado:=Evaluar(S0);?

¿Finalizar si no?

Resultado:=Calcular(P2+1,S0);?

Salir;?

Fin;?

Q1:=GetFirstOpp(P1,S0);?

Si (P1+Q1=0) Entonces?

¿Comenzar?

Resultado:=GetValue(S0) );?

Salir;?

Fin;?

Si Q1<>0 Entonces?

Resultado:=Calcular(Q1 ,S0)?

¿Otro si Longitud(S0)>P2 Entonces?

Resultado:=Calcular(P2+1,S0)?

¿Otro?

Resultado:=EspecialF(P1,S0);?

Fin;?

¿Comenzar?

¿Intentar?

Limpiar(S0);?

Resultado:=Evaluar(S0);?

¿Excepto?

Resultado:=0;?

Fin;?

Fin;