Массив: Змейка, Спираль - Free Pascal
Формулировка задачи:
Доброго времени суток! Я на форуме первый день, прошу не судить строго. Я знаю, что похожие темы есть на форуме, я перечитал их всех, но правильного решения на эти задачи не нашел. #Free Pascal
Помогите решить эти задачки:
1.
Дано число n. Создайте массив A[2*n+1][2*n+1] и заполните его по спирали, начиная с числа 0 в центральной клетке A[n+1][n+1]. Спираль выходит вверх, далее закручивается против часовой стрелки.Входные данные
Программа получает на вход одно число n.Выходные данные
Программа должна вывести полученный массив, отводя на вывод каждого числа ровно 3 символа.Примеры
входные данные
2выходные данные
12 11 10 9 24 13 2 1 8 23 14 3 0 7 22 15 4 5 6 21 16 17 18 19 20 2.Требуется заполнить массив размера N × N единичками по спирали (начиная с верхнего левого угла по часовой стрелке, см. пример).Входные данные
С клавиатуры вводится число N (нечетное, натуральное и не превышающее 50).Выходные данные
Требуется вывести на экран построенную спираль.Примеры
входные данные
7выходные данные
1111111 0000001 1111101 1000101 1011101 1000001 1111111
3.Даны числа n и m. Создайте массив A[n][m] и заполните его, как показано на примере.
Входные данные
Программа получает на вход два числа n и m.Выходные данные
Программа должна вывести полученный массив.Примеры
входные данные
4 10выходные данные
0 1 3 6 10 14 18 22 26 30 2 4 7 11 15 19 23 27 31 34 5 8 12 16 20 24 28 32 35 37 9 13 17 21 25 29 33 36 38 39Решение задачи: «Массив: Змейка, Спираль»
textual
Листинг программы
uses crt; var a:array[1..9,1..9]of byte;//раз по 3 символа под число, значит максимально n,m,x,y,k,z:integer; //числа двухзначные, до 81 begin clrscr; repeat write('Введите n от 1 до 4 n='); readln(n); until n in [1..4]; m:=2*n+1; x:=n+1; y:=n+1; k:=0; for z:=1 to m*m do begin a[x,y]:=z-1; case k mod 4 of 0:begin dec(x); //вверх if m-x=y then inc(k);//поворот end; 1:begin dec(y);//влево if x=y then inc(k);//поворот end; 2:begin inc(x);//вниз if m-x+1=y then inc (k);//поворот end; 3:begin inc(y); //вправо if y=x then inc(k);//поворот end; end; end; for x:=1 to m do begin for y:=1 to m do write(a[x,y]:3); writeln; end; readln end.
Объяснение кода листинга программы
- Объявлены переменные: a, n, m, x, y, k, z (тип: integer)
- Цикл repeat предназначен для повторного выполнения кода, пока пользователь не введет корректное значение n.
- Значение переменной n ограничивается диапазоном от 1 до 4.
- Значение переменной m вычисляется как 2*n+1.
- Значения переменных x и y инициализируются как n+1.
- Значение переменной k инициализируется как 0.
- Для каждого значения z от 1 до m*m выполняется следующая операция: a[x,y] присваивается значение z-1.
- Используется конструкция case для определения направления движения.
- Если значение k mod 4 равно 0, то выполняется движение вверх (декремент x).
- Если значение k mod 4 равно 1, то выполняется движение влево (декремент y).
- Если значение k mod 4 равно 2, то выполняется движение вниз (инкремент x).
- Если значение k mod 4 равно 3, то выполняется движение вправо (инкремент y).
- Если выполняется условие поворота (x=y или y=m), то значение k инкрементируется.
- Выполняется цикл for для вывода значений массива a в формате 3 символа.
- Цикл for завершается, когда значение x становится равным 0.
- Запроса на ввод нет, код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д