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