Необходимо зашифровать текст из 121 буквы, его необходимо записать в квадратную матрицу порядка 11 по стокам, начиная с центра (т. е. с элемента, имеющего индексы 6, 6), а затем по часовой стрелке все остальные символы.
Может кто раньше подобное делал подкажите.
http://forum.pascal.net.ru/index.php?showtopic=2694&st=0&p=27640entry27640
Заполнение матрицы по спирали + воспользуйся поиском выкладывались разные варианты, посмотри как это делается.
Насколько я помню, все, что выкладывалось на форуме - для заполнения "по спирали" - из какого-то угла матрицы. Спирали, раскручивающейся из центра я по крайней мере не нашел...
Цырилла
Вот пример заполнения матрицы так, как тебе нужно - обработку текста добавь сама...
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.
Эта что-ли?
http://forum.pascal.net.ru/index.php?s=&showtopic=13790&view=findpost&p=80218
Так тут наоборот - от границ в центр матрицы...
Огромное спасибо, это как раз то, что нужно
Необходимо зашифровать текст из 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.
text, vihod:string[n*n]; { <--- ограничить длину }
vihod[0] := chr(n*n); { <--- Добавить вот это }
writeln(vihod);
readkey;
пасибо, 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.