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 Змінні Цілочисельний Робоча мінлива

Блок - схема програми




1


Введення operation




2


Введення m1




3


Введення n1






НІ

ТАК

4




5



6





Operation = 1

Operation = 3


7


Case operation

Operation = 2

Operation = 6




Operation = 4, 5


Підрахунок обр.матр.




Висновок det











ТАК

НІ











ТАК


Operation = 5




k: =- 1


























Текст Програми:


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 ('Odivdelitel 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 {Висновок оберненої матриці}

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 ('ПОМИЛКА !!!')

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 7 березня 

 8 4 січня 

  1. Програма видає відповідь: det = 54.


2. Операція знаходження оберненої матриці:


1) З появою на екрані меню з вибором операцій, вибираємо 2.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 3.

4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 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 .


  1. Операція транспонування матриці:


1) З появою на екрані меню з вибором операцій, вибираємо 3.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 3.

4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 4 січня 

5) Програма видає відповідь:  1 5 8 

 4 3 1 

 5 4 Липня .


  1. Операція додавання матриць:


1) З появою на екрані меню з вибором операцій, вибираємо 3.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 3.

4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 4 січня 

5) На пропозицію ввести кількість рядків матриці, вибираємо 3.

6) Кількість шпальт - 3.

7) Вводимо матрицю:  2 серпні 1910 

 6 жовтня 1914 

 16 2 серпні .

8) Програма видає відповідь:  3 грудня 1915 

 15 вересня 1921 

 24 березня 1912 .


  1. Операція віднімання матриць:


1) З появою на екрані меню з вибором операцій, вибираємо 3.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 3.

4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 4 січня 

5) На пропозицію ввести кількість рядків матриці, вибираємо 3.

6) Кількість шпальт - 3.

7) Вводимо матрицю:  2 серпні 1910 

 6 жовтня 1914 

 16 2 серпні .

8) Програма видає відповідь:  -1 -4 -5 

 -5 -3 -7 

 -8 -1 -4 .


  1. Операція множення матриць:


1) З появою на екрані меню з вибором операцій, вибираємо 3.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 3.

4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 4 січня .

5) На пропозицію ввести кількість рядків матриці, вибираємо 3.

6) Кількість шпальт - 3.

7) Вводимо матрицю:  2 серпні 1910 

 6 жовтня 1914 

 16 2 серпні .

8) Програма видає відповідь:  122 42 106 

 152 72 148 

 90 78 126 .


  1. Перший винятковий випадок:


1) З появою на екрані меню з вибором операцій, вибираємо 1.

2) На пропозицію ввести кількість рядків матриці, вибираємо 0.

3) Кількість шпальт - 3.

  1. Програма видає: «ПОМИЛКА !!!».


  1. Другий винятковий випадок:


1) З появою на екрані меню з вибором операцій, вибираємо 1 (2, 3).

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 2.

4) Вводимо матрицю:  4 січня 

 5 березня 

 8 січень .

  1. Програма видає: «ПОМИЛКА !!!».


  1. Третій винятковий випадок:


1) З появою на екрані меню з вибором операцій, вибираємо 4.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

  1. Кількість шпальт - 3.


4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 4 січня .

5) На пропозицію ввести кількість рядків матриці, вибираємо 2.

6) Кількість шпальт - 2.

  1. Програма видає: «ПОМИЛКА !!!».


  1. Четвертий винятковий випадок:


1) З появою на екрані меню з вибором операцій, вибираємо 6.

2) На пропозицію ввести кількість рядків матриці, вибираємо 3.

3) Кількість шпальт - 3.

4) Вводимо матрицю:  1 4 5 

 5 7 березня 

 8 4 січня .

5) На пропозицію ввести кількість рядків матриці, вибираємо 2.

6) Кількість шпальт - 2.

  1. Програма видає: «ПОМИЛКА !!!».


Висновки по роботі


Для перевірки результатів, що видаються програмою, використовувався математичний пакет MathCAD 2001 Professional.

Істотний недолік програми в тому, що при знаходженні оберненої матриці та визначника, програма може працювати тільки з матрицями, розміром не перевищують 3х3. Це пов'язано зі значним ускладненням програми, в разі необхідності виконання перерахованих вище операцій над матрицями більшого розміру.

При написанні програми використовувалася наступна література:

  1. Фаронов В.В. «TurboPascal 7.0, початковий курс. Навчальний посібник ».

  2. Мізрохі С.В. «TurboPascal і об'єктно-орієнтоване програмування».

  3. Голубєв А.Б., Сидоров Ю.М., Чередниченко О.І., Яценко І.В. «Основи програмування мовою Pascal».

  4. Боревич Е.І. «Визначники та матриці».

  5. Гутер Р.С., Резніковська П.Т. «Програмування і обчислювальна математика».

  6. Письмовий Д.Т. «Конспект лекцій з вищої математики», 1 частина.

  7. Володимирський Б.М., жменька А.Б., Ерусалімський Я.М. «Математика. Загальний курс ».

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
34.1кб. | скачати


Схожі роботи:
Операції з матрицями
Рішення матричних рівнянь Базисний мінор Ранг Дії над матрицями
Завдання лінійної алгебри Поняття матриці Види матриць Операції з матрицями Рішення задач на перетворення
Операції над множинами
Множини і операції над ними
Операції над квадратною матрицею
Логічні операції над поняттями
Операції над літерними величинами
Множини Операції над множинами
© Усі права захищені
написати до нас