Другие языки программирования и технологии
Разработайте программу, которая заполняет двумерный массив натуральными числами по спирали. Максимальное число N задается.
Программа в турбо паскаль
Так как по введённому числу N невозможно определить размеры матрицы (например для N = 16, может быть матрица 1x16, 2x8, 4x4, 8x2, 16x1), предполагается, что она квадратная.
{$R-}
program N184730327;
type
TArray = array [1..1] of word;
PArray = ^TArray;
TMatrix = array [1..1] of PArray;
PMatrix = ^TMatrix;
const
d: word = 1;
di: integer = 0;
dj: integer = 1;
var
i, j, k, l, m, b: integer;
a: PMatrix;
N: word;
error: boolean;
begin
repeat
write('Введите N: ');
{$I-}
readln(N);
error := (IOResult > 0) or (N < 1) or (N > 256) or (sqr(trunc(sqrt(N))) <> N);
{$I+}
if error then
writeln('Ошибка! N дoлжнo быть тoчным квадратом целых чисел от 1 до 16.')
until not error;
m := trunc(sqrt(N));
GetMem(a, sizeof(PArray) * m);
for i := 1 to m do
GetMem(a^[i], sizeof(word) * m);
i := 1;
j := 1;
for l := 0 to m shr 1 - 1 do
begin
for k := 0 to 3 do
begin
while (i < m - l) and (k = 1) or (i > l + 1) and (k = 3)
or (j < m - l) and (k = 0) or (j > l + 1) and (k = 2) do
begin
a^[i]^[j] := d;
inc(d);
inc(i, di);
inc(j, dj)
end;
b := di;
di := dj;
dj := -b
end;
inc(i);
inc(j)
end;
if odd(m) then
a^[i]^[j] := d; {Не красиво, но по другому не получается}
for i := 1 to m do
begin
for j := 1 to m do
write(a^[i]^[j]:4);
writeln
end;
write(#10'Для завершения работы нажмите Enter...');
readln;
for i := 1 to m do
FreeMem(a^[i], sizeof(word) * m);
FreeMem(a, sizeof(PArray) * m)
end.

{$R-}
program N184730327;
type
TArray = array [1..1] of word;
PArray = ^TArray;
TMatrix = array [1..1] of PArray;
PMatrix = ^TMatrix;
const
d: word = 1;
di: integer = 0;
dj: integer = 1;
var
i, j, k, l, m, b: integer;
a: PMatrix;
N: word;
error: boolean;
begin
repeat
write('Введите N: ');
{$I-}
readln(N);
error := (IOResult > 0) or (N < 1) or (N > 256) or (sqr(trunc(sqrt(N))) <> N);
{$I+}
if error then
writeln('Ошибка! N дoлжнo быть тoчным квадратом целых чисел от 1 до 16.')
until not error;
m := trunc(sqrt(N));
GetMem(a, sizeof(PArray) * m);
for i := 1 to m do
GetMem(a^[i], sizeof(word) * m);
i := 1;
j := 1;
for l := 0 to m shr 1 - 1 do
begin
for k := 0 to 3 do
begin
while (i < m - l) and (k = 1) or (i > l + 1) and (k = 3)
or (j < m - l) and (k = 0) or (j > l + 1) and (k = 2) do
begin
a^[i]^[j] := d;
inc(d);
inc(i, di);
inc(j, dj)
end;
b := di;
di := dj;
dj := -b
end;
inc(i);
inc(j)
end;
if odd(m) then
a^[i]^[j] := d; {Не красиво, но по другому не получается}
for i := 1 to m do
begin
for j := 1 to m do
write(a^[i]^[j]:4);
writeln
end;
write(#10'Для завершения работы нажмите Enter...');
readln;
for i := 1 to m do
FreeMem(a^[i], sizeof(word) * m);
FreeMem(a, sizeof(PArray) * m)
end.

cyberforum.ru/post129034.html
Похожие вопросы
- Требуется написать программу, которая из цифр двух натуральных чисел создает наименьшее возможное число, сохраняя при эт
- 1. Написать программу, которая заполняет массив целых чисел размеров 20 элементов значениями роста учащихся (случайные ч
- Написать программу, которая формирует два массива чисел
- помогите? Дан массив целых чисел (n=15),
- Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности B1, …, BN и C1, …, CN
- Паскаль. Представить натуральное число n в виде суммы трёх квадратов натуральных чисел.
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Дано натуральное число n и вещественная матрица размера n X 9 . Плиз помогите(
- Дано натуральное число n. Найти и вывести все числа в интервале от 1 до n -1, у которых произведение всех цифр совпадает
- Помогите написать программу Дано натуральное число n. Вычислить сумму всех k(k+1), k меняется от 1 до n.