Задача

1 /12


Что такое матрица? Создание, вывод на экран

Теория Нажмите, чтобы прочитать/скрыть


Введение 
Очень часто при работе с какой-либо информацией приходится иметь дело с табличными данными. Современные программы очень часто работают именно с такими данными. Самый простой пример - это программирование игр на клетчатой доске: крестики-нолики, шахматы, шашки и т.п.

В математике такие структуры называются матрицами.
 
Матрица - это прямоугольная таблица составленная из элементов одного типа (чисел, строк и т.д)

Такие данные на языке Pascal можно хранить и обрабатывать в виде двумерных массивов - "массивов массивов".
Чтобы обработать данные в таблице, надо запоминать состояние каждой ячейки (клетки). Каждая ячейка имеет два номера: номер строки и номер столбца.
В матрице каждый элемент имеет два индекса: сначала указывается номер строки, затем номер столбца. Нумерация строк и столбцов начинается с нуля.
Например, элемент A[1][2] - это элемент расположенный во второй строке и третьем столбце.

Так же как и с обычными массивами (списками), для того, чтобы работать с матрицами, необходимо научиться их создавать, вводить, обрабатывать и выводить на экран.
 
Создание матрицы
Задача
Создать в памяти матрицу заданного размера, заполненной нулями.

Чтобы создать правильно матрицу, необходимо заставить компилятор создать все строки в памяти как разные объекты.
Для этого необходимо сначала создать пустой массив, затем указать количество строк в матрице, а потом в цикле указывать количество элементов в каждой строке с помощью метода setLength():
N := 3
M := 2
setLength(A, N);
for i := 0 to N - 1 do
    setLength(A[i], M);

 

Заполнение матрицы произвольными значениями
После создания матрицы можно заполнить ее произвольными значениями. Так как каждый элемент имеет два индекса, то необходимо использовать вложенные циклы
for i := 0 to N do begin
    for j := 0 to M do begin
        A[i][j] := ...
    end;
end;
 
Вывод матрицы на экран

Для обработки и вывода списка, как правило, используется два вложенных цикла. Первый цикл по номеру строки, второй цикл - по элементам внутри строки.
Для того, чтобы вывести матрицу на экран построчно, разделяя числа пробелами внутри одной строки, необходимо написать такой фрагмент:

for i := 0 to length(A) - 1 do begin // length(A) - возвращает количество строк в матрице А
    for j := 0 to length(A[i]) - 1 do // length(A[i]) - возвращает количество элементов в строке i
        write(a[i][j], ' ');
    writeln(); // делаем переход на новую строку после вывода на экран строки
end;

То же самое, но циклы не по индексу, а по значениям списка (цикл for умеет делать перебор всех элементов в списке (массиве), строке):

for row in a do begin // делаем перебор всех строк матрицы a
    for elem in row do // перебираем все элементы в строке row
        write(elem, ' ');
    writeln();
end;

Задача

Заполните двоичную матрицу (состоящую только из нулей и единиц) в шахматном порядке. В левом верхнем углу должен быть нулевой элемент.
 

Входные данные
Во входной строке записаны через пробел размеры матрицы: количество строк N и количество столбцов M ( 1 <= N , M <= 100 ).
 

Выходные данные 
Программа должна вывести двоичную матрицу по строкам.
 

Примеры
Входные данные Выходные данные
1 4 5
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Free Pascal8
PascalABC3
Комментарий учителя