Реферат: Turbo Paskal Операции над матрицами
ГосударственныйКомитет Российской Федерации
по Высшему Образованию
Санкт-ПетербургскийГосударственныйЭлектротехнический Университет «ЛЭТИ»Кафедра Радиосистем
Пояснительная Записка
к Курсовой Работе поДисциплине
«Информатика. Основы Программирования»Вариант №9: «Операции надМатрицами»
Выполнил: студент Чапчаев В.В.
факультет: РТ
уч.группа: № 2142
Проверил: ассистент Аникин А.П.
Санкт – Петербург2 0 0 3
Условие задачи
Программа работает в текстовом режиме. Пользовательвыбирает операцию, вводит с клавиатуры размер матрицы и значения элементовматрицы. Программа выполняет заданную операцию и выводит на экран ее результат.Для реализации в программе предлагаются следующие операции: перемножение двухматриц, транспонирование, вычисление определителя, вычисление обратной матрицы,сложение (вычитание) двух матриц.
Метод решения задачи
После запуска программы, пользователю предлагаетсявыбрать требуемую операцию: нахождение определителя, обратной матрицы,транспонированной матрицы, сложение или вычитание двух матриц, умножение двухматриц. Это производится по средствам ввода пользователем цифры,соответствующей данной операции. Далее следует запрос о размерах данной матрицы(кол-ве строк и столбцов), после ввода которых программа проверяет, чтобывведенные значения не были отрицательными или не превышали допустимых размеровматрицы (в программе – 10х10). В случае, если перечисленные условия невыполняются, на экран выводится сообщение об ошибке, и программа завершаетработу. При выполнении условий, пользователю предлагается ввести с клавиатурыисходную матрицу «А» (в программе – MAS1). Вводпроизводится построчно, для перехода к следующей строке, пользователюнеобходимо нажать клавишу «ENTER». После того, какчисло строк становится равным числу, введенному пользователем, ввод матрицыпрекращается. Введенная матрица выводится на экран для проверки. Далее следуетпроверка «пригодности» введенной матрицы к операции, выбранной пользователем, вслучае «непригодности» матрицы, на экран выводится сообщение об ошибке, ипрограмма завершает работу. В случае «пригодности» матрицы, над нейпроизводится выбранная операция, после чего на экран выводится сообщение орезультате. Если пользователем была выбрана операция, требующая вторую матрицу«В» (в программе – MAS2), пользователю предлагаетсяввести ее размеры, как и при вводе матрицы «А», далее программа проверяет,возможно ли проведение выбранной операции над матрицами с введеннымипараметрами. Если операция невозможна, то на экран выводится сообщение обошибке, и программа завершает работу. Иначе, операция выполняется, и еерезультирующая матрица «С» (в программе – MAS3)выводится на экран.
Ввод матриц возможен только с клавиатуры,непосредственно при выполнении программы. Ввод данных «из файла» непредусмотрен, т.к. этот вариант в условии задачи не оговаривается.
Исходные данные и форма их представления
Переменные
Структура
Тип
Назначение
MAS1, MAS2, MAS3 Двумерный массив Вещественный Матрицы «А», «В», «С» i1, i2, i3 Переменные Целочисленный Счетчик строк матриц А, В и С соответственно j1, j2, j3 Переменные Целочисленный Счетчик столбцов матриц А, В и С соответственно m1, m2, m3 Переменные Целочисленный Кол-во строк матриц А, В и С соответственно n1, n2, n3 Переменные Целочисленный Кол-во столбцов матриц А, В и С соответственно operation Переменные Целочисленный Вариант программы det Переменные Вещественный Определитель 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');
<p/>ReadLn(n1);
If ((1>n1)or (n1>10) or (1>m1) or (m1>10)) {Условия ошибки}
thenbegin
WriteLn ('ОШИБКА!!!');
Halt;
end
elsebegin
WriteLn ('Введите исходную матрицу'); {Ввод исходной матрицы}
fori1:=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;
Caseoperation 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]
<p/>+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[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]);
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 {Вывод обратной матрицы}
forj1:=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;
ifoperation = 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 ('ОШИБКА!!!')
else begin
WriteLn ('Введите вторую матрицу');
for i2:=1 to m2 do
for j2:=1 to n2 do Read (MAS2[i2,j2]);
end;
fori2:=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 ø.
8) Программа выдает ответ: æ 3 12 15 ö
ç 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, начальный курс. Учебноепособие».
2) МизрохиС.В. «TurboPascal и объектно-ориентированноепрограмирование».
3) ГолубевА.Б., Сидоров Ю.Н., Чередниченко А.И., Яценко И.В. «Основы программирования наязыке Pascal».
4) БоревичЭ.И. «Определители и матрицы».
5) ГутерР.С., Резниковский П.Т. «Программирование и вычислительная математика».
6) ПисьменныйД.Т. «Конспект лекций по высшей математике», 1 часть.
7) ВладимирскийБ.М., Горстко А.Б., Ерусалимский Я.М. «Математика. Общий курс».