Pascal/Turbo Pascal - AYUDA CON PROGRAMA

 
Vista:

AYUDA CON PROGRAMA

Publicado por Luis (4 intervenciones) el 29/05/2012 22:36:51
Necesito ayuda con un programa en pascal, es el segundo proyecto que me piden y no se por donde empezar, agradecería mucho que alguien me pudiera echar una mano. Me piden que realize un programa que permita buscar una palabra introducida por el usuario en unos ficheros (biografias), y que genere una página html con los resultados ordenados por el número de apariciones de la palabra de mayor a menor. Si el número de apariciones fuera igual se ordenarían alfabeticamente entre sí.
No pretendo que me hagan todo el programa, sólo que me den algunas indicaciones con las cuales yo pueda realizar el programa, pues lo que me interesa es aprender. Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

AYUDA CON PROGRAMA

Publicado por ramon (2158 intervenciones) el 30/05/2012 21:54:08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{Este programa lee un archivo html y presenta su contenido es algo de esto para empezar}
 
program leerhtml;
 uses
    crt, dos;
  type
     linea = array[1..1024] of char;
   const
      camino = 'C:\html\';
 
   var
    f : text;
    dato : linea;
    texto : string;
    cargados, i, u, y, x, cont : integer;
    archivos : array[1..50] of string;
    arh, palabra : string;
    car : char;
    ficheros : searchrec;
 
 
    procedure marcador_archivos(cam : string);
   var
      ii : integer;
   begin
      ii := 1;
      findfirst(cam + '*.html', archive, ficheros);
      while doserror = 0 do
      begin
        archivos[ii] := ficheros.name;
        ii := ii + 1;
        if ii > 50 then
        ii := 50;
        findnext(ficheros);
      end;
      cargados := ii - 1;
   end;
 
   procedure leearchivo(archi : string);
   var
     ps : integer;
   begin
       clrscr;
       assign(f,archi);
    {$I-} reset(f); {$I+}
    if ioresult <> 0 then
    halt(1);
    i := 1;
    ps := 1;
    while not Eof(f) do
       begin
          while not eoln(f) do
          begin
             read(f,car);
             dato[i] := car;
             i := i + 1;
             if i > 1024 then
              i := 1024;
          end;
             for x := 1 to i - 1 do
             begin
             if (dato[x] = '<') or (dato[x] = '/') or (dato[x] = '>') or
                                            (dato[x] = chr(09)) then
             begin
             end
            else
             write(dato[x]);
             end;
             writeln;
             i := 1;
             ps := ps + 1;
             if ps > 22 then
             begin
                writeln;
                writeln('Pulse una tecla');
                readkey;
                ps := 1;
                clrscr;
             end;
             readln(f);
        end;
       close(f);
   end;
 
 
 
  begin
      clrscr;
      marcador_archivos(camino);
      for y := 1 to cargados do
      writeln('  ',y,' ',archivos[y]);
      readln(u);
      leearchivo(camino + archivos[u]);
      writeln;
      writeln('Pulse [Enter]');
      readln;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA CON PROGRAMA

Publicado por Luis (4 intervenciones) el 01/06/2012 00:22:50
Ramón ante todo agradecerte lo mucho que me ayudas y valorar el esfuerzo y tiempo, que no te sobrará, que nos dedicas, tanto a mi como a otros como yo, para aprender a programar en pascal.
El programa para leer y mostrar el contenido de un fichero de texto (en el formato de una página web), es genial. Pero hay cosas, como la asignación de la variable "ficheros" o las sentencias "findfirst" y "findnext" del procedimiento marcador_archivos, que no entiendo, supongo que serán sentencias de la librería usada “dos”, que no hemos visto todavía y que lógicamente no puedo utilizar. Pero eso no me preocupa, pues los ficheros de texto a utilizar (*.html) que son 14, me los dan relacionados en un fichero de texto (listado.txt) y podría cargar la matriz “archivos”, leyendo el fichero (txt) mientras EOLN y EOF.
Ahora bien, lo que no se como hacer, es que, para una palabra introducida por teclado, me cuente las coincidencias de dicha palabra con las mismas palabras existentes en todos los ficheros (html), este numero lo dejaría en la matriz “archivos” pues la definiría doble. Otra duda que me surge, es como ordeno la matriz en orden descendente con respecto al número de coincidencias, pues tengo que mostrar el resultado con el nombre del fichero html y el número de coincidencias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA CON PROGRAMA

Publicado por ramon (2158 intervenciones) el 01/06/2012 19:45:06
En lo primero referente a "findfirst" y "findnext correcto pertenecen a la unidad dos y sirven
para localizar archivos en este caso con la extensión html.
Referente a el conteo de las coincidencias tienes dato[x] que cada x es un carácter tomado
de la linea leída por lo tanto puedes compararlo con la palabra entrada la cual sera un
string que puedes comparar leyendo carácter a carácter por ejemplo si el string en busca
lo puedes leer poniendo busca[x] con lo cual leerás carácter a carácter y podrás comparar
con dato[x] para ver las coincidencias y tomar decisión al respecto.
La ordenación una vez tengas los datos en ella es fácil imagina que tienes una matriz de
50 coincidencias y que llamaremos coinc entonces la operación seria.

var
auxi : string;
paso1, paso2 : integer;
begin
for paso1 := 1 to 50 do
for paso2 := 50 downto paso1 do
if coinc[paso1] > coinc[paso2] then
begin
auxi := coinc[paso1];
coinc[paso1] :=coinc[paso2];
coinc[paso2] := auxi;
end;
end;

Con esto tendrías ordenada la matriz de menor a mayor si la quieres a la inversa solo
tienes que variar esta parte.

if coinc[paso1] > coinc[paso2] then
begin
auxi := coinc[paso1];
coinc[paso1] :=coinc[paso2];
coinc[paso2] := auxi;
end;

Si necesitas mas ayuda dímelo lo are con gusto suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA CON PROGRAMA

Publicado por Luis (4 intervenciones) el 02/06/2012 21:11:17
Aquí estoy de nuevo Ramón, vuelvo a necesitar tu ayuda, entiendo tus indicaciones, pero no logro ensamblarlas con lo qu me piden. Te agradecería que me volvieses a echar una mano, pues se me termina el plazo de entrega. Espero que no esté abusando de tu generosidad, te envío el proyecto y los requisitos que me piden, muchas gracias.

PROYECTO:

Se dispone de un conjunto de ficheros HTML con diversos textos (biografías obtenidas de la Wikipedia). El objetivo es realizar un programa que permita buscar una palabra introducida por el usuario, en todos los ficheros de HTML adjuntos (que están relacionados en un fichero *.txt, cada nombre *.html en una línea diferente y tienen menos de 255 caracteres). Después, el programa debe generar una página HTML con los resultados, ordenados según el criterio de relevancia: el número de apariciones de la palabra buscada en cada fichero.

REQUISITOS:

1. Los identificadores y el sangrado deberán facilitar la comprensión del programa. Además, al principio se incluirá un comentario con el nombre y la sección de los autores.
2. El programa deberá tener, como mínimo, módulos para: leer ficheros, calcular la relevancia de una página, ordenar los resultados y generar el fichero final ...
3. Se deberá realizar el diseño de datos (declaración de tipo de datos) adecuado al propósito del programa.
4. Al iniciarse la aplicación, se deberá solicitar al usuario la palabra a buscar.
5. Al finalizar la aplicación, se generará el fichero HTML con los resultados ordenados de la búsqueda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar