Pascal/Turbo Pascal - Alguien me puede ayudar

 
Vista:

Alguien me puede ayudar

Publicado por Andrés (5 intervenciones) el 17/11/2006 01:32:12
Hola realmente necesito una ayuda en un programa que hace 5 días me siento trabado.
La idea es esta se trata de un vocabulario con una cierta cantidad de palabras.El objetivo es hacer una reccorrida del diccionario cargando la tabla de frecuencia de prefijos.-
Mi problema esta en como cargar esa tabla ya que tengo problemas.
Por ahora tengo hecho esto.

const
null =' { ';
mAXmensaje=50;
type
TipTabla= ARRAY[letraX,letraX,letraX,letra] OF char;
TPrefijo=ARRAY[1..3] OF char;
letraX='a'..null;
letra='a'..'z';
mensaje=ARRAY[1..mAXmensaje] OF char;
var
diccio:text;
car:char;

Begin
assign(diccio,'diccionario.txt');
reset(diccio);

while not eof(diccio) do
begin
while not eoln(diccio) do
begin
read(diccio,car);
end;
end;
End.
Aca solamente me lee caracter por caracter de todas las palabras en el diccionario,mi problema esta que necesito cargar la tabla de frecuencias y realmente estoy trabado,he consultado con gente pero no tienen idea y necesito una ayuda de alguien que sepa mas a fondo.-
Aca va la letra bien,ya lo mande antes en un mensaje pero igual se los aclaro de vuelta:

5.2 Cómo se realiza la predicción
Supongamos que hasta el momento se ingresó un texto T

y que el usuario digita la tecla d que tiene asociados los caracteres a1,a2, . . .,am

El método que se utiliza para predecir la letra es el siguiente:

Se toman los 3 últimos caracteres de la última palabra de T. Si esta palabra tiene menos de 3 caracteres se toman los que haya (2, 1 o 0). Esta secuencia de hasta 3 caracteres es el prefijo corriente. Llamemos p a esta cadena.
Se busca en la tabla los valores de las frecuencias FR(p,ak) para cada uno de los ak posibles.
Se elige el ak que tenga la frecuencia máxima
Cuando el usuario pulsa * se cambia la letra elegida por la que le sigue en frecuencia. También aquí se alterna de manera circular entre las letras posibles. Es decir que luego de pulsar m veces la tecla * se retorna a la primera elección.


La tabla de frecuencia de prefijos
Vamos a utilizar prefijos de hasta 3 caracteres. Por lo tanto nuestra tabla de frecuencias podría ser una matriz de 4 dimensiones:

type
letra = 'a'..'z';
TipoTabla = array [letra,letra,letra,letra] of integer
Si tenemos una variable tabla con tipo TipoTabla, entonces tabla[x,y,z,c] nos da la frecuencia de apariciones de la cadena xyz precediendo al caracter c.

La representación anterior está incompleta porque no considera que los prefijos pueden tener entre 0 y 3 caracteres. Solamente se guardan los prefijos de 3 caracteres.

Para considerar los prefijos de 0 a 2 caracteres vamos a introducir un caracter ficticio que llamaremos el carácter nulo.

const
nulo:= '{';
Y luego definimos un nuevo tipo que es la extensión de las letras con el carácter nulo:

type
letra = 'a'..'z';
letraX = 'a'..nulo;
Notar que la elección del carácter ‘{’ como carácter nulo se hace debido a que es el sucesor de la ‘z’ (de otra forma no podríamos definir el rango letraX).

El carácter nulo nos provee una forma de representar todos los prefijos con exactamente 3 caracteres: si un prefijo tiene menos de 3 caracteres, se rellena con nulos por la izquierda hasta completar los 3.

La tabla de frecuencias se define finalmente, como sigue:

TipoTabla = array [letraX,letraX,letraX,letra] of longint;
Hemos cambiado integer por longint ya que vamos a necesitar números superiores a maxint.

Los prefijos
Por lo dicho en la sección anterior, un prefijo se va a representar como un arreglo de tres caracteres:

type TPrefijo = array [1..3] of char;Es conveniente definir un procedimiento que obtenga el prefijo corriente a partir del mensaje:

procedure ObtenerPrefijo(msj : mensaje; ultimo: integer; var prefijo: TPrefijo);También es posible evitar este procedimiento, actualizando el prefijo cada vez que se agrega un carácter al mensaje. Hay que tener en cuenta que cada vez que se agrega un espacio el prefijo se hace vacío.

Las secuencias se ordenan por frecuencia. En ambos casos se recorren circularmente.

Puede resultar de utilidad las funciones:

function largo(s : secuencia): integer;
{retorna el largo de la secuencia }

function ObtenerCaracter(s: secuencia, i: integer): char;
{
retorna el caracter que se encuentra en la posición i dentro de la secuencia
si i>largo(s) lo resuelve circularmente
}

Ordenamiento por frecuencia
En el método multitap la secuencia asociada con una tecla se recorre en el orden preestablecido en la configuración del teclado. En cambio en la predicción por prefijos se debe recorrer de acuerdo con las frecuencias de cada caracter relativas al prefijo existente. Para esto conviene definir un procedimiento que realice el ordenamiento:

procedure OrdenarSecuencia(tabla : TablaF; prefijo: TPrefijo; var s: secuencia);Este procedimiento recibe la secuencia en el orden estándar y la retorna ordenada por frecuencia

-------------------------------------------------------------------------------------------------------------------------
Alguien me podria dar una mano en este programa,un empujon aunq sea,ya la primera parte la termine,pero me he tranacado totalmente y necesito una ayudita asi puedo seguir.
Es una tarea que tengo tiempo hasta el viernes 24 de noviembre,bueno si alguien me podria ayudar un cacho,cualquier cosa agreguenme al msn [email protected]
Gracias y disculpen.-
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

RE:Alguien me puede ayudar

Publicado por BrOnKa (1 intervención) el 02/10/2007 18:52:57
hola amigos Soy un Novato en esto De la programacion y ya quisiera hacer mi primer programa en pascal Y Les queria preguntar Que Codigos tengo que usar en pascal para hacer como un quizz ejemplo

intel o amd?

intel

firefox o explorer?

y haci que valla respondiendo pregunta y valla saliendo otra buno eso era todo porfa responder a mi msn [email protected] salu2 y gracias de antemano
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

RE:Alguien me puede ayudar

Publicado por ds (1 intervención) el 01/12/2007 19:13:40
hazlo tu inutil
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