ADA - Criptografiar en ada

 
Vista:

Criptografiar en ada

Publicado por Carlos (1 intervención) el 30/10/2004 14:58:25
Hola a todos.

Tengo problemas para realizar un programa

Lo que tengo que hacer consiste en coger las letras de un texto o frase y sustituirlas por la letra que se encuentra K posiciones en adelante dentro del abecedario (ciclico, despues de la Z esta la A).

ejemplo---> si K=2
CARLOS ----> ECTNQU

El programa inicialmente tiene que pedir al usuario la clave K desde teclado. Tiene que ser un numero entero positivo del 1 al 10. Si el numero es incorrecto se tiene que volver a pedir.

El texto tambien tiene que acabar en punto. Si no acaba en punto se tiene que volver a pedir el texto asta que acabe en punto.

Solo se tienen que cifrar las letras mayusculas. Si la secuencia tiene otros caracteres, estos pasaran al texto cifrado sin cambios.

Ejemplo ----> si K=1
JaVieR ---> KaWieS

Se tiene que hacer el programa solo con variables tipo entero y caracter y con la funcion successor.

Saludos.
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
Imágen de perfil de Alejandro

Programa de cifrado de texto con desplazamiento cíclico

Publicado por Alejandro (155 intervenciones) el 29/06/2023 23:18:09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
with Ada.Text_IO, Ada.Characters.Handling;
 
procedure Cifrado_Ciclico is
   Max_Posiciones : constant Integer := 10; -- Máximo número de posiciones permitidas
   Min_Posiciones : constant Integer := 1; -- Mínimo número de posiciones permitidas
   Caracter_Final : constant Character := '.'; -- Caracter para indicar el final del texto
 
   procedure Pedir_Posiciones (Posiciones : out Integer) is
      begin
         loop
            Ada.Text_IO.Put("Ingrese el número de posiciones (1-10): ");
            Ada.Text_IO.Get(Posiciones);
 
            if Posiciones in Min_Posiciones .. Max_Posiciones then
               exit;
            else
               Ada.Text_IO.Put_Line("Número de posiciones inválido. Intente nuevamente.");
            end if;
         end loop;
      end Pedir_Posiciones;
 
   function Cifrar_Caracter (Caracter : Character; Desplazamiento : Integer) return Character is
      begin
         if Ada.Characters.Handling.Is_Letter(Caracter) and then Ada.Characters.Handling.Is_Uppercase(Caracter) then
            return Ada.Characters.Handling.Successor(Caracter, Desplazamiento);
         else
            return Caracter;
         end if;
      end Cifrar_Caracter;
 
   procedure Cifrar_Texto is
      Texto : String(1 .. 100);
      Posiciones : Integer;
      Caracter : Character;
      Cifrado : Character;
   begin
      Ada.Text_IO.Put_Line("Ingrese el texto a cifrar (terminar con '.'):");
 
      loop
         Ada.Text_IO.Get_Line(Texto);
         exit when Texto(Texto'Last) = Caracter_Final;
         Ada.Text_IO.Put_Line("El texto debe terminar con el caracter '" & Caracter_Final & "'. Intente nuevamente.");
      end loop;
      Pedir_Posiciones(Posiciones);
      for I in Texto'Range loop
         Caracter := Texto(I);
         Cifrado := Cifrar_Caracter(Caracter, Posiciones);
         Ada.Text_IO.Put(Cifrado);
      end loop;
   end Cifrar_Texto;
 
begin
   Cifrar_Texto;
end Cifrado_Ciclico;

Este programa en Ada cumple con los requisitos planteados. Solicita al usuario ingresar un número de posiciones (1-10) y un texto que debe terminar con el caracter '.'. Las letras mayúsculas en el texto son cifradas desplazándolas en el abecedario según el número de posiciones indicado. Los demás caracteres se mantienen sin cambios en el texto cifrado. La función `Ada.Characters.Handling.Successor` se utiliza para obtener la letra cifrada en el abecedario.
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