Ayuda en este codigo RAPIDO!!1
Publicado por Karen Carmen Gomez (3 intervenciones) el 09/06/2009 22:02:24
evaluar:-
write('------------------------------------------'),nl,
write('EVALUADOR DE EXPRESIONES ARITMETICAS '),nl,
write(' SIMPLES(dos variables). '),nl,
write('------------------------------------------'),
nl,nl,
write('Valor de X:'),
read(X1),
write('Valor de Y:'),
read(Y1),
write('Expresion:'),
read(E1),nl,
recursivo(E1,R,X1,Y1),
%CONVERTIR LA LISTA A ESTRUCTURA.
K =..R,
%EFECTUAR LOS CALCULOS.
J is K,
write('La solución de la expresión es: '),
write(J),nl,nl,
write('------------------------------------------'),nl,
write('PARA MAS INFORMACION ESCRIBA CREDITOS. '),nl,
write('------------------------------------------'),
nl,nl.
%RECURSIVO (Obtener Lista con las variables sustituidas para poder evaluar).
recursivo(A,R,V1,V2):-A=..L,sus(x,V1,L,C),sus(y,V2,C,B),length(B,Largo),
analizar(B,R,Largo,1,V1,V2).
%Sustituir un elemento por otro.
sus(_,_,[],[]).
sus(X,Y,L,R):-member(X,L)->append(L1,[X|L2],L),
append(L1,[Y|L2],P),
sus(X,Y,P,R);append([],L,R),!.
%ANALIZAR (Verificar si existen subcadenas complejas en la ecuacion).
analizar(L,R,S,Cont,V1,V2):-((Cont > S)->copiaLista(L,R),!);(elPos(Cont,A,L),
buscar(Cont,A,L,Lr,Z),((Z == 1)->recursivo(Lr,R,V1,V2));elPos(Cont,A,L),
A=..K,length(K,N),((N > 1)->J=..K,recursivo(J,O,V1,V2),
G=..O,M is G,susPos(M,Cont,L,C),Cant is Cont+1,analizar(C,R,S,Cant,V1,V2));
(Cant is Cont+1,analizar(L,R,S,Cant,V1,V2))).
%ELPOS (Obtener elemnto en una posicion).
elPos(Pos,El,L):-append(L1,[El|L2],L),A is Pos-1,length(L1,A).
%COPIA LISTA (Copiar una lista).
copiaLista(L,L2):-append([],L2,L).
%SUSPOS (Sustituir elemento en una posicion).
susPos(X,Pos,L,R):-append(L1,[Y|L2],L),A is Pos-1,length(L1,A),append(L1,[X|L2],R).
%BUSCAR (Buscar posible omision de signos).
buscar(Pos,A,L,J,S):-((Pos == 1,(A == *),(A == +),(A == -),(A == /),(A == ^))->
append([*],L,Lr),S is 1,J=..Lr);S is 0.
write('------------------------------------------'),nl,
write('EVALUADOR DE EXPRESIONES ARITMETICAS '),nl,
write(' SIMPLES(dos variables). '),nl,
write('------------------------------------------'),
nl,nl,
write('Valor de X:'),
read(X1),
write('Valor de Y:'),
read(Y1),
write('Expresion:'),
read(E1),nl,
recursivo(E1,R,X1,Y1),
%CONVERTIR LA LISTA A ESTRUCTURA.
K =..R,
%EFECTUAR LOS CALCULOS.
J is K,
write('La solución de la expresión es: '),
write(J),nl,nl,
write('------------------------------------------'),nl,
write('PARA MAS INFORMACION ESCRIBA CREDITOS. '),nl,
write('------------------------------------------'),
nl,nl.
%RECURSIVO (Obtener Lista con las variables sustituidas para poder evaluar).
recursivo(A,R,V1,V2):-A=..L,sus(x,V1,L,C),sus(y,V2,C,B),length(B,Largo),
analizar(B,R,Largo,1,V1,V2).
%Sustituir un elemento por otro.
sus(_,_,[],[]).
sus(X,Y,L,R):-member(X,L)->append(L1,[X|L2],L),
append(L1,[Y|L2],P),
sus(X,Y,P,R);append([],L,R),!.
%ANALIZAR (Verificar si existen subcadenas complejas en la ecuacion).
analizar(L,R,S,Cont,V1,V2):-((Cont > S)->copiaLista(L,R),!);(elPos(Cont,A,L),
buscar(Cont,A,L,Lr,Z),((Z == 1)->recursivo(Lr,R,V1,V2));elPos(Cont,A,L),
A=..K,length(K,N),((N > 1)->J=..K,recursivo(J,O,V1,V2),
G=..O,M is G,susPos(M,Cont,L,C),Cant is Cont+1,analizar(C,R,S,Cant,V1,V2));
(Cant is Cont+1,analizar(L,R,S,Cant,V1,V2))).
%ELPOS (Obtener elemnto en una posicion).
elPos(Pos,El,L):-append(L1,[El|L2],L),A is Pos-1,length(L1,A).
%COPIA LISTA (Copiar una lista).
copiaLista(L,L2):-append([],L2,L).
%SUSPOS (Sustituir elemento en una posicion).
susPos(X,Pos,L,R):-append(L1,[Y|L2],L),A is Pos-1,length(L1,A),append(L1,[X|L2],R).
%BUSCAR (Buscar posible omision de signos).
buscar(Pos,A,L,J,S):-((Pos == 1,(A == *),(A == +),(A == -),(A == /),(A == ^))->
append([*],L,Lr),S is 1,J=..Lr);S is 0.
Valora esta pregunta


0