Título: Ejercicio Pascal Publicado por: cosmolei en 3 Junio 2016, 21:28 pm Hola debo de resolver el siguiente ejercicio:
Ficheros y césar En la práctica 3 construiste un programa que calculaba el cifrado César de una frase, dado un desplazamiento. Para descifrar un texto cifrado, es necesario conocer el desplazamiento con el que se codificó para recuperar la letra. No obstante, si no se conoce dicho desplazamiento, se puede deducir. Si el texto está en español se sabe que, estadísticamente, la letra que más se utiliza es la letra “e” (tanto mayúscula como minúscula). Por tanto, se puede asumir que la letra que más aparece en el texto cifrado es la representación de la “e” y con ello deducir el desplazamiento. Escriba un programa PASCAL que descifre un fichero de texto (cuyo nombre es introducido por el usuario) utilizando la técnica anteriormente expuesta y lo muestre por pantalla, junto con la letra que más se repite y el desplazamiento usado, tal y como se muestra en el siguiente ejemplo: Contenido del fichero 'texto.txt' Salida del programa Kr sgy hxkbk jkyvoyzk ky kr zktkx ktikxxgjuy ruy sktkyzkxky jkr jkyzotu. Introduce nombre de fichero: texto.txt La letra que mas aparece es la: k El desplazamiento estimado es de: 6 texto.txt descifrado es: El mas breve despiste es el tener encerrados los menesteres del destino. Para poder descifrar el texto, debes haber deducido primero el desplazamiento y, para ello, debes haber buscado la letra que más aparece, y compararla con la “e” para calcular el desplazamiento. Puede que te sea útil recordar alguno de los ejercicios de la práctica 4. Para ello he llevado a cabo lo siguiente: program descifrado; type tpVector = array ['a'..'z'] of integer; function aMinus(letra:char):char; // Pre: letra es una letra mayuscula o minuscula // Post: la funcion devuelve la letra minuscula begin if (letra>='A') and (letra<='Z') then aMinus:=chr(ord(letra)-ord('A')+ord('a')) else aMinus:=letra; end; procedure Apariciones (var f:text;var v:tpVector;var des:integer); // Pre: Texto es el fichero que vamos a descifrar,v es el vector que contiene el numero de la aparicion de cada letra, des es el desplazamiento respecto de 'e' // Post: El procedimiento devuelve el valor del desplazamiento, y la letra que mas ha aparecido var i,a:char; begin for i:='a' to 'z' do v:=0; reset(f); while not eof(f) do begin while not eoln(f) do begin read(f,i); if ((i>='A') and (i<='Z')) or ((i>='a') and (i<='z')) then begin aMinus(i); v:=v+1; end; readln(f); end; a:='a'; for i:='a' to 'z' do begin if v[a]>v then a:=i else a:=a; end; {Comparacion del vector para ver cual es la letra que mas veces ha aparecido} write('La letra que mas aparece es la: ',a); des:=ord(a)-ord('e'); write('El desplazamiento esperado es de: ',des); {Comparar la letra que mas ha aparecido con la e para concretar el desplazamiento} end; end; procedure descifrarcesar (var texto:text; var des:integer;); // Pre: Texto es el fichero que vamos a descifrar,des es el desplazamiento que vamos a des aplicar a cada letra del fichero // Post: El procedimiento devuelve el fichero de texto descifrado var i,a:char; begin reset(f); while not eof(texto) do begin while not eoln(texto) do begin read(f,i); if ((i>='A') and (i<='Z')) or ((i>='a') and (i<='z')) then begin a:=char(ord(i)+des); write(a); end; end; readln(f); writeln(); end; end; var fichero:text; a:string[20], vectorletras:tpVector; d:integer; begin write('Introduce nombre de fichero: '); read(a); {No apliczar funcion dentro de funcion} assign(f,a); Apariciones(fichero,vectorletras,d): descifrarCesar(fichero,des); end. me da error al compilar en el procedure Descifrar cesar de: syntax error identifier expected but ')' found Alguien le ve algun fallo más y me puede decir como solucionar este? Título: Re: Ejercicio Pascal Publicado por: _TTFH_3500 en 4 Junio 2016, 02:39 am Código
El punto y coma antes del paréntesis de cerrado no va. Como Pascal no es Case-Sensitive trata de escribir los identificadores con mayúscula al comienzo y otros todo es mayúscula como EOLN EOF AND OR BEGIN END VAR TYPE Queda mucho más legible. Ejemplo: Código
Título: Re: Ejercicio Pascal Publicado por: cosmolei en 4 Junio 2016, 10:30 am Código
El punto y coma antes del paréntesis de cerrado no va. Como Pascal no es Case-Sensitive trata de escribir los identificadores con mayúscula al comienzo y otros todo es mayúscula como EOLN EOF AND OR BEGIN END VAR TYPE Queda mucho más legible. Ejemplo: Código
Hola, he conseguido ya que el programa se compile, pero una vez lo ejecuto me da un runtime error que no consigo solucionar, no veo donde esta el problema, si me pudierais os lo agradecería |