Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2008
nunez_mvp nunez_mvp is offline
Miembro
 
Registrado: jun 2008
Posts: 25
Poder: 0
nunez_mvp Va por buen camino
Conversiones matematicas

Hola a todos

Necesito realizar un programa en el cual al introducir una expresión matemática en un edit y pulsar un botón que se llama conversión infija me presente en un label como sería dicha expresión convertida en infija. De igual manera tendría otro botón para las conversiones postfijas. Se que estos casos no son muy comunes pero si alguien sabe como trabajar con esto le agradecería mucho su ayuda.

Espero haberme explicado bien y saludos a todos.
Responder Con Cita
  #2  
Antiguo 04-08-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Hola nunez_mvp !

Pues tu sólo tienes ya bastante idea: 1 TButton, 1 TLabel, 1 TEdit...

Tienes que sentarte a pensar un poco más cómo le darías forma al código y entonces preguntar ya por ideas más concretas cuando te surja alguna duda

Saludos y Suerte...
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #3  
Antiguo 04-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
¿que significa conversión infija?
Responder Con Cita
  #4  
Antiguo 04-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
mm ya vi te adjunto este link . Para pasar de c a delphi: {}, begin end; for (i=0;i<5;i++) -> for i := 0 to 5...aunque sera mejor que entiendas el algoritmo y luego lo adaptes a delphi.Saludos.

Última edición por coso fecha: 04-08-2008 a las 17:58:04.
Responder Con Cita
  #5  
Antiguo 04-08-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Hola,

Y por si acaso, para complementar las anteriores respuestas, tocó "googlear" por más traducciones de algoritmos, ya que según ví se puede por dos métodos:

1. Con pilas.

2. Con árboles binarios.
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #6  
Antiguo 05-08-2008
nunez_mvp nunez_mvp is offline
Miembro
 
Registrado: jun 2008
Posts: 25
Poder: 0
nunez_mvp Va por buen camino
Gracias por sus consejos me han sido de mucha utilidad, pero tengo un pequeño inconveniente y es que algunos códigos en turbo pascal son un poco diferente en delphi y para ser honesto no los entiendo bien, si me pueden explicar algo mas les agradecería muchísimo. Aquí les mando el código que encontré. Saludos y Gracias.......

Program InFixToPostFix;
{ Written in Turbo Pascal v6.0 by Clif Penn, Mar 1, 1996 }

Uses CRT;
Label finis;

TYPE link = ^node; { link is a pointer to a node }
node = record
nxt:link; { points to next node (or nil) }
dat:string[12]; {length of 12 is arbitrary}
end;
VAR
head, p1, p2, op:link;
s, postfix:string;

Procedure MakeWrdList(ss:string);
VAR
wrd:string[12]; { 12 is arbitrary }
s1, s2, len:integer;
pt1, pt2:link;

Begin
pt1 := nil;
s1 := 1;
len := Length(ss);

While s1 < len do
Begin
{ skip spaces }
While (ss[s1] = ' ') AND (s1 < len) Do Inc(s1);
s2 := s1; {start of word}
{ parse to next space }
While (ss[s2] <> ' ') AND (s2 <= len) Do Inc(s2);
wrd := Copy(ss, s1, s2 - s1); {extract wrd sans spaces}
s1 := s2; {advance string index}

pt2 := pt1; {initially pt2 to nil, normally move down list}
new(pt1) ; {get address for pt1 from heap}
if pt2 = nil then head := pt1; {head-->first node}
pt2^.nxt := pt1; {links old node to new}
pt1^.nxt := nil; {last node in list points to nil}
pt1^.dat := wrd; {stores wrd in node}
End;

{ After above: pt1 and pt2 no longer used
head-->[arg1]-->[op1]-->[arg2]-->[ .... ]-->nil }
End;

Procedure ShowList;
VAR tmp:link;
Begin
tmp := head;
postfix := '';
While tmp <> nil do
begin
postfix := postfix + tmp^.dat + ' '; {concatanate string}
tmp := tmp^.nxt; {traverse the list head to tail}
end;
Writeln(postfix);
End;

Procedure InsertOp;
{Inserts Op node(s) into PostFix linked list}
Begin
p1^.nxt := op; {insert op, the last op node points to nil}
While p1^.nxt <> nil do p1 := p1^.nxt;
p1^.nxt := p2^.nxt; {remove p2 node from list}
p1 := p1^.nxt; {last node of prev op now linked to list}
op := p2; {new op becomes p2}
op^.nxt := nil;
p2 := p1; {both now point to next argument}
End;

Procedure ExtendOp;
{Extracts math symbol node from PostFix list and extends Op list}
Begin
p1^.nxt := p2^.nxt; {remove p2 from list}
p1 := p1^.nxt; {relink arg-->arg}
p2^.nxt := op; {place p2 in front of old op}
op := p2; {now op linked list has 2 nodes}
p2 := p1 ; {both now point to next argument}
End;

Procedure DoPostFix(st:string);
Const
Hi = ['*', '/']; {Hi, Lo are math precedence rank of symbols}
Lo = ['-', '+'];

Begin
MakeWrdList(st);
p1 := head; {After this initialization, }
op := nil; {p1, p2, arg1 --> arg2 }
p2 := p1^.nxt; {op --> op1 --> nil }
ExtendOp;

While p2^.nxt <> nil Do {last node points to nil}
Begin
p2 := p2^.nxt; {p2 now pointing to math operation}
{Conditional char comparisons follow}
If (op^.dat[1] in Hi) OR (p2^.dat[1] in Lo) then
InsertOp
Else ExtendOp;
End;
p1^.nxt := op; {links final math operation(s)}
End;

BEGIN {main program}
ClrScr;
Writeln('Just press Enter to quit.'); Writeln;
{ Example }
s := '3 - 6 * 7 + 2 / 4 * 5 - 8';

DoPostFix(s);
Writeln('In postfix notation, the infix string:');
Writeln(s, ' becomes:');
ShowList;
Repeat
Writeln;
Writeln('Infix math string (spaces between everything):');
Readln(s);
If Length(s) < 5 then goto finis;

DoPostFix(s);
ShowList;
Until Length(s) < 5;

finis:
END.
Responder Con Cita
  #7  
Antiguo 05-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
delphi (y casi todos los visuales) elimino (escondio, mas bien) los punteros haciendo que las clases en si sean punteros a objetos. Sino entiendes este codigo, mejor busca algun otro, porque te armaras un lio traduciendolo. Podrias probar de donde pone type, crear una clase

Código Delphi [-]

type Milink = class(TObject)
  nxt : MiLink;
  dat : string;
  constructor Create;
end;

constructor MiLink.Create;
begin  
    nxt := nil;
    dat := '';
end;

etc...

pero seria muy laborioso hacerlo correctamente. Te recomiendo que busques otro codigo.

PD: este codigo no tiene en cuenta los parentesis ni su precedencia.
Responder Con Cita
  #8  
Antiguo 05-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola

Puedes leer este hilo que por mlo que veo habla exactamente de lo que estas preguntando,

http://www.clubdelphi.com/foros/showthread.php?t=50150

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Datos de archivos, fechas y conversiones... mjuan OOP 1 04-05-2006 14:07:07
Problemilla de matematicas. CRIS Varios 14 12-11-2005 12:25:27
Conversiones de tipos andre Varios 7 13-01-2004 08:24:22
Expresiones matemáticas Pandre Varios 0 04-09-2003 01:43:49
expresion matematicas Irina Impresión 4 21-05-2003 00:49:51


La franja horaria es GMT +2. Ahora son las 02:24:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi