Массив: Змейка, Спираль - 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
Листинг программы
  1. uses crt;
  2. var a:array[1..9,1..9]of byte;//раз по 3 символа под число, значит максимально
  3.     n,m,x,y,k,z:integer;      //числа двухзначные, до 81
  4. begin
  5. clrscr;
  6. repeat
  7. write('Введите n от 1 до 4 n=');
  8. readln(n);
  9. until n in [1..4];
  10. m:=2*n+1;
  11. x:=n+1;
  12. y:=n+1;
  13. k:=0;
  14. for z:=1 to m*m do
  15.  begin
  16.   a[x,y]:=z-1;
  17.   case k mod 4 of
  18.   0:begin
  19.     dec(x); //вверх
  20.     if m-x=y then inc(k);//поворот
  21.     end;
  22.   1:begin
  23.     dec(y);//влево
  24.     if x=y then inc(k);//поворот
  25.     end;
  26.   2:begin
  27.     inc(x);//вниз
  28.     if m-x+1=y then inc (k);//поворот
  29.     end;
  30.   3:begin
  31.     inc(y); //вправо
  32.     if y=x then inc(k);//поворот
  33.     end;
  34.   end;
  35.  end;
  36. for x:=1 to m do
  37.   begin
  38.     for y:=1 to m do
  39.     write(a[x,y]:3);
  40.     writeln;
  41.   end;
  42. readln
  43. end.

Объяснение кода листинга программы

  1. Объявлены переменные: a, n, m, x, y, k, z (тип: integer)
  2. Цикл repeat предназначен для повторного выполнения кода, пока пользователь не введет корректное значение n.
  3. Значение переменной n ограничивается диапазоном от 1 до 4.
  4. Значение переменной m вычисляется как 2*n+1.
  5. Значения переменных x и y инициализируются как n+1.
  6. Значение переменной k инициализируется как 0.
  7. Для каждого значения z от 1 до m*m выполняется следующая операция: a[x,y] присваивается значение z-1.
  8. Используется конструкция case для определения направления движения.
  9. Если значение k mod 4 равно 0, то выполняется движение вверх (декремент x).
  10. Если значение k mod 4 равно 1, то выполняется движение влево (декремент y).
  11. Если значение k mod 4 равно 2, то выполняется движение вниз (инкремент x).
  12. Если значение k mod 4 равно 3, то выполняется движение вправо (инкремент y).
  13. Если выполняется условие поворота (x=y или y=m), то значение k инкрементируется.
  14. Выполняется цикл for для вывода значений массива a в формате 3 символа.
  15. Цикл for завершается, когда значение x становится равным 0.
  16. Запроса на ввод нет, код завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы