nextupprevious

Next:5.2.3 Доказательство свойств программ
Up:5.2 Структурированные типы данных
Previous:5.2.2 Массивы


5.2.2 Матрицы

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

type ДОСКА = array 7 of array 7 of ФИГУРА;
        АНКЕТЫ = array 1000 of array 100 of array 200 of char;
        СЕССИЯ= array 5 of array 15 of array 25 of array 5 of integer;
var A : ДОСКА; B : АНКЕТЫ; С : СЕССИЯ;

Следующий оператор цикла в матрице C ставит первыми оценки того студента 2 курса 12 группы, который по первому экзамену получил лучшую оценку:

for K:=1 to 999 do
    if C[2][13][0][0] $<$ C[2][13][K][0] then C[2][13][0] := C[2][13][K] end
end,

а задача нахождения в переменной C наилучшей оценки студента 0 (подготовительного) курса 11 группы может быть решена следующим фрагментом программы:

E := 1;
for K := 0 to 24 do
    for L:= 0 to 4 do
        if C[0][11][K][L]> E then E := C[0][11][K][L] end
    end
end
 

В качестве еще одного примера рассмотрим решение задачи построения по заданной последовательности вещественных чисел  а1,..., а100 матрицы  А = {Aij}, в которой  1 <= i,j <= 100 и Aij = ai101-i для всех i и j, и печати построенной матрицы по строкам.

module ПостроениеМатрицы;
    const N = 100; (*Длина входной последовательности*)
    type ИНДЕКС = integer; МАТРИЦА = array N of array N of real;
    var F : МАТРИЦА ; K,L : ИНДЕКС ;
begin
    (*Ввод последней строки матрицы А *)
    for K := 0 to N-1 do read(A[N][K]) end;
    (* Заполнение первых 99 строк матрицы А *)
    for L := N-2 to 0 by -1 do
        (*Заполнение L-й строки матрицы А*)
        for K := 0 to N-1 do A[L][K] := A[L+1][K] $*$ A[N][K] end
    end;
    (*Печать построенной матрицы А *)
    for L := 0 to N-1 do
        (*Печать L-й строки матрицы А *)
        for K := 0 to N-1 do write (A[L][K]) end;
        writeln
    end
end ПостроениеМатрицы.

Массив может быть многомерным: допускается заменять в описании массива слова of array на запятую, а в переменной с индексами символы ][ также на запятую. Например, можно переписать программу построение матрицы следующим образом:

module ПостроениеМатрицы2;
    const N = 100; (*Длина входной последовательности*)
    type ИНДЕКС = integer; МАТРИЦА = array N, N of real;
    var F : МАТРИЦА ; K,L : ИНДЕКС ;
begin
    (*Ввод последней строки матрицы А *)
    for K := 0 to N-1 do read(A[N,K]) end;
    (* Заполнение первых 99 строк матрицы А *)
    for L := N-2 to 0 by -1 do
        (*Заполнение L-й строки матрицы А*)
        for K := 0 to N-1 do A[L,K] := A[L+1,K] $*$ A[N,K] end
    end;
    (*Печать построенной матрицы А *)
    for L := 0 to N-1 do
        (*Печать L-й строки матрицы А *)
        for K := 0 to N-1 do write (A[L,K]) end;
        writeln
    end
end ПостроениеМатрицы2.

Возможность конструирования матриц, многомерных массивов и других составных объектов приводит к синтаксическим правилам для понятия "переменная", приведенным на рис. 5.7. Переменная, образованная только одним именем переменной, называется полной переменной; она представляет все свое значение целиком. Частичная переменная содержит, по крайней мере, одно выражение и обозначает заданную часть значения полной переменной. Полные и частичные переменные равноправны: частичная переменная может быть операндом выражения, она может образовывать левую часть оператора присваивания или быть параметром оператора ввода.
 

Name {"[" Expression { "," Expression } "]"}

Рис. 5.6. Синтаксис переменной
 

Next:5.2.3 Доказательство свойств программ
Up:5.2 Структурированные типы данных
Previous:5.2.1 Массивы



© В.Н. Касьянов, Е.В.Касьянова, 2004