Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заполнить матрицу

87K
20 апреля 2013 года
Vldslvdanilv
6 / / 20.04.2013
Заполнить матрицу по следующей схеме. При этом n- размер матрицы, принимает любое значение от 1 до 10.
Прикрепленные файлы:
3 Кб
Загрузок: 1.8K
326
21 апреля 2013 года
sadovoya
757 / / 19.11.2005
Цитата:
Неплохо было бы если кто нибудь выложил код. На словах конечно легко объяснять.



 
Код:
//Говнокод на паскале
А на словах пояснить, или сам догадался уже?
8
20 апреля 2013 года
mfender
3.5K / / 15.06.2005
А в чём проблема-то? В понимании, или в программировании?
Можно так:

Код:
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;
87K
20 апреля 2013 года
Vldslvdanilv
6 / / 20.04.2013
Проблема в том что , n меняется от 1 до 10. К сожалению здесь он не подойдет. Нужна закономерность изменения координат и значения. Этот вариант слишком простой.
446
20 апреля 2013 года
Meander
487 / / 04.09.2011
Ответьте на следующие вопросы:
Цитата: Vldslvdanilv
n меняется от 1 до 10.


Матрица может изменить размер в любой момент, или для конкретного пути заполнения ее размер фиксирован.

Цитата: Vldslvdanilv
Этот вариант слишком простой.


Приведите вариант реалистичной сложности.

Цитата: Vldslvdanilv
Нужна закономерность изменения координат и значения.


Что Вы имеете ввиду? В общем случае закономерность не представима в короткой форме. Можно, лишь, разбить процесс заполнения массива на атомарные акты: заполнить по горизонтальной линии, по вертикальной, по диагонали и т.п.

87K
20 апреля 2013 года
Vldslvdanilv
6 / / 20.04.2013
ну к примеру такой, но он тоже не подходит для данной задачи, потому что n задается с клавиатуры по условию задачи. И при значении 5, матрица заполняется не числами а нолями.
Код:
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.
8
20 апреля 2013 года
mfender
3.5K / / 15.06.2005
Какой ещё такой "n меняется от 1 до 10"?

Может я чего не вижу в стартопике?
87K
20 апреля 2013 года
Vldslvdanilv
6 / / 20.04.2013
Извиняюсь. Да, это не было указано в стартопике.
446
20 апреля 2013 года
Meander
487 / / 04.09.2011
Здесь можете посмотреть, как создать двумерный динамический массив в паскале. Это массив, размеры которого можно задать во время выполнения программы. Что касается заполнения ячеек числами, то либо для любой размерности создать свою процедуру, либо заполнять случайным образом (индексы x, y массива меняются случайно, а значения в ячейках увеличиваются на 1 в каждой следующей клетке), либо придумать алгоритм для нерегулярного заполнения, в зависимости от размера массива (придумать, в смысле заполнять по определенному правилу, но на первый взгляд это правило не должно бросаться в глаза, как например, заполнение по строкам).
326
20 апреля 2013 года
sadovoya
757 / / 19.11.2005
Спросить n, создать дин. массив n на n. В двойном цикле ехать по ломаной и заполнять при этом текущую ячейку ее номером в этой ломаной, например. Конечный участок (где возврат к предыдущим строкам) мешает этой логике. Его можно и индивидуально обработать.
87K
21 апреля 2013 года
Vldslvdanilv
6 / / 20.04.2013
Неплохо было бы если кто нибудь выложил код. На словах конечно легко объяснять.
8
21 апреля 2013 года
mfender
3.5K / / 15.06.2005
Код чего? ТЗ невнятное. Телепатов тут тоже нет.
87K
21 апреля 2013 года
Vldslvdanilv
6 / / 20.04.2013
код программы на языке паскаль
8
21 апреля 2013 года
mfender
3.5K / / 15.06.2005
Заполнили. Не подошло. Про какие-то n меняется от 1 до 10 и про закономерность речь. Все чешут репу и думают над кодом программы.
72K
23 апреля 2013 года
GNDragonfly
16 / / 24.05.2012
Написано, что задача решена, но где решение - не пойму.
Да, человек не умеет выражать свои мысли. Да, задача кажется тривиальной.
НО! Мне кажется, что самое главное в данной задаче. Это найти алгоритм, который заполняет матрицу 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 я сам пока загружен работой, поэтому лень думать ;))) Но часть работы я уже выполнил :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог