Pilas y Colas Pascal

Iniciado por vanchopper, 30 Marzo 2011, 07:29 AM

0 Miembros y 1 Visitante están viendo este tema.

vanchopper

hola , que tal ... quería saber si alguien podría ayudarme con este programa , orientándome o mucho mejor dándome el código. Ya que en la facultad nos han largado a programar y no hemos visto ni un ejercicio de ejemplo para dar una idea de como manejarnos..Eh buscado en Internet y un libro pero son muy sencillos o tocan temas como recursividad que no hemos llegado.
espero que alguien me pueda ayudar, desde ya muchas gracias.

- Se lee una secuencia de caracteres terminada en punto. Los caracteres forman palabras
separadas por un único blanco (no hay blanco después de la última palabra). Informar la cantidad
de veces que aparece la última palabra en la secuencia. Además para cada palabra determinar si
tiene o no mayor cantidad de vocales que de consonantes.



Khronos14

Hola vanchopper, en este foro no se realizan tareas.

En el ejercicio, yo no veo que te pidan realizar la tarea con pilas o colas. La forma más sencilla sería ir guardando los caracteres en un string leyendo con Read. Luego con bucles y condicionales puedes hacer todo lo que piden. Para copiar partes de una cadena, desde una posición determinada tienes la función copy, que funciona igual que substr en otros lenguajes de programación.

Saludos.

vanchopper

Bueno krhonos no pido que me hagan la tarea  , como dice el post , pido que me orienten o si es posible que me pasen el código de este ejercicio, para darme cuenta la lógica de pilas  y colas.
El ejercicio debe ser echo con pilas y colas , ya que así lo exige la catedra.
espero que me puedan ayudar.

Khronos14

Hola vanchopper, tuve un poco de tiempo libre y echaba de menos Pascal así que hice este pequeño programa:

Código (delphi) [Seleccionar]

program Colas;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TPalabra = packed record
    Palabra: PAnsiChar; //^AnsiChar;
    SiguientePalabra: ^TPalabra;
  end;
  PCola = ^TPalabra;

var
  Cola: PCola;
  PrimeraPalabra, UltimaPalabra: PCola;

function AñadirPalabra(Palabra: PAnsiChar): boolean;
var
P: PCola;
begin
result:= false;
  if Palabra <> nil then
    begin
      New(P);
      if P = nil then
        begin
          WriteLn('No se pudo reservar memoria para la cola');
          Exit;
        end;

      GetMem(P^.Palabra, StrLen(Palabra) + 1); //+1 para el caracter #0 de final de cadena
      if P^.Palabra = nil then
        begin
          WriteLn('No se pudo reservar memoria para la palabra');
          Exit();
        end;
      StrCopy(P^.Palabra, Palabra);

      if PrimeraPalabra = nil then
        begin
          Cola:= P;
          PrimeraPalabra:= Cola;
        end else
          begin
            Cola^.SiguientePalabra:= Pointer(P);
            Cola:= PCola(Cola^.SiguientePalabra);
            UltimaPalabra:= PCola(Cola^.SiguientePalabra);
          end;

      result:= true;
    end;
end;

procedure LiberarMemoria;
var
P, PAux: PCola;
begin
P:= PrimeraPalabra;
  while P <> nil do
    begin
      FreeMem(P^.Palabra);
      PAux:= PCola(P^.SiguientePalabra);
      Dispose(P);
      P:= PAux;
    end;
end;

var
P: PCola;
begin
  AñadirPalabra('Primera palabra');
  AñadirPalabra('Palabra de prueba');
  AñadirPalabra('qwdqwd');
  AñadirPalabra('qwdqwd');
  AñadirPalabra('qwdqwd');
  AñadirPalabra('by Khronos');

  P:= PrimeraPalabra;
  while P <> nil do
    begin
      WriteLn(P^.Palabra);
      P:= PCola(P^.SiguientePalabra);
    end;
  ReadLn;
  LiberarMemoria();
end.


Aquí tienes un pequeño programa que trabaja con Colas. El código está hecho en Delphi 2010, pero si trabajas con FreePascal no deberías tener ningún problema. Quizás deberías buscar en Internet información sobre las funciones New, Dispose, GetMem y FreeMem...

Con estas funciones, deberías ser capaz de hacer tu ejercicio.

Saludos.