КУРСОВА РОБОТА
НА ТЕМУ:
«Структуровані типи даних.Операції над двомірними масивами »
Анотація
В цій курсовій роботі розглянуті дії над
матрицями , такі як додавання , віднімання, мно-
ження та ділення двох матриць. А також знаход-
ження транспонованої та оберненої матриць.Про-
грами реалізовані на мові програмування Turbo
Pascal 7.0
ЗМІСТ
1.Вступ.
2.Теоретична частина.
2.1.Матриця і її властивості.
2.2. Дії над матрицями.
3.Постановка задачі.
4.Додатки.
4.1.Додатток 1(текст програм).
4.2.Додаток 2(блок-схеми до програм).
5.Висновки.
6.Використана література.
1.Вступ.
У всі часи людина прагнула розширити свої можливості, за допомогою різних знарядь праці, пізнання світу та засобів існування.
Так, наприклад нестачу зору компексує : мікроскоп, телескоп, радіолокатор. Обмежені можливості передачі інформації поширюються телефоном, радіо, телебаченням.
Обчислювані машини «доповнюють» можливості мозку людини, розширюють його можливості по обробці інформації, дозволяють прискорити прийняття рішення в процесі якої-небудь роботи.
В кінці 40-х років 20 ст. Праця в області ядерної фізики, баллистики керуючих знарядь, термодинаміки і т.д. вимагали такої обчислюваної роботи, яку вже було не можливо виконати за допомогою арифмометрів-головного обчислюваного інструмента того часу. Наука і техніка були поставлені перед делемою : або всім взятись за арифмометри або винайти новий ефективний інструмент обчислення. Аналогічні проблеми уже не раз виникали, і будуть неодноразово виникати перед вченими і інженерами: екстенсивний шлях розвитку дальше неможливий, потрібний новий, інтенсивний шлях. Проблема була вирішена створенням універсальної обчислюваної машини. Термін «універсальна»використовується не випадково. Спеціалізовані машини (наприклад, для обробки банківських рахунків і т. д.) існували і раніше, але не було машини, команди якої записані в память, можна б було швидко замінити новими.
Крім математичних обчислень ЕОМ може виконувати і логічні, тобто робити вибір між варіантами (вітками) продовження дій в залежності від виконання деяких умов. Таким чином ЕОМ-це дещо більше ніж «швидкий арифмометр».
Коротка характеристика різних поколінь ЕОМ
Перше покоління ЕОМ:
Технічна основа елементної бази машин 1-го покоління-електронні лампи. Максимальна швидкодія -10 у степені 2. Математичні операції в секунду(оп/с), обєм оперативної памяті -10 у 2 степені слів. Режим використання-монопольний, тобто в розпорядженні користувача були всі ресурси машини і її управління.
Друге покоління ЕОМ:
Технічна основа - транзистори. максимальна швидкодія-10 у 4 степені оп/с, обєм оперативної памяті-10 у 4 степені слів.Режим виконання-пакетна обробка.
Третє покоління ЕОМ:
Технічна основа-занадто великі інтегральні схеми, які на малих півпровідникових кристалах реалізують великі схеми машин 2-го покоління. Максимальна швидкодія-10 у 6 степені оп/с, оперативна память -10 у 6 степені слів, внутрішня память-10 у 9 степені слів. Метод виконання - режим розподілу часу разом з пакетною обробкою.
4-те покоління ЕОМ:
Технічна основа-занадто великі інтегральні схеми. Традиційна архітектура ЕОМ Фон Неймана домінувала на протязі трьох поколінь.
Максимальна швидкодія-10 у 9 степені оп/с, оперативна память-10 у 7 степені слів ,внутрішня память обмежена в основному економічними міркуваннями.
5-те покоління ЕОМ.
Проекти ЕОМ п’ятого покоління знаходяться в стадії реалізації. Максимальна швидкодія математичних обчислень доповнюється тут високими скоростями логічного виводу. Форма спілкування з ЕОМ
на звичайній мові і дисципліна програм, як наука для користувача перестають в майбутньому бути актуальними.
Історія і зміст предмета.
Обчислюваною математикою називають розділ математики, в якому вивчають різні проблеми одержання числових результатів обчислень математичних задач.
Якщо звернутися до історії математики то можна помітити, що обчислювана математика перетворилась на самостійну вітку порівняно недавно, десь в середині нашого століття. Цей факт в любому напрямку науки повязані з появленням власних і внутрішніх задач.
Обчислювальна математика, як частина математики має таку ж древню і багату історію, як і сама математика. Евклідова математика і механіка Ньютона, теорія електромагнітного поля і квантова теорія побудованіна математичній основі і дають потужні інструменти обчислень.
Зпоявленням ЕОМ розпочався золотий вік обчислювальної математики.вона швидко розвивається. Звернувшись до періоду розвитку обчислювальної математики після полявлення ЕОМ, можна побачити, що найбільш яскраві досягнення в розвязку задач були отримані саме тими вченими і інженерами, хто працював на ЕОМ, всі отрамані засоби математики:»чистої», прикладної, обчислювальної.
З точки зору техніки обчислювальної математика дає в її розпорядження методи , які умовно можна розбити на слідуючі 4 групи: якісні, аналітичні , численні.
2.1. Матриця і її властивості.
Прямокутна таблиця з mn чисел ,що має m рядків і n стовпців
A= ... ... ... ...
am1 am2 ... amn
називається матрицею. Коротко матрицю позначають так:
де ai j - елементи матриці.
Матрицю з єдиним стовпцем прийнято називати вектор-стовпцем, а матрицю з єдиним рядком вектор-рядком.
Рівні матриці повинні мати рівні кількості рядків і стовпців, а також рівні відповідні елементи.
Якщо в матриці число рядків рівне числу стовпців ,то матриця називається квадратною:
A= ... ... ... ...
an1 an2 ... ann
Матриця А* називається транспонованою до матриці А , якщо стовпці матриці А являються рядками матриці А*.
A= a21 a22
a31 a32
Транспонованою матрицею А* буде:
A*=
a12 a22 a32
Приклад. Нехай А=(aij), де і=1,..,m, о=1,..,n. Це значить, що А- матриця порядку mn. Позначимо А* матрицю В = (bij), для якої bij = aji, тоді А*матриця порядку nm.
Квадратна матриця А називається симетричною відносно головної діагоналі ,якщо ai j=aj i .
Квадратна матриця, в якій всі елементи, що не лежать на головній діагоналі, дорівнюють нулю, називається діагональною. Якщо елементи діагональної матриці, що розміщені на головній діагоналі, дорівнюють одиниці, то матриця називається одиничною і позначають її буквою Е:
Е= 0 1 ... 0
. . . . . . . . . . .
0 0 ... 1
2.2. Дії над матрицями:
Як виявляється, над матрицями можливі арифметичні дії, властивості яких близькі до властивостей арифметичних дій над числами.
Сумою двох матриць ai j і bi j з одинаковою кількістю рядків і стовпців називається матриця сi j ,у якої елементом сi j є сума aij+bij відповідних елементів матриць ai j bi j ,тобто
якщо ai j+bi j=ci j (i=1,2,..,m; j=1,2,..,n)
a21 a22 b21 b22 a21+b21 a22+b22
Аналогічно знаходимо різницю двох матриць.
Матрицці різних порядків додавати(віднімати) не можна.
Множення матриці на число. Щоб помножити матрицю на число або число на матрицю, потрібно кожний елемент матриці помножити на це число.
a21 a22 = a21 a22 .
Безпосередніми наслідками вказаних визначень є співвідношення:
1 • А = А • 1 = А ;
0 • А = А • 0 = 0 ;
• О = О • = О ;
( А) = ( ) А = (А ) = А ( );
А + (В +С) = (А+ В) + С;
А + В = В + А;
( + ) А = А + А;
(А + В) = А + В;
А + О = О + А = А;
А + (-1)А = О;
Тут А, В, С - матриці одного порядку, , - числа, О - нульова матриця (всі її елементи дорівнюють нулеві). Перевірка вказаних властивостей не викликає ускладнень.
Елемент ci j матриці С, яка є добутком матриці В на матрицю А, дорівнює сумі добутків елементів і-того рядка матриці В на відповідний елемент j-того стовпця матриці А, тобто
k
ci j =bi a j (i=1,2,..,m; j=1,2,..,n).
=1
Властивості добутку матриць:
(А В) С = А (В С);
А (В + С) = А В + А С;
(А + В) С = А С + В С;
А Е = Е А = А;
(А В)*= В*А*;
Тут А, В, С - довільні матриці, для яких вказані рівності мають сенс.
Доведемо першу рівність - асоціативність множення матриць.
Позначимо D = A B, F = B C, G = D C, H = A F. Потрібно довести, що G =H. Оскільки множення вказаних вище матриць можливе, то А буде порядку mn, В - порядку nk, С - порядку kl. З означення множення дістанемо, що D - порядку mk, F - порядку nl, G i H - матриці одного порядку ml.
Зафіксуємо довільні i, j і доведемо, що gij = hij.Маємо
k k k
gij = di cj = ai b cj ;
=1 =1 =1
n n k
hij = aifj = ai b cj .
=1 =1 =1
Позначивши t = ai b cj, отримаємо
k n n k
gij = t , hij = t .
=1 =1 =1 =1
Кожна із вказаних сум дорівнює сумі всіх елементів деякої матриці (t ), обчисленій двома різними способами. Отже, hij = gij, що й потрібно довести.
Інші властивості добутку доводяться аналогіччно, тільки простіше.
Оберненою називається матриця А-1, така що якщо її помножити на матрицю до якої вона обернена, то в результаті отримаємо одиничну матрицю. А*А-1=Е
Знайти матрицю, обернену до квадратної матриці М= аi k ,можна за допомогою операцій над розширеною матрицею А:
A= . . . . . . . . . . . . . . . .
mn1 . . . . mnn 0 . . . . 1
Якщо ліву частину матриці А звести елементарними перетвореннями до одиничної, то в правій частині дістанемо матрицю, обернену до М.
До елементарних перетворень належать:
1)Переставлення двох рядків матриці А (або двох однойменних стовпців в лівій і правій частинах матриці А);
2)Множення рядка на відмінне від нуля число( або однойменних стовпців в лівій і правій частинах матриці А);
3)Заміна рядка сумою цього і будь-якого іншого рядка (або та ж сама сума однойменних стовпців в лівій і правій частинах матриці А);
Ділення двох матриць.
Дію ділення можна замінити дією множення на обернену матрицю
A / B = A * В-1
PROGRAM povorot; {Поворот матриці }
USES CRT;
CONST
N=3;
TYPE
S=ARRAY[1..N,1..N]OF REAL;
SS=ARRAY[1..N,1..N]OF REAL;
VAR
S1:S;S2:SS;M,i,j:INTEGER;
BEGIN
FOR i:=1 TO N DO
BEGIN
FOR j:=1 TO N DO
BEGIN
READ(S1[i,j]); {Ввід матриці}
END;
END;
WRITE('Vvedit kut povorotu');
READ(M); {Ввід кута повороту}
CASE M OF
90:BEGIN {Поворот матриці на 90}
FOR i:=1 TO N DO
FOR j:=1 TO N DO
S2[I,J]:=S1[N-J+1,I];
FOR i:=1 TO N DO
FOR j:=1 TO N DO
WRITELN(S2[i,j]);
END;
180: BEGIN {Поворот матриці на 180}
FOR I:=1 TO N DO
FOR J:=1 TO N DO
S2[I,J]:=S1[N-I+1,N-J+1];
FOR I:=1 TO N DO
FOR J:=1 TO N DO
WRITELN(S2[I,J]);
END;
270: BEGIN {Поворот матриці на 270}
FOR I:=1 TO N DO
FOR J:=1 TO N DO
S2[I,J]:=S1[J,N-I+1];
FOR I:=1 TO N DO
FOR J:=1 TO N DO
WRITELN(S2[I,J]); {Вивід результату}
END; END;
END.
Program Suma; {Сума двох матриць}
Const dim1=20;
dim2=40;{dim2=2*dim1}
Type ar1=array[1..dim1,1..dim2] of real;
ar2=array[1..dim1,1..dim2] of real;
ar3=array[1..dim1,1..dim2] of real;
Var i,j,n,m:integer;
A:ar1;
B:ar2;
C:ar3;
Begin
write('Введіть розмірність матриці М');
readln(n,m); {Ввід розмірності матриць }
write('Введіть матрицю М');
For i:=1 to n do
For j:=1 to m do
read(A[i,j]); {Ввід першої матриці}
write('Введіть матрицю М');
For i:=1 to n do
For j:=1 to m do
read(B[i,j]); {Ввід другої матриці}
For i:=1 to n do
For j:=1 to m do
C[i,j]:=A[i,j]+B[i,j]; {Обчислення суми матриць}
For i:=1 to n do
For j:=1 to m do
writeln(C[i,j]); {Вивід результату}
End.
Результати:
n=2,m=3
1 -4 5 6 -1 0 7 -5 5
0 3 8 6 0 -9 6 3 -1
Program Rizn; {Знаходження різниці двох матриць}
Const dim1=20;
dim2=40;
Type ar1=array[1..dim1,1..dim2] of real;
ar2=array[1..dim1,1..dim2] of real;
ar3=array[1..dim1,1..dim2] of real;
Var i,j,n,m:integer;
A:ar1;
B:ar2;
C:ar3;
Begin
write('Введіть розмірність матриці М');
readln(n,m); {Ввід розмірності матриць}
write('Введіть матрицю М');
For i:=1 to n do
For j:=1 to m do
read(A[i,j]); {Ввід першої матриці}
write('Введіть матрицю М');
For i:=1 to n do
For j:=1 to m do
read(B[i,j]); {Ввід другої матриці}
For i:=1 to n do
For j:=1 to m do
C[i,j]:=A[i,j]-B[i,j]; {Знаходження їх різниці}
For i:=1 to n do
For j:=1 to m do
writeln(C[i,j]); {Вивід результату}
End.
Результати:
n=2,m=3
0 3 8 6 0 -9 -6 3 17
if k<>i then
For j:=n1 downto 1 do
a[k,j]:=a[k,j]-a[i,j]*a[k,i];end;
For i:=1 to n do
For j:=1 to n do
m[i,j]:=a[i,j+n];
For i:=1 to n do
For j:=1 to n do
writeln(m[i,j]:6:2); {Вивід оберненої матриці}
М= 0 -1 -5 М-1 = 0,41 0,18 -0,112
7 4 3 -0,08 -0,24 0,02
Program Dobutok; {Множення числа на матрицю}
Const dim1=20;
dim2=40;{dim2=2*dim1}
Type ar1=array[1..dim1,1..dim2] of real;
ar2=array[1..dim1,1..dim2] of real;
Var i,j,n,m:integer;
A:ar1; C:ar2;
r:real;
Begin
write('Введіть число');
readln(r); {Ввід числа}
write('Введіть розмірність матриці М');
readln(n,m); {Ввід розмірності матриці}
write('Введіть матрицю М');
For i:=1 to n do
For j:=1 to m do
read(A[i,j]); {Ввід матриці}
For i:=1 to n do
For j:=1 to m do
C[i,j]:=A[i,j]*r; {Множення матриці на число}
For i:=1 to n do
For j:=1 to m do
writeln(C[i,j]); {Вивід результату}
End.
Резуьтати:
r
M= 3 5 C= 15 25
4 -2.5 20 -12.5
Program obernena; {Знаходження оберненої матриці}
Const dim1=20;
dim2=40;{dim2=2*dim1}
Type ar=array[1..dim1,1..dim1] of real;
ar1=array[1..dim1,1..dim2] of real;
Var i,j,k,n1:integer; n:integer;Var m:ar;e:real;
t,s:real;
a:ar1;
Begin
readln(e); {Ввід точності обчислень}
write('Введіть розмірність матриці М');
readln(n); {Ввфд розмірності квадратної матриці}
write('Введіть матрицю М');
For i:=1 to n do
For j:=1 to n do
read(m[i,j]); {Ввід матриці}
n1:=2*n;
For i:=1 to n do
For j:=1 to n1 do
if j<=n then a[i,j]:=m[i,j]
else if j=n+i then a[i,j]:=1
else a[i,j]:=0;
For i:=1 to n do
begin k:=i;s:=a[i,i];
for j:=i+1 to n do
begin t:=a[j,i];
if abs(s)<abs(t) then begin s:=t;k:=j;end;end;
if abs(s)<e then begin {Знаходження визначника}
write('M-вироджена');Halt end;
For j:=i to n1 do
begin t:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=t/s;end; {Знаходження елементів оберненої }
For k:=1 to n do {матриці}
рrgram dob_mas;
Const dim1=30;
dim2=40;
dim3=30;
Type ar1=array[1..dim2,1..dim1] of real;
ar2=array[1..dim3,1..dim2] of real;
ar3=array[1..dim1,1..dim3] of real;
Var i,j,k,l,n,m:integer;
A:ar1;
B:ar2;
C:ar3;
Begin
write('Введіть розмірність матриці М');
readln(n,m,l);
write('Введіть матрицю А');
For i:=1 to n do
For j:=1 to m do
read(A[i,j]);
write('Введіть матрицю В');
For i:=1 to l do
For j:=1 to n do
read(B[i,j]);
For i:=1 to m do
For j:=1 to l do
For k:=1 to n do
C[i,j]:=C[i,j]+A[k,i]*B[j,k];
For i:=1 to m do
For j:=1 to l do
writeln(C[i,j]);
End.
Результати:
n=2,m=2,l=2,
1 2 3 4
3 4 1 2
рrogram dilennya; {Ділення двох матриць}
Const dim1=20;
dim2=40;{dim2=2*dim1}
Type ar1=array[1..dim1,1..dim1] of real;
ar2=array[1..dim1,1..dim1] of real;
ar3=array[1..dim1,1..dim2] of real;
ar4=array[1..dim1,1..dim2] of real;
Var i,j,k,n1:integer; n:integer; M:ar3;e:real;
t,s:real;
A:ar1;B:ar2;c:ar4;
Begin
readln(e); {Знаходження оберненої матриці }
write('Введіть розмірність матриці М');
readln(n);
write('Введіть матрицю M');
For i:=1 to n do
For j:=1 to n do
read(M[i,j]);
write('Введіть матрицю B');
For i:=1 to n do
For j:=1 to n do
read(B[i,j]);
n1:=2*n;
For i:=1 to n do
For j:=1 to n1 do
if j<=n then a[i,j]:=m[i,j]
else if j=n+i then a[i,j]:=1
else a[i,j]:=0;
For i:=1 to n do
begin k:=i;s:=a[i,i];
for j:=i+1 to n do
begin t:=a[j,i];
if abs(s)<abs(t) then begin s:=t;k:=j;end;end;
if abs(s)<e then begin
write('M- вироджена');Halt end;
For j:=i to n1 do
begin t:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=t/s;end;
For k:=1 to n do
if k<>i then
For j:=n1 downto 1 do
a[k,j]:=a[k,j]-a[i,j]*a[k,i];end;
For i:=1 to n do
For j:=1 to n do
m[i,j]:=a[i,j+n];
For i:=1 to n do
For j:=1 to n do
For k:=1 to n do
C[i,j]:=C[i,j]+B[k,i]*M[j,k]; {Множення матриці на обернену}
For i:=1 to n do
For j:=1 to n do
writeln(C[i,j]:6:2); {Вивід результату}
End.
Результати:
n=3
M= 4 5 6 B= 4 5 6
7 8 9 7 8 9
C= 0 1 0
0 0 1
Початок
Ввід n,m
C
i
j
В
Кінець
Початок
Ввід n,m
C
i
j
В
Кінець
Ввід n,m,l
C
i
j
В
Ввід e,n
n
т
a
a[i,j]=1 a[i,j]=0
k
t
s
t
k
a[k,j]=a[k,j]-a[i,j]*a[k,i]
M
i
j
В
Кінець
Ввід e,n
n
т
a
a[i,j]=1 a[i,j]=0
k
t=a[j,i]
s
t
k
a[k,j]=a[k,j]-a[i,j]*a[k,i]
M
C
i
j
В
Кінець
Ввід n
В
М=90 M=180M=270
S2[i,j]=S1[n-j+1,i] S2[i,j]=S1[n-i+1,n-j+1] S2]i,j]=S1[j,n-i+1]
i
j
В
Кінець
Program kursov;
type E=ARRAY [1..3,1..3] of real;
var A,B,C,S:E;
f,a1,b1:real;
t:integer;
mass:char;
procedure INPUT (mass:char; var A:E);
var x,y,n:integer;
begin
writeln ('‚ўi¤ Ґ«Ґ¬Ґвiў ¬ бЁўг ',mass);
for y:=1 to 3 do
begin
for x:=1 to 3 do
read (A[x,y]);
end;
end;
procedure SUMM (A,B:E; var S:E);
var x,y:integer;
begin
for y:=1 to 3 do
for x:=1 to 3 do
S[x,y]:=A[x,y]+B[x,y];
end;
procedure SUB (A,B,S:E; var C:E;b2:real);
var x,y,i:integer;
begin
SUMM (A,B,S);
write ('Њ бЁў C');
for y:=1 to 3 do
begin
writeln;
for x:=1 to 3 do
begin
C[x,y]:=0;
for i:=1 to 3 do
C[x,y]:=C[x,y]+(S[i,x]*B[i,y]);
write (C[x,y]:7:2);
if (x=1) AND (y=1) then b2:=C[x,y]
else
if C[x,y]<b2 then b2:=C[x,y];
end;
end;
writeln;
writeln ('Њii¬ «мЁ© Ґ«Ґ¬Ґв ¬ ваЁжi ‘ у ',b2:7:2);
end;
begin
mass:='A';
INPUT (mass,A);
mass:='B';
INPUT (mass,B);
SUB (A,B,S,C,b1);
writeln (' ’ Ў«Ёжп § зҐм ¤«п § ¤ ®х дгЄжiх');
writeln (' t f');
for t:=1 to 50 do
begin
if t>40 then a1:=0.2
else
a1:=0.11;
f:=SIN(a1*t)-EXP(2*a1*t)+b1;
writeln(t:8,f:16:4);
end;
end.
Початок
Ввід n,m
S
C
i
j
В
т
Вивід b2
Кінець
Задача.
Надрукувати порядково матрицю С і її мінімальний елемент.
А= 3,3 0,4 2,0 В= 3,8 0,5 0,8
1,7 1,5 -0,2 1,2 0,6 0,25
-30,61 23,73 10,62
С= -36,09 -21,05 -6,26
-12,68 6,68 3,34
31
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |