Переменные
|
Структура
|
Тип
|
Назначение
|
MAS1, MAS2, MAS3
|
Двумерный массив
|
Вещественный
|
Матрицы «А», «В», «С»
|
i1, i2, i3
|
Переменные
|
Целочисленный
|
Счетчик строк матриц А, В и С соответственно
|
j1, j2, j3
|
Переменные
|
Целочисленный
|
Счетчик столбцов матриц А, В и С соответственно
|
m1, m2, m3
|
Переменные
|
Целочисленный
|
Кол-во строк матриц А, В и С соответственно
|
n1, n2, n3
|
Переменные
|
Целочисленный
|
Кол-во столбцов матриц А, В и С соответственно
|
operation
|
Переменные
|
Целочисленный
|
Вариант программы
|
Переменные
|
Вещественный
|
Определитель
|
k
|
Переменные
|
Целочисленный
|
Рабочая переменная
|
Блок – схема программы
Текст Программы:
Program MATRIX;
{Наименование программы}
Uses CRT;
VAR i1, i2, i3 : integer; {Счетчик строк}
j1, j2, j3 : integer; {Счетчик столбцов}
operation: integer; {Вариант развития программы}
det : real; {Определитель}k: integer; {Рабочая переменная}
{Массивы
(матрицы), используемые в программе}
MAS1, {Матрица А}
MAS2, {Матрица В}
MAS3
: array [1..10,1..10] of real; {Матрица С}
BEGIN {Начало
программы}
WriteLn ('Что Вы желаете делать с матрицами?');
{Выбор
пользователем варианта развития программы}
WriteLn ('Если Вы желаете найти определитель матрицы, нажмите 1');
WriteLn ('Если Вы желаете найти обратную матрицу, нажмите 2');
WriteLn ('Если Вы желаете транспонировать матрицу, нажмите 3');
WriteLn ('Если Вы желаете сложить матрицы, нажмите 4');
WriteLn ('Если Вы желаете вычесть матрицы, нажмите 5');
WriteLn ('Если Вы желаете перемножить матрицы, нажмите 6');
ReadLn (operation); {Занесение выбранного варианта в
память}
WriteLn ('Введите кол-во строк исходной матрицы, не более 10');
ReadLn (m1);
WriteLn ('Введите кол-во столбцов исходной матрицы, не более 10');
ReadLn
(n1);
If ((1>n1) or
(n1>10) or (1>m1) or (m1>10)) {Условия ошибки}
then begin
WriteLn ('ОШИБКА!!!');
Halt;
end
else begin
WriteLn ('Введите исходную матрицу'); {Ввод исходной матрицы}
for
i1:=1 to m1 do
for j1:=1
to n1 do Read (MAS1[i1,j1]);
end;
for i1:=1 to
m1 do {Вывод исходной матрицы}
begin
for
j1:=1 to n1 do
Write
(MAS1[i1,j1]);
WriteLn;
end;
Case operation of
{Оператор выбора «operation»}
1: begin {Определитель}
if
(m1<>n1) then writeLn ('ОШИБКА!!!') {Условие
ошибки}
else
begin {Формула определителя}
det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3]
+MAS1[2,1]*MAS1[3,2]*MAS1[1,3]
+MAS1[1,2]*MAS1[2,3]*MAS1[3,1])
-(MAS1[3,1]*MAS1[2,2]*MAS1[1,3]
+MAS1[3,2]*MAS1[2,3]*MAS1[1,1]
+MAS1[2,1]*MAS1[1,2]*MAS1[3,3]);
WriteLn ('Opredelitel det=',det); {Вывод определителя}
end;
end;
2: begin {Обратная матрица}
if
(m1<>n1) then WriteLn ('ОШИБКА!!!') {Условие ошибки}
else
begin
det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3] {Определитель}
+MAS1[2,1]*MAS1[3,2]*MAS1[1,3]
-(MAS1[3,1]*MAS1[2,2]*MAS1[1,3]
+MAS1[3,2]*MAS1[2,3]*MAS1[1,1]
+MAS1[2,1]*MAS1[1,2]*MAS1[3,3]);
if
det = 0 then WriteLn ('ОШИБКА!!!') {Условие ошибки}
else begin {Союзная матрица}
for i1:=1 to m1 do
for
j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1];
{Итоговая формула}
for i1:=1 to m1 do
for j1:=1 to n1 do MAS3[i1,j1]:=(1/det)*MAS2[i1,j1];
WriteLn;
WriteLn ('Обратная матрица:');
for i1:=1 to m1 do begin {Вывод обратной матрицы}
for
j1:=1 to n1 do
Write (MAS3[i1,j1]);
WriteLn;
end;
end;
end;
end;
3: begin {Транспонирование матрицы}
for i1:=1 to m1 do
for
j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1]; {Формула}
WriteLn ('Транспонированная матрица: ');
for i1:=1 to m1 do begin {Вывод транспонированной матрицы}
for j1:=1 to n1 do
Write (MAS2[i1,j1]);
WriteLn;
end;
end;
4,5:
begin {Сложение/вычитание матриц}
{Ввод второй матрицы}
WriteLn ('Введите кол-во строк второй матрицы');
ReadLn (m2);
Writeln ('Введите кол-во столбцов второй матрицы');
ReadLn (n2);
If
(n2<>n1) or (m2<>m1)
then
WriteLn ('OSHIBKA!!!') {Условие ошибки}
else
begin
WriteLn ('Введите вторую матрицу');
for i1:=1 to m1 do
for j1:=1 to n1 do
Read (MAS2[i1,j1]);
end;
for
i1:=1 to m1 do {Вывод второй матрицы}
begin
for j1:=1 to n1 do
Write (MAS2[i1,j1]);
WriteLn;
end;
if
operation = 4 then k := 1;
if
operation = 5 then k := -1;
for
i1:=1 to m1 do
for j1:=1 to n1 do
MAS3[i1,j1]:=MAS1[i1,j1]+k*MAS2[i1,j1]; {Итоговая формула}
writeln('Сумма/разность:');
for i1:=1 to m1 do
begin
for j1:=1 to n1 do Write(MAS3[i1,j1]);
WriteLn;
end;
end;
6:
begin {Умножение матриц}
{Ввод второй матрицы}
WriteLn ('Введите кол-во строк второй матрицы');
ReadLn (m2);
Writeln ('Введите кол-во столбцов второй матрицы');
ReadLn (n2);
If
((1>=m2) or (m2>=10) or (1>=n2) or (n2>=10) {Условие ошибки}
or (n2<>m1)) then WriteLn ('ОШИБКА!!!')
WriteLn ('Введите вторую матрицу');
for i2:=1 to m2 do
for j2:=1 to n2 do Read (MAS2[i2,j2]);
end;
for
i2:=1 to m2 do begin {Вывод второй матрицы}
for j2:=1 to n2 do
Write (MAS2[i2,j2]);
WriteLn;
end;
m3:=m1;
n3:=n2;
for
i3:=1 to m3 do
for
j3:=1 to n3 do begin
MAS3[i3,j3] := 0;
for i2:= 1 to m2 do
{Итоговая
формула}
MAS3[i3,j3] :=MAS3[i3,j3] + MAS1[i3,i2] * MAS2[i2,j3];
end;
begin {Вывод произведения}
writeln;
writeln('Произведение:');
for i3:=1 to m1 do begin
for j3:=1 to n2 do Write (MAS3[i3,j3]);
WriteLn;
end;
end;
end;
End; {End Case}
ReadKey;
END. {Конец
программы}
Пример работы программы
1. Операция нахождения определителя:
1)
При появлении на экране меню с выбором операций,
выбираем 1.
2)
На предложение ввести кол-во строк матрицы,
выбираем 3.
3)
Кол-во столбцов – 3.
4)
Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø
5)
Программа выдает ответ: det =
54.
2. Операция нахождения обратной матрицы:
1) При появлении на экране меню с выбором операций, выбираем 2.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø
5) Программа выдает ответ: æ 1,851*100 9,259*100
1,481*10 ö
ç 7,407*100 5,555*100 1,851*100 ÷
è 9,259*100 1,296*10 7,407*100 ø.
3.
Операция транспонирования
матрицы:
1) При появлении на экране меню с выбором операций, выбираем 3.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø
5) Программа выдает ответ: æ 1 5 8 ö
ç 4 3 1 ÷
è 5 7 4 ø.
4.
Операция сложения матриц:
1) При появлении на экране меню с выбором операций, выбираем 3.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø
5) На предложение ввести кол-во строк матрицы, выбираем 3.
6) Кол-во столбцов – 3.
7) Вводим матрицу: æ 2 8 10 ö
ç 10 6 14 ÷
è 16 2 8 ø.
ç 15 9 21 ÷
è 24 3 12 ø.
5.
Операция вычитания матриц:
1) При появлении на экране меню с выбором операций, выбираем 3.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø
5) На предложение ввести кол-во строк матрицы, выбираем 3.
6) Кол-во столбцов – 3.
7) Вводим матрицу: æ 2 8 10 ö
ç 10 6 14 ÷
è 16 2 8 ø.
8) Программа выдает ответ: æ -1 -4 -5 ö
ç -5 -3 -7 ÷
è -8 -1 -4 ø.
6.
Операция перемножения
матриц:
1) При появлении на экране меню с выбором операций, выбираем 3.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø.
5) На предложение ввести кол-во строк матрицы, выбираем 3.
6) Кол-во столбцов – 3.
7) Вводим матрицу: æ 2 8 10 ö
ç 10 6 14 ÷
è 16 2 8 ø.
8) Программа выдает ответ: æ 122 42 106 ö
ç 152 72 148 ÷
è 90 78 126 ø.
7.
Первый исключительный
случай:
1) При появлении на экране меню с выбором операций, выбираем 1.
2) На предложение ввести кол-во строк матрицы, выбираем 0.
3) Кол-во столбцов – 3.
4)
Программа выдает: «ОШИБКА!!!».
8.
Второй исключительный
случай:
1) При появлении на экране меню с выбором операций, выбираем 1 (2,
3).
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 2.
4) Вводим матрицу: æ 1 4 ö
ç 5 3 ÷
è 8 1 ø.
5)
Программа выдает: «ОШИБКА!!!».
9.
Третий исключительный
случай:
1) При появлении на экране меню с выбором операций, выбираем 4.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3)
Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø.
5) На предложение ввести кол-во строк матрицы, выбираем 2.
6) Кол-во столбцов – 2.
6)
Программа выдает: «ОШИБКА!!!».
10.
Четвертый исключительный
случай:
1) При появлении на экране меню с выбором операций, выбираем 6.
2) На предложение ввести кол-во строк матрицы, выбираем 3.
3) Кол-во столбцов – 3.
4) Вводим матрицу: æ 1 4 5 ö
ç 5 3 7 ÷
è 8 1 4 ø.
5) На предложение ввести кол-во строк матрицы, выбираем 2.
6) Кол-во столбцов – 2.
7)
Программа выдает: «ОШИБКА!!!».
Выводы по работе
Для
проверки результатов, выдаваемых программой, использовался математический пакет
MathCAD 2001 Professional.
Существенный
недостаток программы в том, что при нахождении обратной матрицы и определителя,
программа может работать только с матрицами, размером не превышающие 3х3. Это
связано со значительным усложнением программы, в случаи необходимости
выполнения вышеперечисленных операций над матрицами большего размера.
При
написании программы использовалась следующая литература:
1)
Фаронов В.В. «TurboPascal 7.0,
начальный курс. Учебное пособие».
3)
Голубев А.Б., Сидоров Ю.Н., Чередниченко А.И.,
Яценко И.В. «Основы программирования на языке Pascal».
4)
Боревич Э.И. «Определители и матрицы».
5)
Гутер Р.С., Резниковский П.Т. «Программирование и
вычислительная математика».
6)
Письменный Д.Т. «Конспект лекций по высшей
математике», 1 часть.
7)
Владимирский Б.М., Горстко А.Б., Ерусалимский Я.М.
«Математика. Общий курс».