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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 14:34   #1
dimusiko
 
Регистрация: 15.12.2010
Сообщений: 8
Радость шифрование методом магического квадрата!

доброго времени суток!. задали сделать программу которая зашифровывает и дешифровывает текст до 25 символов методом магического квадрата,с простым и понятным интерфейсом. интрерфейс я разработал а как прописать в delphi 7 магический квадрат не могу понять. задали сделать сетки квадратов
2х2
3х3
4х4
5х5
тоесть максимально будет 25 букв зашифровываться, хотел сразу сделать 5х5 сетку и остальные слоты каждый раз забивать нулями или * препод не разрешил, сказал слишком легко... легко то оно легко, но видать не для меня... кто разбирается помогите пожалуйста
Вложения
Тип файла: zip ИБ.zip (4.4 Кб, 71 просмотров)
dimusiko вне форума Ответить с цитированием
Старый 30.03.2012, 14:42   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

магические квадраты существуют с размерности начиная от 3... это так... на всякий случай... погуглил и нашел вот что...
Код:
Const
  mn = 16;

Var
  p: Boolean;

Procedure Swap(Var a, b: Integer);
  Var T: Integer;
  Begin
    T := a; a := b; b := T
  End;

Procedure CreateMagic(n: Integer);
  Var
    i, j, k, s, b, r, m: Integer;
    a: Array[1 .. mn, 1 .. mn] Of Integer;
  Begin
    p := True; 

    If Odd(n) Then
      Begin
        i := 1; j := Succ(n div 2);
        For k := 1 To Sqr(n) do
          Begin
            a[i,j] := k;
            If k mod n = 0 Then Inc(i)
            Else
              Begin
                Dec(i); Inc(j);
                If i = 0 Then i := n;
                If j > n Then j := 1
              End
          End;
      End

    Else
      If n mod 4 = 0 Then
        Begin
          k := 1;
          For i := 1 To n Do
            For j := 1 To n Do
              Begin
                a[i, j] := k; Inc(k)
              End;
          j := 2; m := n div 2;
          For i := 1 To m Do
            For k := 1 To m Div 2 Do
              Begin
                If j = Succ(m) Then j := 2
                Else
                  If j = (m + 2) Then j := 1;
                  s := Succ(n - i); b := Succ(n - j);
                  Swap(a[i, j], a[s, b]);
                  Swap(a[i, b], a[s, j]);
                  Inc(j, 2)
              End
        End

      Else
        If n <> 2 Then
          Begin
            k := 1;
            For i := 1 To n Do
              For j := 1 To n Do
                Begin
                  a[i, j] := k; Inc(k)
                End;
            r := Pred(n div 2) div 2; m := n div 2;

            For i := 1 To m Do
              Begin
                j := i;
                For k := 1 To r Do
                  Begin
                    If j > m Then j := 1;
                    s := Succ(n - i); b := Succ(n - j);
                    Swap(a[i, j], a[s, b]);
                    Swap(a[i, b], a[s, j]);
                    Inc(j)
                  End
              End;

            i := 1; j := Succ(r);
            For k := 1 To m Do
              Begin
                If j > m Then j := 1;
                s := Succ(n - i);
                Swap(a[i, j], a[s, j]);
                Inc(i); Inc(j)
              End;

            i := 1; j := r + 2;
            For k := 1 To m Do
              Begin
                If j > m Then j := 1;
                b := Succ(n - j);
                Swap(a[i, j], a[i, b]);
                Inc(i); Inc(j)
              End
          End

        Else p := False;

    If p Then
      Begin
        For i := 1 To n Do
          Begin
            For j := 1 To n Do
              Write(a[i, j]: 4);
            WriteLn
          End
      End
    Else
      WriteLn( 'do not exists' )
  End;

Var
  n: Integer;

begin
  WriteLn('n = '); ReadLn(n);
  CreateMagic(n);
  ReadLn
end.
в свое время данную шифровку делал обычным прописыванием магического квадрата в самом коде...)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование методом гаммирования student_63 Безопасность, Шифрование 9 28.04.2012 17:36
Формирование магического квадрата waitisova C# (си шарп) 0 25.05.2011 22:00
Шифрование методом перестановок Sphex Фриланс 7 18.08.2010 14:06
Шифрование методом замещения Skytis Помощь студентам 3 25.05.2008 10:24
Шифрование методом сдвига Paul Hindenburg Общие вопросы Delphi 5 24.01.2008 08:30