Необходимо зашифровать текст из 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 div 2;
if n mod 2 = 1 then a[n2 + 1, n2 + 1] := incr(w);
for k := 0 to n2 - 1 do begin
for j := n2-k+1 to n-n2+k+1 do a[n2-k,j] := incr(w); for i := n2-k+1 to n-n2+k+1 do 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 := 1 to n do begin for j := 1 to 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 then for i:=length(text) to n*n do text[i]:='0'; for i:=1 to n do for j:=1 to n do a[i,j]:=Text[(i-1)*n+j]; w := 1; n2 := n div 2;
if n mod 2 = 1 then vihod[incr(w)]:=a[n2 + 1, n2 + 1];
for k := 0 to n2 - 1 do begin
for j := n2-k+1 to n-n2+k+1 do vihod[incr(w)]:=a[n2-k,j]; for i := n2-k+1 to n-n2+k+1 do 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 := 1 to n do begin for j := 1 to 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 then for i:=length(text) to n*n do text[i]:='0'; for i:=1 to n do for j:=1 to n do a[i,j]:=Text[(i-1)*n+j]; w := 1; n2 := n div 2;
if n mod 2 = 1 then vihod[incr(w)]:=a[n2 + 1, n2 + 1];
for k := 0 to n2 - 1 do begin
for j := n2-k+1 to n-n2+k+1 do vihod[incr(w)]:=a[n2-k,j]; for i := n2-k+1 to n-n2+k+1 do 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 := 1 to n do begin for j := 1 to n do write(a[i,j]:4); writeln; end; vihod[0]:=chr(n*n); writeln(vihod); readkey; end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.