Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2011, 07:11   #1
Robhefist
Новичок
Джуниор
 
Регистрация: 15.02.2011
Сообщений: 2
По умолчанию Delphi - шифрование с использованием томика со стихами

Задачка досталась не из легких. Помогите кто знает! Вот задание:Каждую букву сообщения шифруют парой чисел – номером строки, где встречается эта буква, и номером позиции буквы в строке. Например:
В каком году рассчитывай,
В какой земле угадывай,
На столбовой дороженьке
Сошлись семь мужиков:
Семь временно обязанных,
Подтянутой губернии
Уезда Терпигорева,
Пустопорожней волости,
Из смежных деревень:
Заплатова, Дырявина,
Разутова, Знобишина,
Горелова, Неелова-
Неурожайка тож,
Сошлися и заспорили:
Кому живется весело,
Вольготно на Руси?
Составьте программу шифрования с использованием своего стихотворения, а с помощью приведенного выше расшифруйте:

14 5, 5 5, 7 5, 5 10, 2 5, 2 1, 2 12, 6 3, 8 5, 15 7, 13 2, 7 8, 14 7, 7 6, 5 4,
6 6, 7 2, 12 5, 5 4, 11 3, 10 13, 5 15, 2 1, 15 1, 1 16, 3 3, 5 3, 6 14, 13 1, 4 5, 8 4, 5 4
Robhefist вне форума Ответить с цитированием
Старый 15.02.2011, 07:17   #2
Robhefist
Новичок
Джуниор
 
Регистрация: 15.02.2011
Сообщений: 2
По умолчанию

Сделал я вот что - убрал пробелы и запятые из текста и исправленный текст поместил в массив - но не знаю верно ли это. а самое трудное - не могу понять как сделать обратное - получая числа через пробел и заптую вывести элемент массива.
Код:
procedure TForm1.Button1Click(Sender: TObject);
const stroka='';
var i,y,y2:integer;
s,t:string;
begin
y2:=0;
for y:=0 to form1.memo1.Lines.Count -1 do begin
if memo1.Lines.Strings[y2] = stroka then begin
memo1.Lines.Delete(y2);
y2:=y2-1;
end;
y2:=y2+1;
end;
t:=memo1.lines.Text;
s:='';
  for i:=1 to Length(t) do
    if t[i]<>' ' then if t[i]<>',' then if t[i]<>#13#10 then
    s:=s+t[i];
    memo1.Lines.text:=s;

end;

и дальше - при нажатии на кнопку кодировать:
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;

 begin
   for i:=0 to Form1.Memo1.Lines.Count-1 do
    for j:=1 to Length(Form1.Memo1.Lines[i]) do
          k[i,j]:=form1.Memo1.Lines[i];
 end;


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 15.02.2011 в 08:28.
Robhefist вне форума Ответить с цитированием
Старый 15.02.2011, 08:54   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
var
s: string;
begin
   for i:=0 to Form1.Memo1.Lines.Count-1 do
    for j:=1 to Length(Form1.Memo1.Lines[i]) do
    begin
         k[i,j]:=form1.Memo1.Lines[i][j];
//или чтобы было понятней
          s:=form1.Memo1.Lines[i];
          k[i,j]:=s[j];
 end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.02.2011, 11:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я набросал небольшой примерчик.
полный текст проекта в приложении
сделана только дешифровка (впрочем, шифрование ничем не сложнее!)

защита от ошибок - минимальнейшая...

Код:
procedure TForm1.Button1Click(Sender: TObject);
const Delimiters = ['.',',','-',':',' '];
var s, sPair, sOne, ssResult : string;
  i, j, iNum1, iNum2, k : integer;
begin
  mOpenText.Lines.Clear;
  ssResult := '';

  for I := 0 to mKey.Lines.Count - 1 do begin
    s := mKey.Lines[i];
    for j := Length(s) downto 1 do
       if s[j] in Delimiters then Delete(s,j,1);
    mKey.Lines[i] := AnsiLowerCase(s);
  end;

  s := Trim(mChiperText.Text);
  if Length(s)=0 then
    Application.MessageBox('Шифрограмма пуста. Делать нечего', 'Информация', MB_OK)
  else begin
    // если последний символ строки не явялется разделителем (запятой),
    //  тогда допишем запятую в конец строки
    if Copy(s, length(s), 1 ) <> ',' then s := s + ',';

    // основной цикл расшифровки
    while Pos(',', s)>0 do begin
       sPair := Trim(Copy(s, 1, Pos(',', s)-1));
       Delete(s, 1, Pos(',', s));
       if Pos(' ',sPair)=0 then begin
          Application.MessageBox(PChar('Ошибка в паре чисел: '+sPair),
                          'Ошибка', MB_OK);
          Exit;
       end
       else begin
          sOne := Trim(Copy(sPair, 1, pos(' ', sPair)));
          val(sOne, iNum1, k);
          sOne := Trim(Copy(sPair, pos(' ', sPair)+1, Length(sPair) - Pos(' ',sPair)));
          val(sOne, iNum2, k);
          if (iNum1>0) and (iNum1<=mKey.Lines.Count) and (iNum2>0) then begin
             ssResult := ssResult +  Copy(mKey.Lines[iNum1-1], iNum2, 1);
          end
          else  begin
            Application.MessageBox(PChar('Ошибка в паре чисел: '+sPair),
                            'Ошибка', MB_OK);
            Exit;
          end;
       end;
    end;

    mOpenText.Text := ssResult;

  end;

end;
список символов, удаляемых из ключевого текста должен быть, разумеется, расширен до необходимого
Вложения
Тип файла: rar Decode_by_poetry.rar (2.3 Кб, 9 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi XE + SQLite 3.7.5 + шифрование KiL0z БД в Delphi 2 27.04.2011 18:34
xor шифрование (delphi) CAMOBAP Помощь студентам 16 11.01.2011 00:02
Шифрование поблочно, Delphi Petr1K Помощь студентам 3 20.12.2010 13:31
Delphi / простейшее шифрование FCSM Помощь студентам 3 19.04.2010 15:48
Шифрование в delphi Ensoph Помощь студентам 3 20.03.2009 15:18