Формування квадратної матриці
МІНІСТЕРСТВО ТРАНСПОРТУ ТА ЗВЯЗКУ УКРАЇНИ
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ДЕРЖАВНИЙ УНІВЕРСИТЕТ
ІНФОРМАЦІЙНО-КОМУНІКАЦІЙНИХ ТЕХНОЛОГІЙ
КАФЕДРА
ОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИ
КУРСОВА РОБОТА
З дисципліни «Інформатика».
Варіант81
Зміст
1. Завдання на курсову роботу
. Базова програма реалізації алгоритму
. Модуль глобальних описів
. Сервісний модуль обслуговування матриці
. Головна програма
. Результати роботи програми
. Використована література
1. Завдання на курсову роботу
Загальне завдання на курсову роботу
1. По функції f(і,j), що задана, необхідно сформувати квадратну матрицю А = {aij}, i,j = 1,2,...,..., т, де аij =f(i,j). (Для демонстрації т =5.)
.Після чого із цієї матриці відповідно до заданого алгоритму необхідно отримати компоненти вектора X = {хi}, і = 1,2,..., п.
. Після отримання компонентів вектора X обчислити значення функції U.
Індивідуальне завдання (Варіант №22)
1. Функція f(i,j)= 2( - 2)i (і - 3,9)(-1,5)i-j(і/З - 1,1).
. За вектор X взяти перший за порядком у зворотному порядку стовпець матриці з найменшою сумою його елементів, якщо його максимальний елемент знаходиться на непарній позиції, в іншому випадку за вектор X взяти попарну суму елементів головної і допоміжної діагоналей.
. За U взяти суму найбільшого та найменшого елементів вектору X, якщо с<b, в іншому випадку за U взяти добуток першого та останнього елементів.
2. Базова програма реалізації алгоритму
Program Golovna; {Програма утворення квадратної матриці по функції A[i,j], вектора X та обчислення значення U
Uses Crt; {Використовуваний бібліотечний модуль}
Const Len=15; {опис постійної, найбільша розмірність матриці та вектора}
Туре=array[l..Len,l..Len] of real; {Користувацький тип mtr}
mas=array[l..Len] of real; {Користувацький тип mas} Vаr{перелік використаних змінних та їх типів}
i,j,n:integer; {параметри циклу і розмірності}
a:mtr; {двохмірний масив}
x:mas; {одномірний масив X}
adr:integer; {змінна, передбачена для фіксування в ній адреси першого за порядком стовпця матриці з найменшою сумою елементів.}
max:real; {передбачена для фіксування в ній найбільшого значення елемента стовпчика з адресою adr.}
am:integer; {змінна, в котрій будемо фіксувати адресу найбільшого елемента стовпчика матриці з адресою adr.}
suml,sum2:real; {Змінна sum1 - передбачена для накопичення суми елементів стовпчика матриці з адресою adr. Змінна sum2 - передбачена для накопичення в ній суми елементів стовпчика з адресою j. Значення змінної adr завжди буде дорівнювати адресі першого за порядком стовпчика матриці з найменшою сумою його елементів}
min:real; {робоча змінна}
r: real; {робоча змінна}
c,b:integer;
u:real; {змінна для обчислення значення функції}
BEGIN{початок програми}
CIrscr; {функція котра перед кожним запуском програми очищає екран виведення результату}
writeln ('Vvedite razmernost matrix A: n'); {виведення повідомлення}
write ('n='); {виведення повідомлення} read (n); {введення розмірності матриці}
For i:=1 to n do {зовнішній цикл перебігу матриці по рядках}
For j := 1 to n do begin {вкладений цикл перебігу рядка поелементно}
{write('a[',i,',',j,']=');read(a[i,j]);} {якщо прийняти фігурні дужки і взяти у фігурні дужки вираз для формування елемента матриці - отримаємо тест програму}
if і mod 2=1 then r:=-exp(i*ln(2)) else r:=exp(i*ln(2)); (i-j)mod 2=1 then
a[i,j]:=-exp((i-j)*ln(1.5))*2*r*(i-3.9)*(i/3-l.l) {утворення елемента матриці}
else
a[i,j]:=exp((i-j)*In(1.5))*2*r*(i-3.9)*(i/3-l.1); {утворення елемента матриці}
end;
Clrscr;
writeln('----Matrica----'); {виведення повідомлення}
For i:= 1 to n do begin {цикл виведення елементів матриці на екран}
For j:= 1 to n do
write('A[',i,j,']=',a[i,j] :6:3,' '); {виведення елемента матриці на екран}
writeln; {виведення порожнього рядка з метою відділити виведену інформацію}
writeln;;;
writeln('----Vector----') ; {виведення повідомлення}
adr:=1; {надаємо змінній adr :=1 початкового значення. Змінна передбачена для фіксування в ній адреси першого за порядком стовпця матриці з найменшою сумою елементів. Таким чином, надаючи їй значення 1, припускаємо що перший стовпець має найменшу суму елементів}
For j:= 2 to n do begin {цикл перебігу матриці по стовпцям. Значення змінної j буде вказувати адресу стовпчика, що перевіряється. Змінна приймає значення від 2 до п.}
sum1:=0;sum2:=0; {початок перевірки кожного нового стовпчика матриці, тобто після кожної зміни значення j змінним sum1: =0;sum2:=0; max:=a[1,adr];am:=1 надаємо початкових значень}
max:=a[1,adr];am:=1;
For i:= 1 to n do begin {цикл перебігу j- го стовпчика поелементно, в якому відбувається утворення сум елементів стовпчиків}
sum1:=sum1+a[i,adr]; {sum1- сума елементів стовпчика матриці з адресою adr }
sum2:=sum2+a[i,j]; {sum2 - сума елементів j-го стовпчика матриці}
max:=a[i,adr];
am:=i;
end;end;
ifsuml>sum2 {відбувається порівняння значень сум}
then adr:=j; {фіксуємо адресу стовпчика матриці з найменшою сумою елементів}
end;i:= 1 to n do begin {цикл в котрому відбувається утворення та виведення елементів вектора}
if am mod 2=1 { перевіряємо, чи є адреса найбільшого елемента, першого за порядком стовпчика матриці, непарною }
then x[i]:=a[n+l-i,adr]f {якщо так то елемент вектора утворюється в результаті взяття цього стовпчика за елементи вектора у зворотному порядку}
else х[і]:=а[і,і]+а[і,п+1-і]; {якщо адреса найбільшого елемента буде парною, то елемент вектора буде утворюватися в результаті суми відповідних елементів головної та допоміжної діагоналі матриці}
writeln('х[,і,]=',х[і]:5:3); {виведення щойно утвореного елемента вектора}
end;
writeln('--------Funkciy--------');
write('c='); {виведення повідомлення} read(c); {введення номера заліковки та номера за списком у групі}
write('b='); {виведення повідомлення} read(b);
mах:=х[1];min:=х[1]; {Змінні тах:=х[1];тіп:=х[1] отримують значення першого елемента вектора}
if с<b {порівняння значень змінних с та b} then begіп {якщо c<b то програма прямує до циклу перебігу вектора поелементно, в його тілі відбувається знаходження найбільшого та найменшого елементів вектора. По закінченню перебігу цього циклу відбувається утворення значення функції в результаті суми знайдених значень найбільшого та найменшого елементів вектора}
For i:= 1 to n do beginmax<x[i] then max:=x[i];min>x[i] then min:=x[i];;:=max+min endU:=x[l]*x[n]; {якщо c>=b то значення функції буде утворено в результаті добутку першого та останнього елементів вектора}
writeln('U=',U:5:3); {виведення значення функції на екран}
repeat until keypressed; .
вектор квадратний матриця алгоритм
3. Модуль глобальних описів
Global; =10;=array [l..len,l..len] of real;=array[l..len] of real;.
4. Сервісний модуль обслуговування матриці
MODUL22;global;CreateMatrix(n:byte; var M:Tmatr);OutputMatrix(n:byte; var M:Tmatr);OutputVector(n:byte; V:TVect);і,j: integer;CreateMatrix;і,j: integer;: real; і:= 1 to n do beginj:=1 to n do begin
{write('a[',i,',,j,'] = ') ; read(m[i,j]) ;} і mod 2=1 then r:=-exp(i*ln(2)) else r:=exp(i*ln(2)); (i-j)mod 2=1 then [i,j]:=-exp((i-j)*ln(1.5))*2*r*(i-3.9)*(i/3-l.l) [i,j]:=exp((i-j)*ln(1.5))*2*r*(i-3.9)*(i/3-1.1)/ ;;end;OutputMatrix;;
writeln('_____Elementu Matricu______');
for і:=1 to n do
begin j:=1 to n do(M[i,j]:10:3,' '); ; ; ; ;OutputVector;;
writeln ('______Elementu Vektora______') ;
for і:=1 to n do
writeln('x[',i,']=',V[i]:5:3);
writeln;
end; .
. Головна програма
Program moduli;crt, global,MODUL22;:Tvect; :Tmatr;
і ,j,n: integer; : integer; : real; : integer; ,sum2: real; : real; : real;
с, b: integer; : real; ;('n=');read(n) ; (n,A); (n,A); :=1; j:= 2 to n do begin :=0;sum2:=0; :=a[1,adr];am:=1; і:= 1 to n do begin :=suml+a[i,adr]; :=sum2+a[і,j]; max<a[i,adr] then begin :=a[i,adr]; :=i ; ;end;suml>sum2 then adr:=j; ; і:= 1 to n do begin am mod 2=1x[i]:=a[n+l-i,adr] x[i]:=a[i,i]+a[i,n+l-i]; ; (n,x);
writeln ('-----Funkciy-----') ;
write ('c=') ;read(c) ; ('b=');read(b); :=x[1];min:=x[1]; c<b then begin і:= 1 to n do begin max<x[i] then max:=x[i]; min>x[i] then min:=x[i]; ;:=max+min end U:=x[l]*x[n];
writeln('U=',U:5:3);until keypressed; .
6. Результати роботи програми
при n=5 і при однаковому форматі виведення для всіх чотирьох видів даних a[i,j]:5:3;
Матриця - 5x5
а[11]= -8.893 а[12]= -5.929 а[13]= -3.953 а[14]= -2.635 а[15]= -1.757
а[21]= -9.880 а[22]= 6.587 а[23]= 4.391 а[24]= 2.927 а[25]= 1.952
а[31]= -3.240 а[32]= 2.160 а[33]= -1.440 а[34]= -0.960 а[35]= -0.640
а[41]= -2.520 а[42]= 1.680 а[43]= -1.120 а[44]= 0.747 а[45]= 0.498
а[51]= -201.960 а[52]= 134.640 а[53]= -89.760 а[54]= 59.840 а[55]= -39.893
Вектор
Адреса стовпця adr=lАдреса найбільшого елемента аm=4
х[1]=-10.650
х[2]=9.514
х[3]=-2.880
х[4]=2.427
х[5]=-241.853
Функція С=4 В=3=2S75.748
Результати ручних розрахунків співпадають з програмними, що свідчить про правильність роботи програми.
Тест матриця
Умова виконується
Матриця - 5x5
а[11]=7.000 а[12]=6.000 а[13]=4.000 а[14]=3.000 а[15]=-2.000
а[21]=1.000 а[22]=0.000 а[23]=-9.000 а[24']=7. 000 а[25]=8.000
а[31]=6.000 а[32]=-4.000 а[33]=-4.000 а[34]=3.000 а[35]=2.000
а[41]=1.000 а[42]=9.000 а[43]=-1.000 а[44]=2.000 а[45]=-4.000
а[51]=5.000 а[52]=8.000 а[53]=7.000 а[54]=6.000 а[55]=-5.000
Вектор
Адреса стовпця adr=3 Адреса найбільшого елемента am=5
х[1]=7.000
х[2]=-1.000
х[3]=-4.000
х[5]=4.000
Функція С=9 В=2=28.000
Умова не виконується
Матриця - 5x5
а[11]=1.000 а[12]=6.000 а[13]=4.000 а[14]=2.000 а[15]=3.000
а[21]=7.000 а[22]=9.000 а[23]=1.000 а[24]=4.000 а[25]=3.000
а[31]=2.000 а[32]=7.000 а[33]=-1.000 а[34]=7.000 а[35]=9.000
а[41]=2.000 а[42]=0.000 а[43]=6.000 а[44]=-8.000 а[45]=5.000
а[51]=2.000 а[52]=7.000 а[53]=1.000 а[54]=8.000 а[55]=7.000
Вектор
Адреса стовпця adr=3 Адреса найбільшого елемента аm=4
х[1]=4.000
х[2]=13.000
х[3]=-2.000
х[4]=-8.000
х[5]=9.000
Функція С=22 В=6=36.000
7. Використана література
- Ф.Б. Бартків, Я.Т. Гринчишин, A.M. Ломакович, Ю.С. Рамский. TURBO PASCAL: Алгоритми и програми. Київ, «Вища школа».
- Ю.С. Бородич, А.Н. Вальвачев, Ф.И. Кузьмич. Паскаль для персональных компьютеров. Минск,"Вышэйшая школа", БФ ГИТМП "НИКА", .
- А. И. Марченко, Л. М. Марченко. Программирование в среде TURBO Pascal 7.0. Киев "ВЕК+", Москва "ДЕСС".
- Д.Б. Поляков, И.Ю. Круглов. Программирование в среде Турбо Паскаль, Москва , МАИ, А/О "РОСВУЗНАУКА".