Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2016, 16:05   #1
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию Заполнить квадратную матрицу по спирали

В квадратную матрицу размерности N ( N - нечетное число) заполнить числами от 1 до N^2 по спирали от центра

Для начала: не нашел каким образом нужно в квадратной матрице найти центральный элемент, с которого и надо начинать отсчет.

Далее не ясно как нужно заполнять, какой алгоритм для этого потребуется.

Прошу дать алгоритм того, как найти центральный элемент и как можно двигаться по спирали в двумерном массиве.
Код могу написать и сам, но буду признателен за пример на нем.
jirtreck вне форума Ответить с цитированием
Старый 23.06.2016, 16:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Ну, это тот редкий случай, когда готовый код дать проще, чем объяснить

идём в поиск по форуму. находим тему: Заполнить матрицу по спирали (turbo pascal)
берём тут (тыц) готовый код:
чуть-чуть меняем (код заполнял по спирали, начиная с левого верхнего угла матрицы. мы так и оставляем траекторию заполнения, только циферки уменьшаем.
получается - в обратном порядке - от центра к левому верхнему краю.

Код:
var
  a:array[1..100,1..100]of integer;
  i,imax,imin,j,jmax,jmin,k,m,n:integer;
begin
  write('Vvedite 4islo strok: ');
  readln(m);
  write('Vvedite 4islo stolbcov: ');
  readln(n);
  jmin:=1;
  jmax:=n;
  imin:=2;
  imax:=m;
  k:=n*m+1;
  repeat
    for j:=jmin to jmax do
    begin
      dec(k);
      a[imin-1,j]:=k;
    end;
    for i:=imin to imax do
    begin
      dec(k);
      a[i,jmax]:=k;
    end;
    dec(jmax);
    for j:=jmax downto jmin do
    begin
      dec(k);
      a[imax,j]:=k;
    end;
    dec(imax);
    for i:=imax downto imin do
    begin
      dec(k);
      a[i,jmin]:=k;
    end;
    inc(imin);
    inc(jmin);
  until k=1;
  for i:=1 to m do
  begin
    writeln;
    for j:=1 to n do write(a[i,j]:3);
  end;
  readln;
end.

Цитата:
как найти центральный элемент
центральный элемент может быть только в случае нечётного числа.
определяется как (n div 2)+1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2016, 16:32   #3
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Благодарю за помощь!

Будут проблему, еще напишу
jirtreck вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить матрицу по спирали (turbo pascal) cL1zMa Помощь студентам 8 16.05.2020 12:00
заполнить матрицу по спирали. паскаль. Jenn Фриланс 4 09.01.2012 13:27
заполнить квадратную матрицу Orakyll08 Помощь студентам 13 12.07.2011 01:46
Заполнить квадратную матрицу ac1d_buRn Помощь студентам 3 22.12.2010 19:40
Заполнить матрицу по спирали kloffelin Общие вопросы C/C++ 4 03.05.2010 13:37