Курс: Pascal. Xранение и обработка данных

Модуль: Матрицы. Основы

Задачи

Задача

1 /12




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

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


Теория

Введение 

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

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

Такие данные на языке 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 // lenght(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;

Задача

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

Входные данные: Во входной строке записаны через пробел размеры матрицы: количество строк и количество столбцов ( 1 <= 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