Заполнить матрицу
Заполнить матрицу по следующей схеме. При этом n- размер матрицы, принимает любое значение от 1 до 10.
Код:
//Говнокод на паскале
Можно так:
Код:
type
Path = array [1 .. 4, 1 .. 4] of Integer;
var
Matrix: Path;
Col, Row: Integer;
begin
Matrix[1, 1] := 1;
Matrix[2, 1] := 2;
Matrix[3, 1] := 3;
Matrix[4, 1] := 4;
Matrix[3, 2] := 5;
Matrix[2, 2] := 6;
Matrix[1, 2] := 7;
Matrix[1, 3] := 8;
Matrix[2, 3] := 9;
Matrix[1, 4] := 10;
Matrix[2, 4] := 11;
Matrix[3, 4] := 12;
Matrix[4, 4] := 13;
Matrix[4, 3] := 14;
Matrix[3, 3] := 15;
Matrix[4, 2] := 16;
for Col := 1 to 4 do
for Row := 1 to 4 do
StringGrid1.Cells[Col, Row] := IntToStr(Matrix[Col, Row]);
end;
Path = array [1 .. 4, 1 .. 4] of Integer;
var
Matrix: Path;
Col, Row: Integer;
begin
Matrix[1, 1] := 1;
Matrix[2, 1] := 2;
Matrix[3, 1] := 3;
Matrix[4, 1] := 4;
Matrix[3, 2] := 5;
Matrix[2, 2] := 6;
Matrix[1, 2] := 7;
Matrix[1, 3] := 8;
Matrix[2, 3] := 9;
Matrix[1, 4] := 10;
Matrix[2, 4] := 11;
Matrix[3, 4] := 12;
Matrix[4, 4] := 13;
Matrix[4, 3] := 14;
Matrix[3, 3] := 15;
Matrix[4, 2] := 16;
for Col := 1 to 4 do
for Row := 1 to 4 do
StringGrid1.Cells[Col, Row] := IntToStr(Matrix[Col, Row]);
end;
Проблема в том что , n меняется от 1 до 10. К сожалению здесь он не подойдет. Нужна закономерность изменения координат и значения. Этот вариант слишком простой.
Цитата: Vldslvdanilv
n меняется от 1 до 10.
Матрица может изменить размер в любой момент, или для конкретного пути заполнения ее размер фиксирован.
Цитата: Vldslvdanilv
Этот вариант слишком простой.
Приведите вариант реалистичной сложности.
Цитата: Vldslvdanilv
Нужна закономерность изменения координат и значения.
Что Вы имеете ввиду? В общем случае закономерность не представима в короткой форме. Можно, лишь, разбить процесс заполнения массива на атомарные акты: заполнить по горизонтальной линии, по вертикальной, по диагонали и т.п.
Код:
uses crt;
const n=4;
var a:array[1..n,1..n] of byte;
i,j,k:byte;
begin
clrscr;
k:=0;
i:=1;
j:=0;
while j<n do
begin
j:=j+1;
k:=k+1;
a[i,j]:=k;
end;
i:=i+1;
while j>1 do
begin
j:=j-1;
k:=k+1;
a[i,j]:=k;
end;
i:=i+1;
k:=k+1;
a[i,j]:=k;
j:=j+1;
k:=k+1;
a[i,j]:=k;
i:=i+1;
j:=j-1;
k:=k+1;
a[i,j]:=k;
while j<n do
begin
j:=j+1;
k:=k+1;
a[i,j]:=k
end;
i:=i-1;
k:=k+1;
a[i,j]:=k;
j:=j-1;
k:=k+1;
a[i,j]:=k;
i:=i-1;
j:=j+1;
k:=k+1;
a[i,j]:=k;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln
end;
readln
end.
const n=4;
var a:array[1..n,1..n] of byte;
i,j,k:byte;
begin
clrscr;
k:=0;
i:=1;
j:=0;
while j<n do
begin
j:=j+1;
k:=k+1;
a[i,j]:=k;
end;
i:=i+1;
while j>1 do
begin
j:=j-1;
k:=k+1;
a[i,j]:=k;
end;
i:=i+1;
k:=k+1;
a[i,j]:=k;
j:=j+1;
k:=k+1;
a[i,j]:=k;
i:=i+1;
j:=j-1;
k:=k+1;
a[i,j]:=k;
while j<n do
begin
j:=j+1;
k:=k+1;
a[i,j]:=k
end;
i:=i-1;
k:=k+1;
a[i,j]:=k;
j:=j-1;
k:=k+1;
a[i,j]:=k;
i:=i-1;
j:=j+1;
k:=k+1;
a[i,j]:=k;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:3);
writeln
end;
readln
end.
Может я чего не вижу в стартопике?
Извиняюсь. Да, это не было указано в стартопике.
Здесь можете посмотреть, как создать двумерный динамический массив в паскале. Это массив, размеры которого можно задать во время выполнения программы. Что касается заполнения ячеек числами, то либо для любой размерности создать свою процедуру, либо заполнять случайным образом (индексы x, y массива меняются случайно, а значения в ячейках увеличиваются на 1 в каждой следующей клетке), либо придумать алгоритм для нерегулярного заполнения, в зависимости от размера массива (придумать, в смысле заполнять по определенному правилу, но на первый взгляд это правило не должно бросаться в глаза, как например, заполнение по строкам).
Спросить n, создать дин. массив n на n. В двойном цикле ехать по ломаной и заполнять при этом текущую ячейку ее номером в этой ломаной, например. Конечный участок (где возврат к предыдущим строкам) мешает этой логике. Его можно и индивидуально обработать.
Неплохо было бы если кто нибудь выложил код. На словах конечно легко объяснять.
Код чего? ТЗ невнятное. Телепатов тут тоже нет.
код программы на языке паскаль
Заполнили. Не подошло. Про какие-то n меняется от 1 до 10 и про закономерность речь. Все чешут репу и думают над кодом программы.
Да, человек не умеет выражать свои мысли. Да, задача кажется тривиальной.
НО! Мне кажется, что самое главное в данной задаче. Это найти алгоритм, который заполняет матрицу NxN числами (можно например от 1 до N*N) по определенному правилу.
И этот алгоритм надо придумать.
Как я понял из рисунка, правило заполнение следующее:
1) заполняет до конца 1-ю строку,
2) спускаемся на строчку вниз по диагонали
3) заполняем влево до конца
4) спускается вниз на строчку
5) заполняем вправо до (длины верхней строки - 1) (PS не знаю, как правильно написать)
6) повторяем пункты 2-5, пока не дойдем до самого низа
7) нижний ряд заполняем вправо до конца
8) вверх
9) влево
10) вверх-вправо по диагонали
11) вправо до конца
12) повторять 8-11, пока не заполнится оставшаяся часть таблицы.
Чтобы было понятнее, нарисовал, как это должно быть:
для матрицы 10х10 специально до конца не дорисовал.
Ну вот. А теперь 1) надо придумать алгоритм для заполнения матрицы NxN (N от 4 до 10) в заданном порядке, 2) написать программу на паскале, реализующую данный алгоритм.
PS я сам пока загружен работой, поэтому лень думать ;))) Но часть работы я уже выполнил :)