Пример 9.1.
Найти след (сумма элементов главной диагонали) квадратных матрицы A[k,k] и B[n,n], где k, n – размеры матриц. Сделаем это с помощью подпрограммы-функции Sled. В программе пользователь по запросу вводит размеры матриц A и B. Затем матрицы заполняются случайными числами с помощью вложенных циклов и функции Random (возвращает случайные вещественные числа в интервале 0..1). Для контроля ввода матрицы выводятся на экран. Далее последовательно для матриц A и B вызывается функция Sled, и вычисленные значения следов матриц A и B выводятся на экран.
Консоль перед закрытием программы:
Листинг программы
program prg_9_1;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, RusTrans;
const
Max=40; // Максимальный размер матриц
type
Mas=array[1..Max,1..Max] of Real; // Тип для матрицы
var
i,j,k,n:integer;
A,B:Mas;
Sled1,Sled2:real;
function Sled(M:Mas; r:integer):Real; // Функция
var
i:Integer;
s:Real;
begin
s:=0; // Обнуление суммы
for i:=1 to r do s:=s+M[i,i]; // Накопление суммы
Result:=s;
end;
begin
writeln(Rus(‘Введите размеры матриц не более ‘),Max);
write(Rus(‘ Первая k=’)); // Первая матрица
readln(k);
write(Rus(‘ Вторая n=’)); // Вторая матрица
readln(n);
writeln;
writeln(Rus(‘Спасибо. Для продолжения нажмите Enter’));
writeln;
readln;
Randomize;
for i:=1 to k do // Формирование A
for j:=1 to k do A[i,j]:=0.5-random;
for i:=1 to n do // Формирование B
for j:=1 to n do B[i,j]:=0.5-random;
writeln(Rus(‘Матрицы заполнены случайными числами’));
writeln;
for i:=1 to k do // Вывод матрицы A
begin
for j:=1 to k do write(A[i,j]:8:3);
writeln;
end;
writeln;
for i:=1 to n do // Вывод матрицы B
begin
for j:=1 to n do write(B[i,j]:8:3);
writeln;
end;
readln;
Sled1:=Sled(A,k); // Вызов функции для A
Sled2:=Sled(B,n); // Вызов функции для B
writeln(Rus(‘Результаты’)); // Заголовок ответа
writeln;
writeln(‘Sled1= ‘, Sled1:5:2); // Ответы
writeln(‘Sled2= ‘, Sled2:5:2);
readln; // Ожидание Enter
end.