Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Basic


Ответ
 
Опции темы Опции просмотра
Старый 26.10.2016, 10:21   #1 (permalink)
iks2
Member
 
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Заполнить матрицу

Требуется заполнить матрицу как на рисунке.
Вероятно это можно сделать и проще, но я сделал так.

Вопрос
годится ли мой код, если бы n = 6?

Код:
CLS
CONST n = 7
DIM A(1 TO n, 1 TO n)

k = 1

FOR i = 1 TO n
FOR j = 1 TO n
   IF i <= n \ 2 + 1 AND i <= j AND i + j <= 8 THEN
      A(i, j) = k
      k = k + 1
   ELSEIF i >= j AND i + j >= 8 THEN
      A(i, j) = k
      k = k + 1
   END IF
NEXT j, i

FOR i = 2 TO n STEP 2
FOR j = 1 TO n \ 2
   SWAP A(i, j), A(i, n + 1 - j)
NEXT j, i

FOR i = 1 TO n
FOR j = 1 TO n
   PRINT USING "  ###"; A(i, j);
NEXT j: PRINT
NEXT i
END
Миниатюры
506.gif  
iks2 вне форума   Ответить с цитированием

Старый 26.10.2016, 10:21
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Почитав аналогичные темы вы наберетесь больше информации

как заполнить весь экран
Заполнить с клавиатуры симметричную квадратную действительную матрицу N-го порядка
Чем заполнить?
Можно ли заменить матрицу TN с CCFL-подсветкой на матрицу AFFS с LED-подсветкой?
Как сформировать двухмерный массив 7 на 7 и заполнить его единицами (на Паскале)

Старый 26.10.2016, 10:30   #2 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 19,409
Сказал(а) спасибо: 283
Поблагодарили 213 раз(а) в 96 сообщениях
Репутация: 80829
По умолчанию

Не совсем понятны начальные условия.
Отсюда и непонятен вопрос
Цитата:
Сообщение от iks2 Посмотреть сообщение
годится ли мой код, если бы n = 6?
prima вне форума   Ответить с цитированием
Старый 26.10.2016, 11:21   #3 (permalink)
iks2
Member
 
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

prima,
в моем вопросе предполагается, что матрица будет заполняться "змейкой". То есть "голова змейки" - это левый верхний элемент матрицы, а "конец хвоста" будет там, где будет.
iks2 вне форума   Ответить с цитированием
Старый 26.10.2016, 11:42   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Не знаю, просто нарисовал свою Паскаль-программку. Не утверждаю, что оптимальная, и даже скорее наоборот, но зато работает при любой размерности матрицы.
Код:
Const
 Nmax=12;
Var
 N,i,j,j1,j2,k:Byte;
 sj:ShortInt;
 A:Array[1..Nmax,1..Nmax] of Byte;

Begin
 Write('N (<',Nmax+1,') = ');
 Readln(N);
 Writeln;
 k:=0;
 sj:=1;
 for i:=1 to N do
  for j:=1 to N do
   A[i,j]:=0;
 i:=1;
 Repeat
  j1:=i;
  j2:=N-i+1;
  if sj=1 then
   for j:=j1 to j2 do
    begin
     k:=k+1;
     A[i,j]:=k;
    end
  else
   for j:=j2 downto j1 do
    begin
     k:=k+1;
     A[i,j]:=k;
    end;
  sj:=-sj;
  i:=i+1;
 Until i>N-i+1;
 Repeat
  j1:=N-i+1;
  j2:=i;
  if sj=1 then
   for j:=j1 to j2 do
    begin
     k:=k+1;
     A[i,j]:=k;
    end
  else
   for j:=j2 downto j1 do
    begin
     k:=k+1;
     A[i,j]:=k;
    end;
  sj:=-sj;
  i:=i+1;
 Until i=N+1;
 for i:=1 to N do
  begin
   for j:=1 to N do Write(A[i,j]:5);
   writeln;
  end;
 Readln
End.
Миниатюры
aa01.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 26.10.2016, 11:50   #5 (permalink)
iks2
Member
 
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S
Спасибо!
Маленький вопрос: обнуление матрицы в Паскале обязательно? В Бейсике - нет, там матрица при объявлении инициализируется нулями.
iks2 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.10.2016, 12:40   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от iks2 Посмотреть сообщение
Маленький вопрос: обнуление матрицы в Паскале обязательно?
Ответ: а пёс его знает! Вроде не обязательно, в Pascal ABC (коим я не пользуюсь) - точно не нужно, в Turbo (Free) вроде тоже по умолчанию переменные обнуляются, когда-то в лохматые годы на ANSI Pascal, если я правильно помню, не обнулялись, просто я "на всякий случай" это делаю. Руки не отвалятся, а за сверхоптимизациями не гоняюсь.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.10.2016, 16:57   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Не удержался - всё-таки подредактировал программу. А то уж очень было топорно:
Код:
Const
 Nmax=12;
Var
 N,i,j,j1,j2,k:Byte;
 sj:ShortInt;
 A:Array[1..Nmax,1..Nmax] of Byte;

Begin
 Write('N (<',Nmax+1,') = ');
 Readln(N);
 Writeln;
 k:=0;
 sj:=1;
 for i:=1 to N do
  for j:=1 to N do
   A[i,j]:=0;
 i:=1;
 Repeat
  if i<=(N div 2) then
   begin
    j1:=i;
    j2:=N-i+1;
   end
  else
   begin
    j2:=i;
    j1:=N-i+1;
   end;
  if sj=1 then
   for j:=j1 to j2 do
    begin
     k:=k+1;
     A[i,j]:=k;
    end
  else
   for j:=j2 downto j1 do
    begin
     k:=k+1;
     A[i,j]:=k;
    end;
  sj:=-sj;
  i:=i+1;
 Until i=N+1;
 for i:=1 to N do
  begin
   for j:=1 to N do Write(A[i,j]:5);
   writeln;
  end;
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.