Programa para contar palabras
Publicado por Víctor (3 intervenciones) el 28/12/2006 11:57:37
Hola a tod@s!
Estoy haciendo un programa que coge una frase, la separa en palabras y luego te dice cuantas palabras iguales hay en la misma frase....y no consigo hacer casi nada :S.
Consigo separar la primera palabra pero a la hora de introducirla en el array que me va a hacer de lista tengo problemas, a ver si podeis ayudarme, os lo agradecería infinito ^^.
El programa que he hecho es este:
-----------------------------------
PROGRAM palabras (INPUT, OUTPUT);
USES crt;
VAR frase,palabra: STRING;
n,i,a: INTEGER;
lis: ARRAY [1..255] OF STRING;
rep:ARRAY [1..255] OF INTEGER;
aux :BOOLEAN;
BEGIN
clrscr;
WRITELN ('Introduzca la frase y pulse ENTER para finalizar');
READLN (frase);
palabra:=''; //Pongo la variable "palabra" en cadena vacia
a:=1;
n:=1;
WHILE (n>LENGTH(frase)) DO
// La parte que viene selecciona las palabras. Funciona perfectamente
BEGIN
WHILE (frase[a]>='a') AND (frase[a]<='z') DO
BEGIN
palabra:=palabra+frase[a];
a:=a+1;
END;
// La parte que viene a continuación chequea si la palabra existe ya en el array lis que es el que contendrá las palabras o si el array lis en la posicion que está mirando está vacio.
i:=1;
WHILE aux=FALSE DO
BEGIN
IF palabra=lis[i] THEN aux:=TRUE
ELSE
BEGIN
IF lis[i]='' THEN aux:=TRUE ELSE
i:=i+1;
END;
END;
// Aqui iría la parte que, dependiendo de si la palabra ya se encuentra en el array lis sumaría en el array repe uno más (puesto que la palabra ya está repetida) o bien, si la posicion del array lis está vacia, le asignaría el valor de la variable "palabra" y pondría el array repe en 1 (para indicar que esta palabra está una vez. No funciona
IF (palabra=lis[i]) THEN (repe[i]:=repe[i]+1) ELSE
BEGIN
lis[i]:=palabra;
repe[i]:=1;
END;
n:=a+1;
a:=a+1;
palabra:='';
END;
READKEY;
END.
Estoy haciendo un programa que coge una frase, la separa en palabras y luego te dice cuantas palabras iguales hay en la misma frase....y no consigo hacer casi nada :S.
Consigo separar la primera palabra pero a la hora de introducirla en el array que me va a hacer de lista tengo problemas, a ver si podeis ayudarme, os lo agradecería infinito ^^.
El programa que he hecho es este:
-----------------------------------
PROGRAM palabras (INPUT, OUTPUT);
USES crt;
VAR frase,palabra: STRING;
n,i,a: INTEGER;
lis: ARRAY [1..255] OF STRING;
rep:ARRAY [1..255] OF INTEGER;
aux :BOOLEAN;
BEGIN
clrscr;
WRITELN ('Introduzca la frase y pulse ENTER para finalizar');
READLN (frase);
palabra:=''; //Pongo la variable "palabra" en cadena vacia
a:=1;
n:=1;
WHILE (n>LENGTH(frase)) DO
// La parte que viene selecciona las palabras. Funciona perfectamente
BEGIN
WHILE (frase[a]>='a') AND (frase[a]<='z') DO
BEGIN
palabra:=palabra+frase[a];
a:=a+1;
END;
// La parte que viene a continuación chequea si la palabra existe ya en el array lis que es el que contendrá las palabras o si el array lis en la posicion que está mirando está vacio.
i:=1;
WHILE aux=FALSE DO
BEGIN
IF palabra=lis[i] THEN aux:=TRUE
ELSE
BEGIN
IF lis[i]='' THEN aux:=TRUE ELSE
i:=i+1;
END;
END;
// Aqui iría la parte que, dependiendo de si la palabra ya se encuentra en el array lis sumaría en el array repe uno más (puesto que la palabra ya está repetida) o bien, si la posicion del array lis está vacia, le asignaría el valor de la variable "palabra" y pondría el array repe en 1 (para indicar que esta palabra está una vez. No funciona
IF (palabra=lis[i]) THEN (repe[i]:=repe[i]+1) ELSE
BEGIN
lis[i]:=palabra;
repe[i]:=1;
END;
n:=a+1;
a:=a+1;
palabra:='';
END;
READKEY;
END.
Valora esta pregunta


0