Модераторы: 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) dos[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