Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 25.09.2012, 12:53   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela007 Посмотреть сообщение
сказали сегодня что еще и раскодировка нужна((((в задание только кодировка была....вот насчет второго даже идей нет(((
Ладно, держите. Правда, я там малость и кодирующую часть переделал. Обнаружилось, что если количество символов в исходном тексте не кратно длине блока, то при кодировке/декодировке последний символ может пропасть. А потому в этой ситуации исходный текст дополняется пробелами до получения кратности. Что, кстати, сильно упрощает дальнейшую работу с текстом.
Код:
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.
Миниатюры
decode.jpg  
Vladimir_S вне форума   Ответить с цитированием

Старый 25.09.2012, 12:53
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот обсуждения, которые имеют общее с вашей темой

Создать БП
Как создать админ?
Помогите создать программу на турбо Паскале
Создать вирус
Как создать ICQ-чат?
Как создать свой FTP?

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.