Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике все.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
986.62 Кб
Скачать

4.1.2. Определение индексов элементов матрицы

Большое количество задач связано с обработкой части элементов квадратной матрицы (количество строк совпадает с количеством столбцов), например, рассматриваются только элементы главной диагонали, над дополнительной диагональю (соединяющей элементы An,1 и A1,n и т.д. При решении таких задач возникает проблема, определения границ изменения индексов обрабатываемых элементов. Ниже приведем ряд типичных случаев с указанием соответствующих начальных и конечных значений в заголовках циклов.

элементы, принадлежащие главной диагонали     for I:= 1 to N do         A[I,I]

элементы под главной дагональю     for I:= 2 to N do         for J:= 1 to I-1 do             A[I,J]

элементы над главной диагональю     for I := 1 to N-1 do         for J := I+1 to N do             A[I,J]

элементы, принадлежащие диагонали, соединяющей элементы An,1 и A1,n     for I := 1 to N do         A[I,N+1-I]

элементы под диагональю, соединяющей элементы An,1 и A1,n      for I := 2 to N do          for J:=N-I+2 to N do              A[I,J]

элементы над диагональю, соединяющей элементы An,1 и A1,n     for I := 1 to N-1 do         for J := 1 to N-1 do             A[I,J]

Приведем фрагмент программы, которая вычисляет произведение элементов квадратной матрицы A[1:K,1:K], принадлежащих главной диагонали и дополнительной диагонали, соединяющей элементы A[K,1] и A[1,K]:

. . . P := 1; for I := 1 to K do     P := P * A[I,I] * A[I,K+1-I];

Рассмотрим пример вычисления матрицы Y путем замены строк на столбцы в матрице X[1:N,1:N] (задача транспонирования матрицы X):

. . . for I := 1 to N do     for J := 1 to M do         Y[J,I]:= X[I,J]; writeln('Вывод транспонированной матрицы'); for I := 1 to M do begin     for J :=1 to N do         write(Y[I,J]:5 );     writeln; end;

Следующий фрагмент программы осуществляет перемножение двух матриц A[1:N,1:M] и B[1:M,1:L]. Результат размещается в новой матрицы с размерностью N на L. Умножение в соответствии с формулой:

. . . for I := 1 to N do {цикл по строкам в матрице C}     for K := 1 to L do     {цикл по столбцам в матрице C}     begin         S := 0;         for J := 1 to M do             S := S + A[I,J] * B[J,K];         C[I,K] := S     end;

Записи Объявление типа записи

При решении некоторых задач бывает удобно объединять значения различных типов под одним именем. Такая структура данных называется в Паскале записью. Запись состоит из фиксированного числа полей. В отличие от массива эти поля могут быть разного типа. Примером записи является карточка с информацией о книге, хранящейся в библиотеке, например:

код

автор

название

издательство

год

Запись имеет свое имя, например, Karta. Для обращения к отдельным компонентам записи ее полям также присваиваются имена. Структура объявления типа записи:

< имя типа > = record < список полей > end

Тип записи Karta можно объявить следующим образом:

type     Karta = record         Kod,God: integer;         Avtor, Nazvanie, Izdat: string;     end; var      Kart1, Kart2: Karta;     {Kart1, Kart2 - переменные типа Karta}

Тип записи может быть использован непосредственно при объявлении переменных, например:

var Uravn : record A,B,C: real end;

Переменная Uravn является записью и состоит из трех полей A, B, C вещественного типа. Обращение к полю записи осуществляется по составному имени, которое содержит имя переменной типа Record, точку и имя поля, например:

Kart1.Kod := 681; Kart1.Avtor := 'Фаронов'; Kart1.Nazvanie := 'Программирование'; Kart1.Izdat := 'МВТУ'; Kart1.God := 1991;

Необходимо отметить, что переменные типа записи можно использовать только в операторах присваивания, например:

Kart2 := Kart1;