![]() |
#1 (permalink) |
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 |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Почитав аналогичные темы вы наберетесь больше информации как заполнить весь экран Заполнить с клавиатуры симметричную квадратную действительную матрицу N-го порядка Чем заполнить? Можно ли заменить матрицу TN с CCFL-подсветкой на матрицу AFFS с LED-подсветкой? Как сформировать двухмерный массив 7 на 7 и заполнить его единицами (на Паскале) |
![]() |
#3 (permalink) |
Member
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
prima,
в моем вопросе предполагается, что матрица будет заполняться "змейкой". То есть "голова змейки" - это левый верхний элемент матрицы, а "конец хвоста" будет там, где будет. |
![]() |
![]() |
![]() |
#4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 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. |
![]() |
![]() |
![]() |
#5 (permalink) |
Member
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
Vladimir_S
Спасибо! Маленький вопрос: обнуление матрицы в Паскале обязательно? В Бейсике - нет, там матрица при объявлении инициализируется нулями. |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Ответ: а пёс его знает! Вроде не обязательно, в Pascal ABC (коим я не пользуюсь) - точно не нужно, в Turbo (Free) вроде тоже по умолчанию переменные обнуляются, когда-то в лохматые годы на ANSI Pascal, если я правильно помню, не обнулялись, просто я "на всякий случай" это делаю. Руки не отвалятся, а за сверхоптимизациями не гоняюсь.
|
![]() |
![]() |
![]() |
#7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 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. |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|