Міністерство транспорту та зв'язку України
Міністерство освіти і науки України
Державний університет інформаційно - комунікаційних
технологій
Курсова робота
з дисципліни «Інформатика».
КАФЕДРА
ОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИ
Студента I курсу, групи ІМД-11
Спеціальність: ІТ
Славов Олександр Вячеславович
Залікови книжка № 10ІМ16
Перевірив: доцент Качанов П.Т.
Консультант: доцент Качанов П.Т.,Шевченко Д.
Оцінка:
Дата:
Київ 2011
ЗАВДАННЯ НА КУРСОВУ РОБОТУ
Загальне завдання на курсову роботу
1.По функції f(i,j), що задана, необхідно сформувати квадратну матрицу A = {aij}, i,j = 1,2, …,…, m, де aij = f(i,j). (Для демонстрації m =5. )
2.Після чого із цієї матриці відповідно до заданого алгоритму необхідно отримати компоненти вектора X = {xi}, i = 1,2, … , n.
3. Після отримання компонентів вектора X обчисліти значення функції U.
Індивідуальне завдання
(Вар № 16);
1.Функція f(i,j)= i-3 ( 2 - |j-3|3 )(i+j)5 lg(|j-i|)-(|5,3 - e2j| )(-2)j
2.Компоненти вектора X - скалярний добуток головної діагоналі матриці на зворотній i- й рядок, якщо сума елементів головної діагоналі перевищує її максимальний елемент, інакше за вектор X взяти головну діагональ.
3.
Пояснювальний матеріал.
I. Відповідно до пункту №1завдання (формування матриці)
1)Матриця вводиться по рядках, тому зовнішнім циклом з параметром I= 1-n , а внутрішнім - цикл з параметром J=1- m. Згідно нашій функції, яку ми вводимо,є певні обставини. Це ті ,що синтаксис видасть помилку 207 якщо буде :а)Від’ємний логарифм.б) Від’ємний корінь та т.д. У нашому випадку можливо Від’ємний логарифм lg(|j-i|). Тому ми його перевіряемо у циклі.
2)спочатку ми знаходимо сумму елементів гол.діагонали.головна діагональ записуеться у вигляді a[i,i]. Потім треба знайти максимальний елемент гол діагоналі. Ми вважаемо що макс. елемент знаходиться на першій позиції,потім умовою max<a[i,i] ми перевіряемо цю умову ,якщо ця умова виконується,то max:=a[i,i] ,з цього виходе,що но в MAX дійсно знаходится максимальний елемент. Потім перевіряемо нашу умову: «якщо сума елементів головної діагоналі перевищує її максимальний елемент». Вона буде мати вигляд summa>max. Далі якщо умова дійсна виконуються наступні дії: Беремо гол діагональ a[i,i] та множимо ії на зворотній i-тий рядок. i-тий рядок буде мати вігляд a[n-i+1,j] ,оскільки n ми перебираемо стовпці, отже n=4 це останій елемент останього стовпчика, i змінюеться у нас від 1 до n тобто до 4. Отже математично ми підставимо та отримаемо останій i-тий рядок. Множимо головну діагональ на i-тий рядок a[i,i]*a[n-i+1,j] . А якщо наша умова не виконуеться ,тоді ми беремо гол.діагональ. тобто наше головне завданнє буде мати вигляд:
Summa>max
Then x[i]:=a[i,i]*a[n-i+1,j]
Else x[i]:=a[i,i];
Отже якщо на головній діагоналі будуть усі додатні елементи,тоді вочевидь,що сумма буде завжди БіЛЬШОЮ від максимального елемента,а якщо знайдеться хоча б один від’ємний елемент ,тоді сумма не буде більшою, в залежності від від’ємних елементів головної діагонали.
A11
A12
A13
A14
A21
A22
A23
A24
A31
A32
A33
A34
A41
A42
A43
A44
Опис масивів: x:real (массив). a:real (матрица,двухмерный массив).
Опис змінних: i,j: integer; (индексы) . n,m: integer; (кол-ство строк,столбцов). b,c: integer; (номер в списке,номер по зачетке. Ч0исла для подсчета функции от вектора x[i]). u:real; (значения функции) . max,summa:real; (переменные которые служат для проверки условия на «да» или «нет»).
БАЗОВА ПРОГРАМА РЕАЛІЗАЦІЇ АЛГОРИТМУ
program zadacha; {формирования квадратной матрицы по выражению для A[i,j], вектора Х по условию задачи в матрице и вычисления функции U}
uses crt; {Используемый библиотечный модуль}
const len=20;c=16;b=6; {Задаем постоянные числа}
type mtx=array[1..len,1..len] of real; {Пользовательский тип mtx}
mas=array[1..len] of real; {Пользовательский тип mas}
var
a: mtx; {Матрица А}
x: mas; {Массив Х}
i,j,n,k,m: integer; {Рабочие переменные : параметры цикла и размерности}
summa,max:real; {Рабочии переменныи}
esp,p1,p2,p3,p4,p5,p6,p7,p8,dob: real; {переменные для подсчета функції и формирования квадратной матрици }
u:real; {Имя вычисляемой функции}
BEGIN
ClrScr;
Writeln('Vvedite razmernost [m*n]:');
Write('m=');
readln(m);
Write('n=');
readln(n);
ClrScr;
for i:=1 to m do {Внешний цикл по строкам}
begin
for j:=1 to n do {Вложенный цикл по столбцам}
begin
p1:=abs(j-3);
p2:=2-p1*p1*p1;
p4:=abs(j-i);
esp:=2.718;
p5:=exp(2*j*ln(esp));
p6:=5.3-p5;
p7:=abs(p6);
dob:=1;
for k:=1 to j do
dob:=dob*(-2);
p8:=dob;
if p4=0 then
a[i,j]:=-p7*p8
else
p3:=0.43*ln(p4);
a[i,j]:=exp(-3*ln(i))*p2*exp(5*ln(i+j))*p3-p7*p8; {формирования матрици по заданной функции}
end
end;
{Формирует вектор Х,согласно данному заданию}
summa:=0;
for i:=1 to n do {Внешний цикл по строкам}
summa:=a[i,i]+summa; {Внешний цикл по столбцам}
max:=a[1,1]; {принимает максимум за первый елемент ряда и строки }
for i:=1 to n do
if a[i,i]>max then {проверяя условия максимум на первой позиции }
max:=a[i,i];
for i:=1 to n do {Внешний цикл по строкам}
begin
if summa>max {проверяем условия сумма главной диагонали превышает максималый елемент гл.диагонали}
then x[i]:=a[i,i]*a[j,n-i+1] {Условия выполняется «ДА»}
else x[i]:=a[i,i]; {Условие не исполняется «НЕТ»}
end;
{ Вычисление функции U}
if c<b then begin {присваиваем функции первый елемент,что б было с чем сравнивать}
u:=abs(x[1]);
for i:=2 to n do {Внешний цикл по строкам}
if abs(x[i])<u then u:=abs(x[i]) {Проверка условия}
end else begin
u:=x[i]+1;
for i:=2 to n do
begin
if x[i]+1>u {Проверка условия}
then u:=x[i]+1;
end;
end;
{Вывод матрицы А по строкам}
Writeln('Isxodnaya matrica:');
for i:=1 to m do {Внешний цикл по строкам}
begin
for j:=1 to n do {Вложенный цикл по столбцам}
begin
if j=n then
Writeln('a[',i,',',j,']=',a[i,j]:4:3) {Вывод элемента a[i,j]матрицы А}
else
Write('a[',i,',',j,']=',a[i,j]:4:3,' ');
end;
end;
writeln; {Оператор для перехода на очередную строку}
writeln ('vector X:');
{Вывод массива Х или вектрa}
for i:=1 to n do
writeln ('x[',i,']=',x[i]:5:2,' ');
writeln; {Оператор для перехода на очередную строку}
{Вывод значения функции U}
writeln ('FUNCTION:');
writeln ('U= ',u:5:2);
repeat until keypressed
END.
ПРОГРАМА З ВИКОРИСТАННЯМ ПРОЦЕДУР
program zada4a; {формирования квадратной матрицы по выражению для A[i,j], вектора Х по условию задачи в матрице и вычисления функции U}
uses crt; {Используемый библиотечный модуль}
const len=20;c=16;b=6; {Задаем постоянные числа}
type mtx=array[1..len,1..len] of real; {Пользовательский тип mtx}
mas=array[1..len] of real; {Пользовательский тип mas}
var
a: mtx; ; {Матрица А}
x: mas; {Массив Х}
n,m: integer; {Рабочие переменные размерности}
u: real; {Имя вычисляемой функции}
procedure vvod (nsize,msize:integer; var mat:mtx); {Оператор процедуры,описание параметров, формирования квадратной матрицы по функции}
var i,j,k:integer; esp,p1,p2,p3,p4,p5,p6,p7,p8,dob:real;
begin
for i:=1 to nsize do {Внешний цикл по строкам}
begin
for j:=1 to msize do {Внешний цикл по столбцам}
begin
p1:=abs(j-3);
p2:=2-p1*p1*p1;
p4:=abs(j-i);
esp:=2.718;
p5:=exp(2*j*ln(esp));
p6:=5.3-p5;
p7:=abs(p6);
dob:=1;
for k:=1 to j do
dob:=dob*(-2);
p8:=dob;
if p4=0 then
a[i,j]:=-p7*p8
else
p3:=0.43*ln(p4);
mat[i,j]:=exp(-3*ln(i))*p2*exp(5*ln(i+j))*p3-p7*p8;{формирования матрици по заданной функции}
end
end
end;
procedure form_vectora(mat:mtx; nsize:integer; var vect:mas); {Оператор процедуры,описание параметров, формирование вектра X}
var summa,max:real;
i,j:integer;
begin
summa:=0; {принимает сумму гл.диагонали за 0 }
max:=mat[1,1]; {принимает максимум за первый елемент ряда и строки }
for i:=1 to nsize do begin {Внешний цикл по строкам}
summa:=mat[i,i]+summa;
if mat[i,i]>max then {проверяя условия максимум на первой позиции }
max:=mat[i,i];
end;
for i:=1 to nsize do {Внешний цикл по строкам}
if summa<max {проверяем условия сумма главной диагонали превышает максималый елемент гл.диагонали}
then vect[i]:=mat[i,i]*mat[nsize,nsize-i+1] {Условия выполняется «ДА»}
else vect[i]:=mat[i,i]; {Условие не исполняется «НЕТ»}
end;
function func(vect:mas; nsize:integer; bFunc,cFunc:real):real; {Оператор процедуры,описание параметров, Вычисления функции}
var u:real; i:integer;
begin
if cFunc<bFunc then begin {присваиваем функции первый елемент,что б было с чем сравнивать}
u:=abs(vect[1]);
for i:=2 to nsize do {Внешний цикл по строкам}
if abs(vect[i])<u then u:=abs(vect[i]); {Проверка условия}
end else begin
u:=vect[1]+1;
for i:=2 to nsize do
if vect[i]+1>u then u:=vect[i]+1; {Проверка условия}
end;
func:=u;
end;
{Вывод матрицы А по строкам}
procedure vivod(mat:mtx; nsize,msize:integer); {Оператор процедуры,описание параметров}
var i,j:integer;
begin
Writeln('Isxodnaya matrica:'); {vivod matrix}
for i:=1 to nsize do {Внешний цикл по строкам}
begin
for j:=1 to msize do {Внешний цикл по столбцам}
begin
if j=nsize then
Writeln('a[',i,',',j,']=',mat[i,j]:4:3) {Вывод элемента a[i,j]матрицы А}
else
Write('a[',i,',',j,']=',mat[i,j]:4:3,' ');
end;
end;
writeln; {Оператор для перехода на очередную строку}
end;
{Вывод массива Х или вектрa}
procedure vivod_vector(vect:mas; nsize:integer); {Оператор процедуры,описание параметров}
var i:integer;
begin
for i:=1 to nsize do
write ('x[',i,']=',vect[i]:5:2,' ');
writeln; {Оператор для перехода на очередную строку}
end;
BEGIN
ClrScr;
Writeln('Vvedite razmernost matrix [m*n]:');
Write('n=');
readln(n);
Write('m=');
readln(m);
ClrScr;
vvod(n,m,a);
form_vectora(a,n,x);
vivod(a,n,m);
writeln ('vektor X:');
vivod_vector(x,n);
writeln; {Оператор для перехода на очередную строку}
{Вывод значения функции U}
writeln ('FUNCTION:');
u:=func(x,n,b,c);
writeln ('U= ',u:5:2);
readkey;
END.
СЕРВІСНИЙ МОДУЛЬ ОБСЛУГОВУВАННЯ МАТРИЦІ
unit module; ;{ Имя сервисного модуля}
interface
const len=20;c=16;b=6;
type mtr=array[1..len,1..len] of real;
mas=array[1..len] of real;
procedure vvod (nsize,msize:integer; var mat:mtr); ); { Описание процедуры создания матрицы}
procedure form_vectora(mat:mtr; nsize:integer; var vect:mas); {Формирование вектора Х}
function func(vect:mas; nsize:integer; bFunc,cFunc:real):real; {Вычисления функции U}
procedure vivod(mat:mtr; nsize,msize:integer); {Вывод матрици А}
procedure vivod_vector(vect:mas; nsize:integer); {Вывод вектора Х}
implementation
procedure vvod (nsize,msize:integer; var mat:mtr);
var i,j,k:integer; esp,p1,p2,p3,p4,p5,p6,p7,p8,dob:real;
begin
for i:=1 to nsize do
begin
for j:=1 to msize do
begin
p1:=abs(j-3);
p2:=2-p1*p1*p1;
p4:=abs(j-i);
esp:=2.718;
p5:=exp(2*j*ln(esp));
p6:=5.3-p5;
p7:=abs(p6);
dob:=1;
for k:=1 to j do
dob:=dob*(-2);
p8:=dob;
if p4=0 then
mat[i,j]:=-p7*p8
else
p3:=0.43*ln(p4);
mat[i,j]:=exp(-3*ln(i))*p2*exp(5*ln(i+j))*p3-p7*p8;
end
end
end;
procedure form_vectora(mat:mtr; nsize:integer; var vect:mas);
var summa,max:real; i,j:integer;
begin
summa:=0;
max:=mat[1,1];
for i:=1 to nsize do begin
summa:=mat[i,i]+summa;
if mat[i,i]>max then
max:=mat[i,i];
end;
for i:=1 to nsize do
if summa>max {glavnoe yslovie}
then vect[i]:=mat[i,i]*mat[nsize,nsize-i+1]
else vect[i]:=mat[i,i];
end;
function func(vect:mas; nsize:integer; bFunc,cFunc:real):real;
var u:real; i:integer;
begin
if cFunc<bFunc then begin
u:=abs(vect[1]);
for i:=2 to nsize do
if abs(vect[i])<u then u:=abs(vect[i]);
end else begin
u:=vect[1]+1;
for i:=2 to nsize do
if vect[i]+1>u then u:=vect[i]+1;
end;
func:=u;
end;
procedure vivod(mat:mtr; nsize,msize:integer);
var i,j:integer;
begin
Writeln('Isxodnaya matrica:'); {vivod matrix}
for i:=1 to nsize do
begin
for j:=1 to msize do
begin
if j=nsize then
Writeln('a[',i,',',j,']=',mat[i,j]:4:3)
else
Write('a[',i,',',j,']=',mat[i,j]:4:3,' ');
end;
end;
writeln;
end;
procedure vivod_vector(vect:mas; nsize:integer);
var i:integer;
begin
for i:=1 to nsize do
write ('x[',i,']=',vect[i]:5:2,' ');
writeln; {Оператор для перехода на очередную строку}
end;
END.
ГОЛОВНА ПРОГРАМА
program zada4a; {формирования квадратной матрицы по выражению для A[i,j], вектора Х по условию задачи в матрице и вычисления функции U}
uses crt,module; { Список используемых модулей }
var
a: mtr; ; {Имя элементов матрицы А}
x: mas; {Имя элементов массива Х }
n,m: integer; { Рабочие переменные размерности }
u: real; ; {Имя вычисляемой функции }
BEGIN
ClrScr;
Writeln('Vvedite razmernost matrix [m*n]:');
Write('n=');
readln(n);
Write('m=');
readln(m);
ClrScr;
vvod(n,m,a); ); { Описание процедуры формировка матрици по функции}
form_vectora(a,n,x); {Формирование вектора Х из матрици}
vivod(a,n,m); {Вывод матрици А}
writeln ('vektor X:');
vivod_vector(x,n); {Вывод вектора Х}
writeln; {Оператор для перехода на очередную строку}
writeln ('FUNCTION:');
u:=func(x,n,b,c); {Вычисления функции U}
writeln ('U= ',u:5:2);
Repeat until keypressed
END.
РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ
при m=n=3 і при однаковом форматі виведення для всіх чотирьох видів даних
a[i,j]:4:2;
Вихідна матриця
a[1,1]= 4.175 a[1,2]= -197.102 a[1,3]= 3793.436
a[2,1]= 4.175 a[2,2]= -197.102 a[2,3]= 3183.023
a[3,1]= -63.649 a[3,2]= -197.102 a[3,3]= 3183.023
Масив Х
x[1]=4.18 x[2]=-197.10 x[3]=3183.02
Значення функції: U=3184.02317
Результати ручних розрахунків співпадають з прогамними, що свідчить про правільність роботи програми.