Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Создать программу шифровки-дешифровки (http://www.tehnari.ru/f41/t78160/)

Vladimir_S 25.09.2012 12:53

Вложений: 1
Цитата:

Сообщение от gabriela007 (Сообщение 796040)
сказали сегодня что еще и раскодировка нужна((((в задание только кодировка была....вот насчет второго даже идей нет(((

Ладно, держите. Правда, я там малость и кодирующую часть переделал. Обнаружилось, что если количество символов в исходном тексте не кратно длине блока, то при кодировке/декодировке последний символ может пропасть. А потому в этой ситуации исходный текст дополняется пробелами до получения кратности. Что, кстати, сильно упрощает дальнейшую работу с текстом.
Код:

Uses
 SysUtils,windows;
Var
  n,kolsimvolov,i,j,k,l,akey,Code : Integer;
  text,textkey,textunkey,key,key1,S : String;
  p:boolean;

Begin
  SetConsoleOutputCP(1251);
  Write('Enter the number of symbols per block: ');
  Readln(n);
  Repeat
  Write('Enter the key: ');
  Readln(key);
  If Length(key)<>n then writeln('Key must contain ',n,' symbols!');
  p:=true;
  i:=0;
  repeat
    inc(i);
    j:=i;
    repeat
    inc(j);
    if j<=Length(key) then
      if (key[i]=key[j]) then p:=false;
    until Not(p) or (j=Length(key));
  until i=Length(key)-1;
  If Not(p) then writeln('All key symbols must be different!');
  Until (Length(key)=n) and p;
  Write('Enter the text: ');
  Readln(text);
  kolsimvolov:=Length(text);
  If (kolsimvolov mod n)>0 then
  for k:=Length(text)+1 to ((Length(text) div n)+1)*n do
    begin
    text:=text+' ';
    Inc(kolsimvolov);
    end;
  textkey:='';
  For k:=0 to (kolsimvolov div n)-1 do
  begin
    i:=n*k;
    For j:=1 to n do
    begin
      S:=key[j];
      VAL(S,akey,Code);
      textkey:=textkey + text[i+akey]
    end;
  end;
  Writeln('Encoded text:  '+textkey);
  Repeat
  Write('Enter the key: ');
  Readln(key1);
  If key1<> key then writeln('Wrong key!');
  Until key1=key;
  textunkey:='';
  for l:=0 to (kolsimvolov div n)-1 do
  begin
    i:=l*n;
    for j:=1 to n do
    begin
      k:=0;
      repeat
      Inc(k);
      S:=key[k];
      VAL(S,akey,Code);
      until akey=j;
      textunkey:=textunkey+textkey[i+k]
    end;
  end;
  Writeln('Decoded text:  '+textunkey);
  Readln;
End.



Часовой пояс GMT +4, время: 21:42.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.