[ Foro de Pascal ]
cordial saludo profesor nacho cabanes y compañeros.
si leo dos palabras por teclado,queria preguntarles como puedo hacer la definicion de variables para poder por cada palabra almacenar en un array la frecuencia de sus letras, ,mi idea es porejemplo si las palabras son:
carro y vaca
tener en dos vectores o en una matriz es que no se como podria ser, para tener porejemplo para la palabra carro un vector con la frecuencia de sus letras, al igual que para la palabra vaca en otro vector la frecuencia de sus letras y luego como podria comparar dichos vectores para saber si son iguales en todas sus frecuencias de letras.
ojala puedan ayudarme es una idea que tengo para un programa y en esta parte estoy bloqueado. mil gracias a todos.
La frecuencia de las letras se puede guardar en un array cuyos índices sean las letras, y que almacene la cantidad de apariciones de cada letra:
var
frecuencia: array['a'..'z'] of integer;
Si tienes varias palabras, podrías usar un array como ese para cada palabra.
gracias profesor Nacho por responder a nuestras consultas.
profesor exactamente lo habia trabajado tal me lo indicas,ahora se que mi idea esta correcta sin embargo tengo el problema de como incremento la frecuencia para la segunda palabra, yo intento hacer lo siguiente:
...
type
talfabeto=array[1..26] of char;
tfrecletraspalabras: array['a'..'z'] of integer;
var
palabra:string[20];
alfabeto:talfabeto;
frecuLetraspal1,frecuLetraspal2:tfrecletraspalabras;
i,j,l:integer;
...
{inicializo a cero los indices para las frecuencias de cada una de las dos palabras}
for l:='a' to 'z' do
begin
frecuLetraspal1[l]:=0;
frecuLetraspal2[l]:=0;
end;
for i:=1 to 26 do {array alfabeto con sus elementos el alfabeto}
alfabeto[i]:=chr(i+96);
for i:=1 to 2 do
begin
writeln('escriba la palabra',i,':');
readln(palabra[i]);
end;
{***** aqui esta mi problema....}
for i:=1 to 2 do
for j:=1 to length(palabra[i]) do
begin
letra:=palabra[j];
for k:=1 to 26 do
if letra=alfabeto[k] then
inc(frecuLetraspal1[chr(k)]);
end;
te quiero pedir tu ayuda a corregirme o indicarme que debo hacer pues lo que intento como ves en este ultimo fragmento es incrementar la frecuencia de las letras de cada palabra( palabra1 y palabra 2), pero la verdad NO SE COMO HACER PARA INCREMENTAR EL CASO DE LA PALABRA2(frecuLetraspal2),como deberia ser el codigo para mejorar lo que intento hacer profesor,y como luego podria comparar los dos arrays: frecuLetraspal1 y frecuLetraspal2. te lo agradeceria es que estoy frenado en ello hace dias. mil gracias por tu atencion y siempre valiosa ayuda.
Si planteas "frecuenciaDeLetras" como un array de dos dimensiones, te será más fácil de automatizar ese tipo de operaciones:
var
frecuLetraspa: array[1..2] of tfrecletraspalabras;
...
for i:=1 to 2 do
for j:=1 to length(palabra[i]) do
begin
letra:=palabra[j];
for k:=1 to 26 do
if letra=alfabeto[k] then
inc(frecuLetraspa[i][chr(k)]);
end;
cordial saludo profesor nacho.
solo una duda al respecto,cuando haces:
inc(frecuLetraspa[i][chr(k)]);
por que puede hacerse de esta forma si frecuLetraspa es un vector y no una matriz, o es que se esta trabajando con vectores paralelos, ojala puedas sacarme de esta duda.
ahora bien profesor ya teniendo para cada palabra sus frecuencias como hago para saber si son iguales, pues yo intento hacer algo pero no me esta saliendo,¿como podria hacerlo, ojala me heches una mano en ello:
yo intento hacer:
identidad:=false;
for l:='a' to 'z' do
if freculetraspal[1][l] = freculetraspal[2][l] then
identidad:=true
else
identidad:=false;
if identidad = true then
writeln('sus frecuencias son iguales')
else
writeln('sus frecuencias no son iguales');
pero siempre me sale en ejecucion:
" sus frecuencias son iguales", que podre estar haciendo mal ?
gracias por tu ayuda.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)