![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Флогримм |
![]() ![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 253 Пол: Мужской Репутация: ![]() ![]() ![]() |
кто какой предложит алгоритм? вот мой:
Код program pseudospiral; { программа, заполняющая матрицу следующим образом: 10 11 12 13 14 25 2 3 4 15 24 9 1 5 16 23 8 7 6 17 22 21 20 19 18 } uses crt; const max=20; {максимальная размерность матрицы; n<=max} var matr :array[1..max,1..max] of byte; i,j,n,c :byte; function Free(a,b:byte):boolean; {проверяет на существование и пустоту ячейку matr[a,b]} begin Free:= (a>0) and (b>0) and (a<=max) and (b<=max) and (matr[a,b]=0); end; BEGIN ClrScr; repeat write('Введите нечетную размерность квадратной матрицы: '); readln(n); until (n<=max) and (n>0) and (odd(n)); writeln; matr[(n div 2)+1,(n div 2)+1]:=1; i:=n div 2; j:=n div 2; matr[i,j]:=2; for c:=3 to sqr(n) do begin if (Free(i-2,j-1)) and (not Free(i+1,j)) and (not Free(i-1,j)) then begin dec(i,2); dec(j); matr[i,j]:=c; {перескок} end else if (Free(i,j-1)) and (not Free(i-1,j)) then begin dec(j); matr[i,j]:=c; {<-} end else if (Free(i+1,j)) and ((not Free(i-1,j)) or (not Free(i,j-1))) and (j-1>0) then begin inc(i); matr[i,j]:=c; {\/} end else if Free(i,j+1) then begin inc(j); matr[i,j]:=c; end else {->} if Free(i-1,j) then begin dec(i); matr[i,j]:=c; end; {/\} end; for i:=1 to n do begin for j:=1 to n do write(matr[i,j]:4); writeln; end; readln; END. вам может показаться громоздким и неэффективным... но мне нравится -------------------- Я не буду жить с этой злобой внутри / Я не буду частью смертельной цепи / Я не буду потребителем твоих идей / Я не буду никогда убивать зверей (Unconform)
|
![]() ![]() |
Флогримм |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 253 Пол: Мужской Репутация: ![]() ![]() ![]() |
кто может предложить другой алгоритм, а то мне че-то в голову ничего кроме этого не лезет...
-------------------- Я не буду жить с этой злобой внутри / Я не буду частью смертельной цепи / Я не буду потребителем твоих идей / Я не буду никогда убивать зверей (Unconform)
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(Флогримм @ 24.02.05 11:43) кто может предложить другой алгоритм, а то мне че-то в голову ничего кроме этого не лезет... Ну, держи ![]() Код const max_n = 19; type matrix = array[1 .. max_n, 1 .. max_n] of integer; var matr: matrix; const next: integer = 1; function incr(var x: integer): integer; far; begin incr := x; inc(x); end; function decr(var x: integer): integer; far; begin decr := x; dec(x); end; procedure make_square(start, count: integer); var i, j, k: integer; begin i := start; j := start; for k := 1 to count do matr[i, incr(j)] := incr(next); dec(j); inc(i); for k := 1 to pred(count) do matr[incr(i), j] := incr(next); dec(i); dec(j); for k := 1 to pred(count) do matr[i, decr(j)] := incr(next); inc(j); dec(i); for k := 1 to pred(pred(count)) do matr[decr(i), j] := incr(next); end; var n, center, i, j: integer; begin repeat write('n = '); readln(n) until (n <= max_n) and (n > 0) and (odd(n)); center := Succ(n div 2); matr[center, center] := incr(next); for i := center - 1 downto 1 do make_square(i, Succ(2 * (center - i)) ); for i := 1 to n do begin for j := 1 to n do write(matr[i, j]:4); writeln end; readln end. |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 8:04 |