elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicio Pascal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio Pascal  (Leído 3,670 veces)
cosmolei

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ejercicio Pascal
« 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?


En línea

_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Re: Ejercicio Pascal
« Respuesta #1 en: 4 Junio 2016, 02:39 am »

Código
  1. Procedure descifrarcesar (VAR texto: text; VAR des: Integer);

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
  1. PROGRAM Muestra2 (input, output);
  2. CONST
  3.    medio = 0.5;
  4. VAR
  5.    num  : Real;
  6.    a, b : Integer;
  7. BEGIN
  8.    ReadLn(num); (* Obtener un valor para num de
  9.                           la entrada estandar *)
  10.  
  11.    a := round (num);
  12.    b := trunc (num + medio);
  13.    WriteLn (num, a, b) (* Exhibir num, a, y b *)
  14. END.
  15.  


En línea

cosmolei

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ejercicio Pascal
« Respuesta #2 en: 4 Junio 2016, 10:30 am »

Código
  1. Procedure descifrarcesar (VAR texto: text; VAR des: Integer);

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
  1. PROGRAM Muestra2 (input, output);
  2. CONST
  3.    medio = 0.5;
  4. VAR
  5.    num  : Real;
  6.    a, b : Integer;
  7. BEGIN
  8.    ReadLn(num); (* Obtener un valor para num de
  9.                           la entrada estandar *)
  10.  
  11.    a := round (num);
  12.    b := trunc (num + medio);
  13.    WriteLn (num, a, b) (* Exhibir num, a, y b *)
  14. END.
  15.  

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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejercicio en pascal
Ejercicios
esplu 2 4,178 Último mensaje 30 Noviembre 2009, 13:02 pm
por esplu
ejercicio de pascal « 1 2 »
Programación General
SXF 10 6,616 Último mensaje 9 Noviembre 2010, 23:38 pm
por Lunfardo
pascal que se ha cortedo ejercicio
Programación General
manu3742 1 2,732 Último mensaje 14 Abril 2011, 16:14 pm
por Khronos14
Ejercicio Pascal
Programación General
BioHazardTM 3 2,335 Último mensaje 5 Enero 2012, 10:43 am
por W0lFy
Ayuda con Ejercicio en Pascal?
Programación General
horacio_b92 1 1,773 Último mensaje 6 Octubre 2012, 13:37 pm
por n0z
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines