isaac2004 wrote:
hello how would I create an Ada program to take an encrypted string
from a txt file and decrypt it. i have a so so program but it doesnt
work i cant get the algorithm right.
an example is this
Mother would be Mtoehr encrypted
so its just like cutting the string in half and rearranging the
chaacters to fix the decryption
my example uses a txt file which the contents are
encrypted version
aaabbb
real code
ababab
Your two examples above do not agree.
Following the encrypted example, Mother would encrypt to
Mteohr. I suspect that may have been a slip of the fingers during
typing, but it does add confusion to your requirements.
here is the program i have so far
with Ada.Text_Io;
use Ada.Text_Io;
procedure Assignment_4 is
--|This program takes in a railfence encryption and deciphers it
--|Author: Isaac Levin
subtype Message is String (11024);
Codedtext : Message; - string of coded text
Plaintext : Message; - plain text message
Indata : File_Type;
Length : Natural := 1; size of the encrypted message
J : Integer := 0; midpoint for odd and even strings
K : Integer := 2; for the encrypted string
begin -- Assingment_4
the proper text file and read the code into the string
CodedText
(
File =Indata,
Mode =In_File,
Name ="test.txt");
while not EFile(File =Indata) loop
Get(
File =Indata,
Item =Codedtext (Length));
Length := Length + 1;
end loop;
the length to account for odd or even string lengths
if Length REM 2 = 0 then
J := 0;
else
J := 1;
end if;
the first charcter of the coded message into the decoded
one
if Length 1 then
Plaintext(1) := Codedtext(1);
end if;
every character of the encoded string up to the halfway
point
every odd position in the decoded one
for I in 2(Length - 1) loop
if I REM 2 = 0 then
Plaintext(I + 1) := Codedtext(K);
K := K + 1;
else
null;
end if;
end loop;
K := 1;
every character of the encoded string past the halfway
point
every even position in the decoded one
for I in 2(Length - 1) loop
if I REM 2 = 0 then
Plaintext(I) := Codedtext((Length/2) + J + K);
K := K + 1;
else
null;
end if;
end loop;
In both loops you are placing characters only into
even positions in Plaintext. What about the odd positions?
It also appears that you can do all the work in a single loop,
cutting the time in half during which you traverse the strings.
First_Half_Index : Positive := 1;
Second_Half_Index : Positive := 2;
for Code_Index in Codetext'Length loop
if Code_Index <= Codetext'Length / 2 then
Plaintext(First_Half_index) := Codetext(Code_Index);
First_Half_Index := First_Half_Index + 2;
else
Plaintext(Second_Half_Index) := Codetext(Code_Index);
Second_Half_Index := Second_Half_Index + 2;
end if;
end loop;
I am not sure how the encryption deals with odd sized strings.
Does the First Half or the Second Half get the extra character?
Adjust the algorithm above accordingly.
Jim Rogers