Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: vanchopper en 30 Marzo 2011, 07:29 am



Título: Pilas y Colas Pascal
Publicado por: vanchopper en 30 Marzo 2011, 07:29 am
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.




Título: Re: Pilas y Colas Pascal
Publicado por: Khronos14 en 30 Marzo 2011, 13:31 pm
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.


Título: Re: Pilas y Colas Pascal
Publicado por: vanchopper en 31 Marzo 2011, 01:27 am
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.


Título: Re: Pilas y Colas Pascal
Publicado por: Khronos14 en 31 Marzo 2011, 13:27 pm
Hola vanchopper, tuve un poco de tiempo libre y echaba de menos Pascal así que hice este pequeño programa:

Código
  1. program Colas;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  SysUtils;
  7.  
  8. type
  9.  TPalabra = packed record
  10.    Palabra: PAnsiChar; //^AnsiChar;
  11.    SiguientePalabra: ^TPalabra;
  12.  end;
  13.  PCola = ^TPalabra;
  14.  
  15. var
  16.  Cola: PCola;
  17.  PrimeraPalabra, UltimaPalabra: PCola;
  18.  
  19. function AñadirPalabra(Palabra: PAnsiChar): boolean;
  20. var
  21. P: PCola;
  22. begin
  23. result:= false;
  24.  if Palabra <> nil then
  25.    begin
  26.      New(P);
  27.      if P = nil then
  28.        begin
  29.          WriteLn('No se pudo reservar memoria para la cola');
  30.          Exit;
  31.        end;
  32.  
  33.      GetMem(P^.Palabra, StrLen(Palabra) + 1); //+1 para el caracter #0 de final de cadena
  34.      if P^.Palabra = nil then
  35.        begin
  36.          WriteLn('No se pudo reservar memoria para la palabra');
  37.          Exit();
  38.        end;
  39.      StrCopy(P^.Palabra, Palabra);
  40.  
  41.      if PrimeraPalabra = nil then
  42.        begin
  43.          Cola:= P;
  44.          PrimeraPalabra:= Cola;
  45.        end else
  46.          begin
  47.            Cola^.SiguientePalabra:= Pointer(P);
  48.            Cola:= PCola(Cola^.SiguientePalabra);
  49.            UltimaPalabra:= PCola(Cola^.SiguientePalabra);
  50.          end;
  51.  
  52.      result:= true;
  53.    end;
  54. end;
  55.  
  56. procedure LiberarMemoria;
  57. var
  58. P, PAux: PCola;
  59. begin
  60. P:= PrimeraPalabra;
  61.  while P <> nil do
  62.    begin
  63.      FreeMem(P^.Palabra);
  64.      PAux:= PCola(P^.SiguientePalabra);
  65.      Dispose(P);
  66.      P:= PAux;
  67.    end;
  68. end;
  69.  
  70. var
  71. P: PCola;
  72. begin
  73.  AñadirPalabra('Primera palabra');
  74.  AñadirPalabra('Palabra de prueba');
  75.  AñadirPalabra('qwdqwd');
  76.  AñadirPalabra('qwdqwd');
  77.  AñadirPalabra('qwdqwd');
  78.  AñadirPalabra('by Khronos');
  79.  
  80.  P:= PrimeraPalabra;
  81.  while P <> nil do
  82.    begin
  83.      WriteLn(P^.Palabra);
  84.      P:= PCola(P^.SiguientePalabra);
  85.    end;
  86.  ReadLn;
  87.  LiberarMemoria();
  88. end.
  89.  

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.