IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Шифровальный квадрат, Шифровка и дешифровка текста
сообщение
Сообщение #1


Гость






Помогите со след. задачей.
Дана след. матрица:
(0, 1, 0, 1, 0, 0, 1, 0)
(0, 0, 0, 0, 1, 0, 0, 0)
(1, 0, 1, 0, 0, 0, 1, 0)
(0, 0, 0, 1, 0, 0, 0, 0)
(0, 1, 0, 0, 0, 1, 0, 0)
(1, 0, 0, 0, 1, 0, 0, 0)
(0, 0, 1, 0, 0, 0, 1, 0)
(0, 0, 0, 1, 0, 0, 0, 1)
Вводится строка. Просматривается шифр. квадрат, если его элемент равен 1, то в новую символьную матрицу 8x8 на пересечении i-ого строки и j-ого столбца, т.е. там, где была 1 в шифр. квадрате, ставится текущий символ строки. Если шифр. кв. закончился, а строка нет, то шифр. кв. поворачивается вправо на 90 градусов и начинается просмотр нового шифр. кв. Процесс происходит пока не закончится строка. В рез-те мы получили симв. матрицу с зашифрованным текстом.
Стока длиной не более 64 символов.
Программу написал, но работет она неправильно, помогите найти ошибку или какой-нибудь др. метод решения. Заранее благодарю.
Вот код программы:
Код

uses
 Crt;
type
 Mass = array [1..8, 1..8] of 0..1;
var
 S, S1 : String;
 NewM : array [1..8, 1..8] of Char; {Матрица с зашифрованным текстом}
 P, I, J : Word;
 Bool : Boolean;
const
 Matr : Mass = ((0, 1, 0, 1, 0, 0, 1, 0),
                       (0, 0, 0, 0, 1, 0, 0, 0),
                       (1, 0, 1, 0, 0, 0, 1, 0),
                       (0, 0, 0, 1, 0, 0, 0, 0),
                       (0, 1, 0, 0, 0, 1, 0, 0),
                       (1, 0, 0, 0, 1, 0, 0, 0),
                       (0, 0, 1, 0, 0, 0, 1, 0),
                       (0, 0, 0, 1, 0, 0, 0, 1));

procedure ReadData;
var
 F : Text;
begin
 Assign(F, 'Text.txt');
 Reset(F);
 ReadLn(F, S);
 Close(F)
end;

procedure Povorot(var A : Mass);
var
 B : Mass;                          {Поворот матрицы A на 90 градусов}
 I, J : Word;
begin
 for I := 1 to 8 do
   for J := 1 to 8 do B[I, J] := 0;
 for I := 1 to 8 do
   for J := 1 to 8 do B[I, 9 - J] := A[J, I];
 for I := 1 to 8 do
   for J := 1 to 8 do A[I, J] := B[I, J];
end;

begin
 ClrScr;
 ReadData;
 for I := 1 to 8 do
   for J := 1 to 8 do NewM[I, J] := ' ';
 P := 1; Bool := True;
 while P <= Length(S) do
   begin
      I := 1; J := 1;
      while (I <= 8) and (Bool) do
         begin
            while J <= 8 do
               begin
                  if Matr[I, J] = 1
                  then
                     begin
                       NewM[I, J] := S[P];
                       Inc(P);
                       if P > Length(S)
                       then
                          begin
                            Break;
                            Bool := False
                          end;
                     end;
                  Inc(J)
               end;{Конец цикла с J}
            Inc(I);
            J := 1;
         end;{Конец цикла с I}
      if (P = 17) or (P = 33) or (P = 49)
      then Povorot(Matr)
   end;
 S1 := '';
 for I := 1 to 8 do
   for J := 1 to 8 do S1 := S1 + NewM[I, J];
 I := Length(S1);
 while S1[I] = ' ' do
   begin
     Delete(S1, I, 1);
     Dec(I)
   end;
 Write(S1);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Значит, первое, что бросается в глаза - это то, КАК ты реализовал процедуру Povorot blink.gif
Я бы делал так:
Procedure Povorot(Var a: Mass);
var
B: Mass;
i, j: integer;
begin
for i := 1 to n do
for j := 1 to n do
B[j, n - i + 1] := m[i, j];
a := B;
end;


И потом, как именно ты определяешь, что программа работает неправильно? У тебя есть какие-то тесты?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


может я чего-то не понимаю, но что делать в том случае если после очередного поворота матрицы единичка окажется на том месте на котором уже была, то етсь букву надо записать на то место, которое уже занято ??


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 15:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name