Модераторы: Oleg_D, Модераторы
deka47 писал(а):Спасибо! Полностью понял теперь! Очень помогли!
var CKey: integer; {ключ}
function Crypt(arg: char): char;
var x: integer;
begin
x:=Ord(arg)+CKey;
if x>255 then x:= x-256+32;
Crypt:= Char(x);
end; {шифрование символа}
function DeCrypt(arg: char): char;
var x: integer;
begin
x:=Ord(arg)-CKey;
if x<32 then x:= x+256-32;
DeCrypt:= Char(x);
end; {дешифрование символа}
procedure CryptString(var s: string); {считывания строки s в процедуру}
var k: integer;
arg: string;
begin
for k:=1 to Length(s) do
s[k]:=Crypt(arg[k]);
end; {шифрование всех символов строки s}
procedure DeCryptString(var s: string); {считывание зашифрованной строки s в процедуру}
var k: integer;
arg: string;
begin
for k:=1 to Length(s) do
s[k]:= DeCrypt(s[k]);
end; {дешифрование всех зашифрованных символом процедурой CryptString}
var f, q, m: text; {3 текстовых файла}
Oper: integer;
s: string;
begin
write ('Key - '); readln (Ckey); {пишем ключ}
Writeln ('Укажите операцию: 1 – шифровать, 2 – дешифровать, прочие - выход'); Readln(Oper);
case Oper of
1: begin {если 1, то шифруем тхт документ в другой тхт документ}
assign (f, 'C:\Users\Text.txt');
reset (f); {открытие обычного тхт документа, с обычным читабетельным текстом}
assign (q, 'C:\Users\Crypt.txt');
rewrite (q); {открытие пустого тхт документа для записи зашифрованного текста}
while not eof(f) do begin readln (f, s); CryptString(s); writeln (q, s); end; {пока не найден конец строки в тхт документе f мы читаем строку из
файла f и заносим ее в стринговую s, потом шифруем строку s, потом записываем в пустой файл q эти зашифрованные строки}
close (f); {закрываем}
close (q); {закрываем}
end;
2: begin {если 2, то дешифруем тхт документ в другой тхт документ}
assign (q, 'C:\Users\Crypt.txt');
reset (q); {открытие тхт документа с зашифрованным текстом, который я, как бы, сделал выше}
assign (m, 'C:\Users\DeCrypt.txt');
rewrite (m); {открытие пустого тхт документа для записи рассшифрованного текста}
while not eof(q) do begin readln (q, s); DeCryptString(s); writeln (m, s); end; {пока не найден конец строки в тхт документе q мы читаем строку из
файла q и заносим ее в стринговую s, потом рассшифруем строку s, потом записываем в пустой файл m эти рассшифрованные строки}
close (q); {закрываем}
close (m); {закрываем}
end;
end;
end.
deka47 писал(а):Она у меня шифрует в Crypt что-то, когда открываю Crypt.txt, то там вижу набор непонятных символов, но потом с Crypt она не дешифрует в Decrypt, тот текст, который был в Text.txt. Что не верно?
procedure CryptString(var arg:string);
var k: integer;
begin
for k:=1 to Length(arg) do
arg[k]:=Crypt(arg[k]);
end;
procedure DeCryptString(var arg:string);
var k:integer;
begin
for k:=1 to Length(arg) do
arg[k]:=DeCrypt(arg[k]);
end;
deka47 писал(а):Все дошло, если я ввел в процедуре переменную s, то мне стоило было сделать это и в функции для нормального фунциклирования программы. Спасибо!
procedure CryptString(var s:string);
var k: integer;arg:string;
begin
arg:=s;
for k:=1 to Length(arg) do
arg[k]:=Crypt(arg[k]);
end;
procedure CryptString(var s: string); {считывания строки s в процедуру}
var k: integer;
arg: string;
begin
for k:=1 to Length(s) do
s[k]:=Crypt(arg[k]);
end; {шифрование всех символов строки s}
s[k]:=Crypt(arg[k]);
deka47 писал(а):Она у меня здесь никакого значения не набывает и нигде не используется, пусть будет, она же никак не влияет на программу?
s[k]:=Crypt(arg[k]);
deka47 писал(а):Этот arg не процедурный, а от функции, верно?
Я просто ввел переменную и ничего с ней не делал, как она влияет на программу?
procedure CryptString(var s: string);
var k: integer;
arg: string ;
for k:=1 to Length(s) do
s[k]:=Crypt(arg[k]);
s[k]:=Crypt(s[k]);
deka47 писал(а):А мое утверждение на счет того, что переменная в обьявленная в функции должна совпадать с переменной обьявленной в процедуре не верно?
Paster Fob писал(а):Так понятно?
const key=5; {наш ключ}
function charcrypt(arg:char):char; {функция шифрации символа}
var x:integer; {локальная переменная}
begin {тело функции}
x:=ord(arg)+key; {присваиваем x=код символа+ключ}
if x>255 then x:=x-256+32; {избавляемся от кодов управляющих символов}
charcrypt:=char(x); {присваиваем имени функции символ через код x}
end; {конец функции }
function chardec(arg:char):char;
var x:integer;
begin
x:=ord(arg)-key;
if x<32 then x:=x+256-32;
chardec:=char(x)
end;
procedure strcrypt(var arg:string); {процедура шифрации строки через функцию}
var x:integer;
begin
for x:=1 to length(arg) do
arg[x]:=charcrypt(arg[x]); {возвращаем сроку через символы функции }
end;
procedure strdec(var arg:string);
var x:integer;
begin
for x:=1 to length(arg) do
arg[x]:=chardec(arg[x]);
end;
{обьявления глобальных переменных}
var s:string;
x:integer;
begin {начало главной программы}
repeat
writeln('введите строку'); readln(s);
writeln('введите цифру 1 для шифровки 2 для дешифровки или другое для выхода');
readln(x);
case x of
1: strcrypt(s);
2: strdec(s);
else break; {прерываение цикла repeat}
end;
writeln(s);readln;
until false; {бесконечный цикл}
end.
function charcrypt(arg:char;key:integer):char; {функция шифрации символа}
var x:integer; {локальная переменная}
begin {тело функции}
x:=ord(arg)+key; {присваиваем x=код символа+ключ}
if x>255 then x:=x-256+32; {избавляемся от кодов управляющих символов}
charcrypt:=char(x); {присваиваем имени функции символ через код x}
end; {конец функции }
function chardec(arg:char;key:integer):char;
var x:integer;
begin
x:=ord(arg)-key;
if x<32 then x:=x+256-32;
chardec:=char(x)
end;
procedure strcrypt(var arg:string;key:integer); {процедура шифрации строки через функцию}
var x:integer;
begin
for x:=1 to length(arg) do
arg[x]:=charcrypt(arg[x],key); {возвращаем сроку через символы функции }
end;
procedure strdec(var arg:string;key:integer);
var x:integer;
begin
for x:=1 to length(arg) do
arg[x]:=chardec(arg[x],key);
end;
{обьявления глобальных переменных}
var s:string;
x,key:integer;
begin {начало главной программы}
repeat
writeln('введите строку'); readln(s);
writeln('введите цифру 1 для шифровки 2 для дешифровки или другое для выхода');
readln(x);
if (x=1) or (x=2) then begin
writeln('Введите ключ');
readln(key);
end;
case x of
1: strcrypt(s,key);
2: strdec(s,key);
else break; {прерываение цикла repeat}
end;
writeln(s);
until false; {бесконечный цикл}
end.
function charcrypt(arg:char;key:integer):char; {функция шифрации символа}
var x:integer; {локальная переменная}
begin {тело функции}
x:=ord(arg)+key; {присваиваем x=код символа+ключ}
if x>255 then x:=x-256+32; {избавляемся от кодов управляющих символов}
charcrypt:=char(x); {присваиваем имени функции символ через код x}
end; {конец функции }
procedure strcrypt(var arg:string;key:integer); {процедура шифрации строки через функцию}
var x:integer;
begin
for x:=1 to length(arg) do
arg[x]:=charcrypt(arg[x],key); {возвращаем сроку через символы функции }
end;
Scraper писал(а):сидел минут 10 и только начал понимать, получается так что функция не видит ключа без помощи процедуры, так как именно процедура передает данные переменных в функцию. Верно?
Scraper писал(а):в 30 лет начинать учиться не поздно?
Вернуться в Книга "Песни о Паскале"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1