Turbo Paskal Операції над матрицами
Program MATRIX; {Найменування програми} Uses CRT; VAR i1, i2, i3: integer; {Лічильник рядків} j1, j2, j3: integer; {Лічильник шпальт} operation: integer; {Варіант розвитку програми} det: real; {Определитель}k: integer; {Робоча переменная}. Введення матриць можлива лише з клавіатури, безпосередньо при виконанні програми. Введення даних «з файла» не передбачено, т.к. цей варіант в умови завдання… Читати ще >
Turbo Paskal Операції над матрицами (реферат, курсова, диплом, контрольна)
Державний Комітет Російської Федерації по Вищому Образованию.
Санкт-Петербургский.
Державний Електротехнічний Університет «ЛЭТИ».
Кафедра Радиосистем.
Пояснювальна Записка до Курсової Роботі по Дисциплине.
«Інформатика. Основи Программирования».
Варіант № 9: «Операції над Матрицами».
Виконав: студент Чапчаев В. В. факультет: РТ уч. группа: №.
Перевірив: асистент Анікін А.П.
Санкт — Петербург.
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 »);
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 (m1n1) 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 (m1n1) 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 {Висновок зворотної матриці} 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 (n2n1) or (m2m1) 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 (n2m1)) then WriteLn («ПОМИЛКА!!! ») else begin.
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 (.
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) Володимирський Б. М., Горстко Г. Б., Ерусалимский Я. М. «Математика.
Загальний курс". ———————————;
Начало.
Case operation.
Operation = 1.
Operation = 2.
Operation = 3.
Operation = 6.
Введення operation.
Введення m1.
Введення n1.
1>n1 or n1>10 or 1>m1 or m1>10.
ДА.
НЕТ.
Конец.
Введення MAS1.
Висновок MAS1.
Підрахунок det.
Висновок det.
Підрахунок обр.матр.
Висновок обр.матр.
Транспонир. матрицы.
Висновок транспонир. матрицы.
Operation = 4, 5.
ДА.
n1n2 or m1m2.
Введення n2.
Введення m2.
НЕТ.
Висновок MAS2.
Введення MAS2.
Operation = 4.
ДА.
k :=1.
НЕТ.
k :=-1.
ДА.
Operation = 5.
Висновок MAS3.
(сумма/разность).
Введення n2.
Введення m2.
1>=m2 or m2>10 or 1>=n2 or n2>10 n2m1.
ДА.
НЕТ.
Висновок MAS2.
Введення MAS2.
n3 := n2.
m3 := m1.
Висновок MAS3.
(произведение).
Текст: «Ошибка».