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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 21:08   #1
BeSHyLLlka
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 2
Восклицание Заполнить массив по спирали

ребята помогите нужно заполнить масси по спирали начиная с центра,против часовой стрелке,желательно в псевдокоде или в java script
BeSHyLLlka вне форума Ответить с цитированием
Старый 19.09.2011, 23:14   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
  n:=7; //размер квадрата
  i:=n div 2; 
  j:=n div 2; // начинаем в центре
// задаем границы движеня 
  min_i:=i; max_i:=i; // влево вправо
  min_j:=j; max_j:=j; // вверх вниз
  d:=0; // сначала пойдем влево
  for a:=1 to n*n do begin
    m[i,j]:=a; // заполняем (нумеруем)
    case d of //вычисляем следующую (находим новые i j)
    0: begin 
         i:=i-1;  // движение влево
         if i<min_i // проверка выхода за заполненную центральную часть слева
                   then begin 
                     d:=1;// меняем направление
                     min_i:=i;// увеличиваем заполненную часть влево
                   end;
       end;
    1: begin // движение вверх проверка сверху
         j:=j-1;
         if j<min_j then begin d:=2; min_j:=j; end;
       end;
    2: begin // движение вправо проверка справа
         i:=i+1;
         if i>max_i then begin d:=3; max_i:=i; end;
       end;
    3: begin // движение вниз проверка снизу
         j:=j+1;
         if j>max_j then begin d:=0; max_j:=j; end;
       end;
    end;
  end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.09.2011, 09:57   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от BeSHyLLlka Посмотреть сообщение
желательно в псевдокоде или в java script
Pascal можно считать псевдокодом (наверное, evg_m со мной согласен)). Но если нужен JS - пиши, я помогу.

evg_m, твое решение вполне нормальное (только центр в случае нечетных сбит немного), но я хотел просто сказать, что задачи такого класса чаще всего лучше (хотя это не значит, что легче)) решать несколько иначе. В условии сказано "заполнить по спирали", и сразу приходит в голову, что надо _идти_по_спирали_. На самом же деле, это совершенно не обязательно. Нужно заполнить каждый элемент (однократно) - следовательно, подходит обычный двойной цикл. А в его теле - вычисление "номера по спирали". Получается компактнее и яснее. И никаких проверок выхода за границы и т.п.
Короче, вот код:
Код:
// spiral filling in of a matrix, starting at center, counterclockwise
// by TinMan, programmersforum.ru
// Sep 20, 2011

const
  n= 6;  // matrix size

var
  b,i,j,x,y,r: integer;
  a: array[1..n,1..n] of integer;

begin
  for i:=1 to n do
    for j:=n downto 1 do begin
      x:= 2*i-n-1;
      y:= 2*j-n-1;
      if Abs(x)>Abs(y) then r:= Abs(x) else r:= Abs(y);
      if x=-r then b:= 7*r-y
      else if y=-r then b:= r+x
      else if x=r then b:= 3*r+y
      else b:= 5*r-x;
      a[i,j]:= b div 2 + Sqr(r-1)
    end;

  for i:=1 to n do begin
    for j:=1 to n do Write(a[i,j]:3);
    Writeln
  end;
  Readln
end.
Комментарии по запросу.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить матрицу по спирали (turbo pascal) cL1zMa Помощь студентам 8 16.05.2020 12:00
Обойти массив по спирали начиная с центра Botan747 Паскаль, Turbo Pascal, PascalABC.NET 1 17.06.2011 15:49
Заполнить массив mila111189 Помощь студентам 1 04.11.2010 00:09
Заполнить матрицу по спирали kloffelin Общие вопросы C/C++ 4 03.05.2010 13:37
Заполнить элементами таблицу, располагая их по спирали SaimaN Помощь студентам 0 17.03.2010 18:22