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 06-04-2010
xeelons xeelons is offline
Registrado
 
Registrado: jul 2007
Posts: 4
Poder: 0
xeelons Va por buen camino
Problema al implementar Pilas

Despues de 1 año de no haber programado en delphi tube problemas al tratar de implementar el algoritmo que transforma una cadena de numeros y operadores a otra, lo que es llamado de infija a posfija,no logro darme cuenta cuall es el problema , se los agradeceria si podrian ayudarme.

Gracias
Código Delphi [-]
program posfijaproject;



uses
  SysUtils,dialogs;
const
max=100;
type
 tipoelemento=char;
 pila=array[1..max]of tipoelemento;
var
 Pila;
 tope:0..max;
 x:char;
 infija,posfija:string;
 i:integer;

procedure CreaPila(var Pila);
  begin
  tope:=0;
  end;
function PilaVacia(Pila):boolean;
  begin
  PilaVacia:=(tope=0);
  end;
function Pilallena(Pila):boolean;
  begin
  Pilallena:=(tope=max);
  end;
procedure Apilar(Var Pila ; x:char);
  begin
  if Pilallena(P)
  then
  showmessage('La pila esta llena')
  else
    begin
    tope:=tope+1;
    P[tope]:=x;
    end;
  end;
procedure Desempilar(Var Pila ; x:char);
  begin
  if PilaVacia(P)
  then
  showmessage('la pila esta vacia')
  else
  begin
    x:=P[tope];
    tope:=tope-1;
  end;
  end;
procedure Accesatope(Pila);
  begin
    if not PilaVacia(P)
    then showmessage(P[tope]);
  end;

function Prioridad(var x:char):integer;
  var
  pri:integer;
  begin
      case x of
      '@':Prioridad:=3;
      '*':Prioridad:=2;
      '/':Prioridad:=2;
      '+':Prioridad:=1;
      '-':Prioridad:=1;
      '(':Prioridad:=0;
      ')':Prioridad:=0;
      '0'..'9':Prioridad:=0;
      else
        showmessage('operador invalido')
      end;
  end;



 begin
 infija:=inputbox('infija','','');
 CreaPila(P);
  i:=0;
    for i:=1 to length(infija) do
        begin
         showmessage(intTostr(i));

            case infija[i] of
                '0'..'9'osfija[i]:=infija[i];
                '('              :Apilar(P,infija[i]);
                ')':
                     begin
                     showmessage(infija[i]);
                        while P[tope]<>'(' do
                            begin
                            Desempilar(P,infija[i]);
                            posfija[i]:=infija[i];
                        end;
                     end;
                '@': Apilar(P,infija[i]);
                '-','+','*','/':
                        begin
                          while Prioridad(P[tope])>=Prioridad(infija[i]) do
                            begin
                            Desempilar(P,P[tope]);
                            posfija[i]:=P[tope];
                            end;
                          Apilar(P,infija[i]);
                        end;

            else
            showmessage('que paso')
            end;

    end;





 end.

Última edición por xeelons fecha: 06-04-2010 a las 20:16:08.
Responder Con Cita
  #2  
Antiguo 06-04-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Eso no compilará jamás en Delphi porque Delphi es OO.
Ese programa está hecho para Pascal, programación procedural.
Otra cosa, este procedimiento
Código Delphi [-]
procedure Desempilar(Var Pila ; x:char);
  begin
  if PilaVacia(P)
  then
  showmessage('la pila esta vacia')
  else
  begin
    x:=P[tope];
    tope:=tope-1;
  end;
end;
no te va a devolver nada porque el parámetro x está pasado por valor y no por referencia. Tendrías que pasarlo por referencia (var) para que te devuelva algo (o mejor, hacer una función).
Si es otro el problema, avisá y miro lo demás.
Responder Con Cita
  #3  
Antiguo 06-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por BrunoBsso Ver Mensaje
Eso no compilará jamás en Delphi porque Delphi es OO.
Delphi está basado en Pascal y puede programarse proceduralmente sin ningún problema.

Otra cosa es que realmente no compila porque hay muchas declaraciones sin tipo como

Código Delphi [-]
var
  Pila;

Yo le recomendaría a xeelons que primero corrija ese tipo de errores para que compile y luego comente qué problemas le da el algoritmo.

Y, claro, no deja de ser recomendable comenzar a trabajar más OOP y menos P

// Saludos
Responder Con Cita
  #4  
Antiguo 06-04-2010
xeelons xeelons is offline
Registrado
 
Registrado: jul 2007
Posts: 4
Poder: 0
xeelons Va por buen camino
si tienes razon,pero cuando copie y pege el codigo si especifique el tipo de variable que es P: Pila; pero por algun motivo no aparece en el post ,ya intente modificarlo,pero sigue sin aparecer correctamente.
lo que quiero saber es por que no se ejecuta el bucle for,creo que el error tiene ver con esta parte del codigo: '0'..'9'osfija[i]:=infija[i];debe de ser '0'..'9'osfija[i]:=infija[i];
mejor subire el archivo
Responder Con Cita
  #5  
Antiguo 06-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja, ok. Creo que es un filtro del editor. Lo que pasa es que :p se usa para poner la carita y supongo que por eso se confunde y lo omite.

En fin, razón de más para recordar que conviene anteponer una T a los tipos de datos:

Código Delphi [-]
type
  TPila = array[1..max]of tipoelemento;

Si el ciclo for no se ejecuta, da la impresión de que en la llamada

Código Delphi [-]
infija:=inputbox('infija','','');

el usuario cancela el cuadro de diálogo y el valor devuelto es una cadena vacía. ¿Has verificado eso?

// Saludos
Responder Con Cita
  #6  
Antiguo 06-04-2010
xeelons xeelons is offline
Registrado
 
Registrado: jul 2007
Posts: 4
Poder: 0
xeelons Va por buen camino
Si tienes razon ,ahora usare el T. bueno creo que ya solucione parte de mi problema,este era que cuando cree la varialble posfija como string surge algun tipo de error con posfija[i]:=infija[i].
la forma en que solucione este problema es el siguiente: posfija[i]:=infija[i]; lo reemplaze con
Código Delphi [-]
posfija:= posfija +infija[i].
y antes del bucle for,inicializarla con posfija:=' ' ; vacio.
Responder Con Cita
  #7  
Antiguo 07-04-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Román, yo me refería a que no iba a compilar en un VCL. Pensé que quedaba claro lo que dije, pero la próxima vez tendré que ser más específico en cada palabra que escriba.
Por cierto, gracias por la aclaración de que Delphi está basado en Pascal (u Object Pascal será), pero lo sé desde hace unos 4 años cuando empecé.
Responder Con Cita
  #8  
Antiguo 07-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por BrunoBsso Ver Mensaje
Román, yo me refería a que no iba a compilar en un VCL.
¿A qué te refieres con esto? El código de xeelons, salvo los errores ya comentados, compila sin problemas. No conozco el concepto de compilar en un VCL.

// Saludos
Responder Con Cita
  #9  
Antiguo 07-04-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
A ver.
Abrí el IDE. Crea un nuevo form VCL. Borrá todo lo que viene por defecto. Pegá ese código.
¿Ahora sí se entiende? VCL = Visual Component Library = Programita con ventanas.
A eso me refería yo, pensé que había hecho eso. Ya ví a una persona hacerlo cuando abrió por primera vez el IDE de Delphi, así que no me hubiese sorprendido que alguien más lo haga.
Espero que sea entendible para vos ahora lo que dije.
Sino bueno, más palabras no puedo agregar.
Responder Con Cita
  #10  
Antiguo 07-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En todo caso, de tu aseveración original:

Cita:
Eso no compilará jamás en Delphi porque Delphi es OO.
Ese programa está hecho para Pascal, programación procedural.
no era posible deducir lo que ahora comentas. Recuerda que oop != vcl. Se puede escribir un programa oop sin ninguna ventanita

// Saludos
Responder Con Cita
  #11  
Antiguo 07-04-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Wink ;) ;) ;) ;)

Cita:
Empezado por roman Ver Mensaje
Recuerda que oop != vcl. Se puede escribir un programa oop sin ninguna ventanita
Claro, puse OO pensando en visual, me equivoqué. Pero igual, yo te respondí cuando dijiste que
Cita:
Empezado por roman
No conozco el concepto de compilar en un VCL.
Así que en todo caso, la duda que tenías era sobre VCL y yo te respondí concretamente eso.

Para que sea más facilito de entender y no me vengas de nuevo con preguntas hacia una cosa para luego "arreglas" refiriéndote a otra (digo, porque no conocías el concepto de compilar en un VCL pero después la arreglaste volviendo con que se puede escribir un programa oop sin ninguna ventanita) yo hablaba de VCL.

VCL - VCL - VCL - VCL.

Espero que así sea fácil de entender. Porque en VCL se hacen programas con "ventanitas", ¿no?

PD: ¿hacía alguna falta la cara de guiñar el ojo? yo no le veo ningún sentido, no aporta nada... pero después empiezan con que los dialectos y toda la bola que no me la creo 2 veces sin ofender.

PD2: chau foro, espero nunca más tener que preguntar algo acá, hay personitas que responden con un leve tono egocéntrico, pero si se los decís te agarran todos juntitos para denfender al pollito.
Responder Con Cita
  #12  
Antiguo 07-04-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Puedes enredarte lo que quieras pero al final lo que hay es lo que hay. Hiciste una aseveración que no es correcta y yo hice una simple aclaración para que quienes lean esto no se confundan.

Pero tal parece que tiendes a interpretar cualquier corrección como un ataque o crítica a tu persona y de ahí derivó el resto.

Por cierto, el guiño era precisamente para lo contrario que tu imaginas; la intención era poner un tono amistoso en el comentario.

En fin, ojalá rectifiques en tu decisión, porque has hecho aportaciones muy buenas.

// Saludos
Responder Con Cita
  #13  
Antiguo 07-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Quien tiene boca... se equivoca

Yo me equivoco muchísimas, muchísimas, muchísimas veces... ¡y me quieren igual!

A veces se contesta con prisas y no nos damos cuenta que estamos equivocándonos nosotros mismos o contestando cosas que no tienen mucho que ver con lo que preguntan. Esas cosas suceden, pero tiene fácil solución: "!huy!, me he equivocado, cierto" y me río de mi error , de los errores se aprende... así que es bueno equivocarse
Responder Con Cita
  #14  
Antiguo 07-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Seré yo Maestro?????, seré yo?????.
Pio, pio, pio...........
Saludos
PD: Aparte de la broma:
Lastima, seguí este debate de ideas desde ayer y me pareció muy interesante.
Que pena que no se pueda reconocer que nadie es poseedor de la verdad absoluta.
__________________
Siempre Novato
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
Problema al implementar un bbcode en php gulder PHP 0 10-11-2008 14:05:00
Clases - pilas - colas Manshula OOP 6 21-05-2008 20:05:15
Ayudaaa Pilas estaticas alekandro OOP 6 26-04-2006 14:04:11
Pilas 'nuevas' al minuto Investment Noticias 0 30-03-2005 15:24:21


La franja horaria es GMT +2. Ahora son las 03:57:27.


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