Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con LISTAS(con cursores,arreglos y apuntadores) (https://www.clubdelphi.com/foros/showthread.php?t=73879)

velapuerca88 21-05-2011 06:54:12

ayuda con LISTAS(con cursores,arreglos y apuntadores)
 
HOLA, tengo un problema , tengo que realizar el siguiente ejercicio:

"Dado un archivo en ASCII,construir un algoritmo que genere un indice,ordenado,de todas las palabras distintas contenidas en el archivo,contando la ocurrencia de cada una de ellas.luego listar la lista en pantalla."

La verdad no se por donde comenzar, si alguien tiene alguna idea, POR FAVOR AVISE.
muchas gracias!

Al González 21-05-2011 18:24:05

Hola velapuerca88, se ve que esto es una tarea escolar. No hay problema en que solicites ayuda, pero tenemos por costumbre ayudar a los estudiantes sin estropear su aprendizaje ni evitarle un sano esfuerzo.

Dinos, de lo que señala ese ejercicio, ¿qué es lo que sí sabes hacer? Y, por otro lado, ¿qué conocimientos tienes de Delphi? (supongo que te lo piden que esté hecho en Delphi). ¿Sabes cargar un archivo de texto en memoria, manejar listas y buscar caracteres específicos dentro de una cadena String?

Saludos.

Al González. :)

santiago14 21-05-2011 19:12:14

Mmmm, está lindo el ejercicio, me hace recordar aquellas viejas épocas de estudiante universitario pelo largo. Llena la carpeta de algoritmos y sueños...

Igualmente, no creo que al ejercicio propuesto le hagan falta cursores y apuntadores; bueno, arreglos si, eso seguro.
Habría que plantear un modulito que reciba una lista de palabras y devuelva un arreglo de la forma (palabra, cantidad). Aquí habría que tener en cuenta el asunto de los signos de puntuación (ignorarlos); también sería bueno que todas las palabras fueran uniformes (todo mayúsculas o todo minúsculas, para evitar problemas)
Posteriormente en otra parte lo ordenamos alfabéticamente.
Como estamos hablando de un algoritmo no creo que haga falta, en principio, demasiado rigor sintáctico con algún lenguaje, que por supuesto espero que sea Delphi al final.

Bueno, espero haber ayudado.

Santiago.

velapuerca88 21-05-2011 21:01:02

gracias por las respuestas!
 
El ejercicio lo tengo que entregar en delphi, Tengo 2 problemas importantes,
1 ) se podria ir leyendo linea por linea desde el archivo de texto(readln) para separar las palabras ??
2) suponiendo que para separar las palabras tome solo el caracter espacio, habia una funcion en delphi para seleccionar los caracteres anteriores al espacio, no recuerdo cual era.

SE ME OCURRE ALGO ASI PARA SEPARAR PERO NO SE BIEN QUE HACER
procedure separar (var s:string; var p:lista; separador:char; palabra:sring; )
var q : posicionlista;
i: integer;
begin
for i:=1 to lenght(s) do
if s[i]<> " " do // intento decir mientras sea distinto de espacio
palabra: = palabra+ s[i];

santiago14 22-05-2011 00:04:06

Cita:

Empezado por velapuerca88 (Mensaje 400878)
El ejercicio lo tengo que entregar en delphi, Tengo 2 problemas importantes,
1 ) se podria ir leyendo linea por linea desde el archivo de texto(readln) para separar las palabras ??
2) suponiendo que para separar las palabras tome solo el caracter espacio, habia una funcion en delphi para seleccionar los caracteres anteriores al espacio, no recuerdo cual era.

SE ME OCURRE ALGO ASI PARA SEPARAR PERO NO SE BIEN QUE HACER
procedure separar (var s:string; var p:lista; separador:char; palabra:sring; )
var q : posicionlista;
i: integer;
begin
for i:=1 to lenght(s) do
if s[i]<> " " do // intento decir mientras sea distinto de espacio
palabra: = palabra+ s[i];


En principio habría que eliminar todos los símbolos especiales (, . ; : etc.) Hay una funciones que ayudan "strReplace" creo que se llama una de ellas. Puedes ver aquí para estas funciones.
Luego de eso, si podrías usar como separador el espacio y empezar a contar las palabras.
Para el ordenamiento usariamos la burbuja sin dudas.

Dejame que vea unas cosas y te ayudo un poco mas con el asunto del array con las palabras distintas.

velapuerca88 22-05-2011 22:44:55

gracias! muy buenas las funciones.
Ahora, antes que nada tendria que pasar el contenido del archivo de texto a una string, como se podria hacer?. gracias

Al González 22-05-2011 23:01:02

Cita:

Empezado por velapuerca88 (Mensaje 400916)
[...] antes que nada tendria que pasar el contenido del archivo de texto a una string, como se podria hacer?

Puedes crear una instancia de objeto TStringList, cargar en ese objeto el archivo de texto usando el método LoadFromFile y luego pasar ese contenido a una variable String con la propiedad Text:

Código Delphi [-]
S := ObjetoStringList.Text;

Saludos. :)

velapuerca88 22-05-2011 23:54:42

HOLA, gracias por la respuesta, no se bien lo que quisiste decir arriba, pero entiendo que es algo de programacion orientada a objetos, todavia no nos enseñan lo que son los objetos hasta el cuatrimestre que viene, por lo que tendria que hacerlo de alguna manera sin usar objetos.saludos!

Al González 23-05-2011 00:20:38

Entiendo. Siendo así, podrás hacerlo con las funciones
AssignFile, Reset, ReadLn y EOF. En el foro encontrarás varios temas relacionados con esas funciones, incluyendo ejemplos como el que Caral expone en este hilo: http://www.clubdelphi.com/foros/showthread.php?t=69299

Espero te sirva. Si puedes leer en inglés, te recomiendo consultar la ayuda de Delphi referente a cada una de esas funciones. La información y ejemplos que ahí vienen son oro puro.

No dudes en seguir preguntando, andaremos cerca.

Al González. :)

santiago14 23-05-2011 02:38:27

Cita:

Empezado por velapuerca88 (Mensaje 400918)
HOLA, gracias por la respuesta, no se bien lo que quisiste decir arriba, pero entiendo que es algo de programacion orientada a objetos, todavia no nos enseñan lo que son los objetos hasta el cuatrimestre que viene, por lo que tendria que hacerlo de alguna manera sin usar objetos.saludos!

Bueno, si por las dudas te interesa saber un poco mas del objeto StringList, lo puedes encontrar aquí. Igualmente con lo que te mandó Al seguramente podrás resolverlo, claro que será un poco mas costoso. Supongo que eso es bueno, lo entrena a uno para lo que viene.

Saludos.

ecfisa 23-05-2011 03:14:57

Hola velapuerca88.

Supongo que te están restringiendo al uso de arreglos. Te paso una opción similar que no requiere uso de objetos:
Código Delphi [-]
...
type
  TDynArrayStr = array of string;
...
procedure LeerDeArchivo(const NomArch: string; var Lista: TDynArrayStr);
var
  Txt: TextFile;
  NroL: integer;
begin
  AssignFile(Txt, NomArch);
  Reset(Txt);
  try
    NroL:= 0;
    while not Eof(Txt) do
    begin
      SetLength(Lista, Length(Lista)+1);
      Readln(Txt,Lista[NroL]);
      Inc(NroL);
    end;
  finally
    CloseFile(Txt);
  end;
end;
...
Utilizo un arreglo dinámico en lugar de uno estático, por que no se puede conocer de antemano la cantidad de líneas que posee el archivo.

Ejemplo de llamada a la función:
Código Delphi [-]
...
var
  Lineas: TDynArrayStr;
begin
   LeerDeArchivo('TU_ARCHIVO.TXT', Lineas);
   ...
end;


Saludos.


La franja horaria es GMT +2. Ahora son las 04:23:13.

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