Необходимо зашифровать текст из 121 буквы, его необходимо записать в квадратную матрицу порядка 11 по стокам, начиная с центра (т. е. с элемента, имеющего индексы 6, 6), а затем по часовой стрелке все остальные символы. Может кто раньше подобное делал подкажите.
TS*
19.02.2007 0:23
Цитата(Цырилла @ 18.02.2007 19:03)
Необходимо зашифровать текст из 121 буквы, его необходимо записать в квадратную матрицу порядка 11 по стокам, начиная с центра (т. е. с элемента, имеющего индексы 6, 6), а затем по часовой стрелке все остальные символы. Может кто раньше подобное делал подкажите.
Просто используй алгоритм заполнение массива по спирали от середины, поищи здесь на форуме, если нет, то поищи в интернете, точно видел.
Заполнение матрицы по спирали + воспользуйся поиском выкладывались разные варианты, посмотри как это делается.
volvo
19.02.2007 18:24
Насколько я помню, все, что выкладывалось на форуме - для заполнения "по спирали" - из какого-то угла матрицы. Спирали, раскручивающейся из центра я по крайней мере не нашел...
Цырилла Вот пример заполнения матрицы так, как тебе нужно - обработку текста добавь сама...
function incr(var X: integer): integer;
begin
incr := X; inc(X);
end;
const
n = 11;
var
n2,i,j,k,w : integer;
a: array[1 .. n, 1 .. n] of word;
begin
w := 1; n2 := n div2;
if n mod2 = 1then a[n2 + 1, n2 + 1] := incr(w);
for k := 0to n2 - 1dobeginfor j := n2-k+1to n-n2+k+1do a[n2-k,j] := incr(w);
for i := n2-k+1to n-n2+k+1do a[i,n-n2+k+1] := incr(w);
for j := n-n2+k downto n2-k do a[n-n2+k+1,j] := incr(w);
for i := n-n2+k downto n2-k do a[i,n2-k] := incr(w);
end;
for i := 1to n dobeginfor j := 1to n do write(a[i,j]:4);
writeln;
end;
end.
klem4
19.02.2007 20:53
Цитата
раскручивающейся из центра я по крайней мере не нашел...
Была, как щас помню писал прогу, там задавалась точка в матрице (любая) в нее ставился ноль белым цветом а далее ее надо было "окружать" единичками, двойками итд по окружностям разными цветами, найти правда пока тоже не могу...
Необходимо зашифровать текст из 121 буквы, его можно записать в квадратную матрицу порядка 11 по строкам, а затем прочитать по спирали, начиная с центра (т. е. с элемента, имеющего индексы 6, 6). попытался сделать ипользуя готовый уже код,вот что получилось, но переменная vihod почему-то оказывааетяс пустая, плиз хелп!=)
uses crt;
function incr(var X: integer): integer;
begin
incr := X; inc(X);
end;
const
n =11;
var
n2,i,j,k,w : integer;
a: array[1 .. n, 1 .. n] of char;
text,vihod:string;
begin
clrscr;
writeln('Vvedite text');
readln(Text);
if length(text)<n*n thenfor i:=length(text) to n*n do text[i]:='0';
for i:=1to n dofor j:=1to n do
a[i,j]:=Text[(i-1)*n+j];
w := 1; n2 := n div2;
if n mod2 = 1then vihod[incr(w)]:=a[n2 + 1, n2 + 1];
for k := 0to n2 - 1dobeginfor j := n2-k+1to n-n2+k+1do vihod[incr(w)]:=a[n2-k,j];
for i := n2-k+1to n-n2+k+1do vihod[incr(w)]:=a[i,n-n2+k+1];
for j := n-n2+k downto n2-k do vihod[incr(w)]:=a[n-n2+k+1,j];
for i := n-n2+k downto n2-k do vihod[incr(w)]:=a[i,n2-k];
end;
for i := 1to n dobeginfor j := 1to n do write(a[i,j]:4);
writeln;
end;
writeln(vihod);
readkey;
end.
volvo
25.12.2008 2:52
Цитата
переменная vihod почему-то оказывааетяс пустая
Само собой, ты же полез во внутреннее представление сам, не используя процедуры Паскаля, значит, ответственность за установку длины - тоже на тебе:
1)
text, vihod:string[n*n]; { <--- ограничить длину }
2)
vihod[0] := chr(n*n); { <--- Добавить вот это }
writeln(vihod);
readkey;
Feagor
25.12.2008 2:59
пасибо, volvo,лови + ну и готовый листинг, если кому-то понадобится
uses crt;
function incr(var X: integer): integer;
begin
incr := X; inc(X);
end;
const
n = 11;
var
n2,i,j,k,w : integer;
a: array[1 .. n, 1 .. n] of char;
text,vihod:string[n*n];
begin
clrscr;
writeln('Vvedite text');
readln(Text);
if length(text)<n*n thenfor i:=length(text) to n*n do text[i]:='0';
for i:=1to n dofor j:=1to n do
a[i,j]:=Text[(i-1)*n+j];
w := 1; n2 := n div2;
if n mod2 = 1then vihod[incr(w)]:=a[n2 + 1, n2 + 1];
for k := 0to n2 - 1dobeginfor j := n2-k+1to n-n2+k+1do vihod[incr(w)]:=a[n2-k,j];
for i := n2-k+1to n-n2+k+1do vihod[incr(w)]:=a[i,n-n2+k+1];
for j := n-n2+k downto n2-k do vihod[incr(w)]:=a[n-n2+k+1,j];
for i := n-n2+k downto n2-k do vihod[incr(w)]:=a[i,n2-k];
end;
for i := 1to n dobeginfor j := 1to n do write(a[i,j]:4);
writeln;
end;
vihod[0]:=chr(n*n);
writeln(vihod);
readkey;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.