С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 10

Двумерный массив змейкой

07.01.2015, 14:38. Показов 7362. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите программу, которая заполняется двумерный массив размерностью n × n (n <10) змейкой. Например, при
n = 4 результат должен быть следующим:

1 8 9 16

2 7 10 15

3 6 11 14

4 5 12 13
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2015, 14:38
Ответы с готовыми решениями:

Заполнить массив змейкой
Доброго времени суток!. Прошу помощи для решения задачи о заполнени массива змейкой. ПРимер: 1 2 3 4 8 7 6 5 9 10 11 12 ...

Заполнить массив змейкой
Заполнить массив MxN &quot;змейкой&quot; по столбцам. Пример: 1 10 11 20 21 2 9 12 19 22 3 8 13 18 23 4 7 14 17 24 5 6 15 16...

Заполнить массив змейкой
Заполнить массив змейкой; 1 3 4 10 11 21 2 5 9 12 20 22 6 8 13 19 23 30 7 14 18 24 29 31 15 17 25 28 32 35 16 26 27 33 34 36 ...

4
Фрилансер
 Аватар для CodeR
3418 / 2815 / 3000
Регистрация: 08.02.2012
Сообщений: 8,603
Записей в блоге: 1
07.01.2015, 15:01
Лучший ответ Сообщение было отмечено Aiwendil как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Const nmax=9;
Var A:array[1..nmax,1..nmax] of integer;
    i,j,n,k:integer;
Begin
    Repeat
      write('N: ');
      readln(n);
    Until (n>0)and(n<=nmax);
    For j:=1 to n do
     if j mod 2 <> 0 then
      For i:=1 to n do
      Begin
        inc(k);
        A[i,j]:=k;
      End
     else
      For i:=n downto 1 do
      Begin
        inc(k);
        A[i,j]:=k;
      End;
    For i:=1 to n do
    Begin
      For j:=1 to n do
       write(A[i,j]:5);
      writeln;
    End;
End.
Добавлено через 1 минуту
Или так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Const nmax=9;
Var A:array[1..nmax,1..nmax] of integer;
    i,j,n,k:integer;
Begin
    Repeat
      write('N: ');
      readln(n);
    Until (n>0)and(n<=nmax);
    For j:=1 to n do
      For i:=1 to n do
      Begin
        inc(k);
        if j mod 2 <> 0 then A[i,j]:=k else A[n-i+1,j]:=k;
      End;
    For i:=1 to n do
    Begin
      For j:=1 to n do
       write(A[i,j]:5);
      writeln;
    End;
End.
1
Модератор
10386 / 5674 / 3399
Регистрация: 17.08.2012
Сообщений: 17,322
07.01.2015, 15:53
Лучший ответ Сообщение было отмечено Aiwendil как решение

Решение

Или так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const m = 19;
var i, j, n: integer;
    a: array [1..m, 1..m] of integer;
begin
  repeat
    write('n = ');
    readln(n);
    if (n < 1) or (n > m) then writeln('n out of range 1..', m, ', reenter.')
  until (n >= 1) and (n <= m);
  for i := 1 to n do
    begin
      for j := 1 to n do
        begin
          a[i, j] := (j - 1) * n + i + (j and 1 - 1) * (2 * i - n - 1);
          write(a[i, j]:4);
        end;
      writeln
    end;
  readln
end.
1
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 10
07.01.2015, 16:44  [ТС]
Не могли бы Вы объяснить действия в 14 строке ?
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Pascal
14
          a[i, j] := (j - 1) * n + i + (j and 1 - 1) * (2 * i - n - 1);
0
Модератор
10386 / 5674 / 3399
Регистрация: 17.08.2012
Сообщений: 17,322
07.01.2015, 17:47
Числа в нечётных столбцах определяются как

(j - 1) * n + i.

В чётных как

(j - 1) * n + n - i + 1.

Для простоты рассуждений, вычтем и прибавим i:

(j - 1) * n + i + n - 2i + 1,

или

(j - 1) * n + i - (2i - n - 1).

Выяснили, что формула для нечётных столбцов отличается от формулы для чётных столбцов "лишним" вычитаемым

(2i - n - 1).

Чтобы получить общую формулу для любых столбцов, осталось сделать так, чтобы для нечётных столбцов это вычитаемое не учитывалось. В моей программе +(2i - n - 1) умножается на 0, если j нечётное , и на -1, если j чётное. Как?

Известно, что младший разряд двоичного представления числа равен 1, если число нечётное, ну и, само собой, 0, если число чётное. Значение младшего разряда выделить просто, с помощью поразрядной операции and (не путать с логической операцией and):

j and 1.

Получится 1, если нечётное, и 0, если чётное. А нам требуется 0, если нечётное, и -1, если чётное. Ну и вычесть 1, и дело в шляпе:

j and 1 - 1.

Вот и вся недолга. Ещё вариант, можно заменить, если оператор and не нравится:

j and 1 = j mod 2,

здесь всё ясно. Только вот and побыстрее mod будет, и поэтому я использую для степеней двойки эквивалентную конструкцию с and:

x mod 2n = x and (2n - 1).

Можно ещё и так заменить:

j and 1 - 1 = - ord(not odd(j)).

Пояснение: ord(TRUE) = 1, ord(FALSE) = 0, not odd(j) = TRUE, если чётное, и FALSE, если нечётное, оно ж просто инверсия функции odd(j).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2015, 17:47
Помогаю со студенческими работами здесь

Даны числа n и m. Создайте массив A[n][m] и заполните его змейкой
Здравствуйте. Помогите пожалуйста неумехе. Плохо понимаю Pascal :( Задания: 5) Даны числа n и m. Создайте массив A и заполните...

Даны числа n и m. Создайте массив A[n][m] и заполните его змейкой
Даны числа n и m. Создайте массив A и заполните его змейкой (см. пример). Входные данные Программа получает на вход два числа n и m....

Двумерный массив змейкой
Задача состоит в том, что бы записать массив в виде : 120 119 ... 111 101 102 ... 110 ... 20 ... 12 11 1 2 ......

Двумерный массив вывод на экран змейкой
Здравствуйте.Имеется вот таккая програмаа.Она не моя и я просто хочу разобраться , как в ней всё устроено (скоро буду делать на подобии...

Двумерный массив. Ввести двумерный массив, найти сумму элементов каждого столбца
Ввести двумерный массив, найти сумму элементов каждого столбца.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru