Міністерствотранспорту та зв’язку України
Міністерствоосвіти і науки України
Державнийуніверситет інформаційно-комунікаційних технологійКАФЕДРАОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИКУРСОВАРОБОТА
Здисципліни «Інформатика».
Київ2010
ЗМІСТ
Завдання
Пояснювальний матеріал
Узагальнена блок-схема алгоритму
Базова програма реалізації алгоритму
Програма з використанням процедур
Модуль глобальних описів
Сервісний модуль обслуговування матриці
Головна програма
Результати роботи програми
Література
ЗАВДАННЯ НАКУРСОВУ РОБОТУ
Загальнезавдання на курсову роботу
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.
Індивідуальнезавдання
(Вар № Х)
1.Функція f(i,j)=(/3,7 – j/ -2)2i-j (i +j – 7,3) Sin (1,5+log2 (i/j)).
2. Компонентамивектора Х взяти елементи транспонованої матрици А, кожний з котрих не білш чим2. Обмеження: ім’я транспонованої матрици повинно співпадати з вихідної,тобто бути А.
3. U= />(xi + xn+1-i).
ПОЯСНЮВАЛЬНИЙ МАТЕРІАЛ
I. Відповідно до пункту №1завдання (формуванняматриці) на узагальненій блок-схемі алгоритму (довільна форма представленняблок-схеми-рис.1) передбачені блоки №2-№7.
/>/>Матриця вводиться по рядках,тому зовнішнім циклом визначений цикл №1 з параметром I= 1-m, а внутрішнім — цикл №2 з параметром J=1- n.
З огляду на ту обставину,що в мові Pascal відсутні убудовані функції: зведення в довільний ступінь іодержання логарифма при довільній підстави, вихідний вираз для формуванняелемента матриці (блок №5) для використання в програмі перетворено зурахуванням наступних властивостей:
1)(ABS(3.7-j)-2)*2i-j представлено як (ABS(3.7-j)-2)*exp((i-j)*ln(2)), що випливає з розгляду наступного положення. Тому як існуєубудована функція exp(x) — експонента, то ми маємо право записати для будьякого числа А таке співвідношення Ab=ex. Далі, узявшилогарифм по підставі e від правої і лівої частини цієї рівності, одержимо x =b*ln(A). Отже, Ab = exp( b*ln(A)).
2) Будь-яке числоA можна представити як /> чи />, відкіля випливає, що />. Прологарифмировав ліву іправу частини цього виразу по підставі e, одержимо loq(p) A*ln(p)=ln(A), відкіля loq(p)A = ln(A)/ ln(p).
II. Тому як в пункті №2завдання введене обмеження на процес одержання транспонованої матриці, теалгоритм його реалізації (блоки№13 — №19) отриманий, виходячи з наступнихміркувань, має вигляд:
Нехай є квадратнаматриця А[4х4] такого виду:
транспонована матриця функція pascal
/>
Тоді на першомукроці (заміна першого стовпця на перший рядок) реалізується досить просто, асаме, шляхом реалізації оператора присвоювання наступного виду a[i,j]:=a[j,i}при виконанні внутрішнього циклу (№6) по всіх стовпцях (j змінювалося від 1 до4) і одиничному значенні парамеира зовнішнього циклу (№5) по рядках (i=1).Черговий крок, як видно, повинний початися з заміни вже трьох стовпців на трирядки, починаючи з другого стовпця і другого рядка, (i=2, j=2). тобто з кліткиA22. І нарешті буде виконаний третій (останній) крок (i=3, j=3 ),починаючи з клітки A33. Звідси випливає, що початкове значенняпараметра внутрішнього циклу (№6 по стовпцях) повинне збільшуватися на одиницюз кожним новим зовнішнім циклом. Це досягається використанням змінної L (блок№15), якої привласнюється початкове значення 1 (у блоці №13) з наступнимзбільшенням на 1 ( у блоці №18) після завершення внутрішнього циклу №6, акількість виконань зовнішнього циклу повинне бути на одиницю менше числарядків, що відбито в блоці №14.
III. Тому як приформуванні вектора Х кількість елементів матриці менших 2 заздалегідь невідомо,те в змінній K (блок №29) організується лічильник, що формує поточний індекселемента вектора. При цьому враховане, що при завершенні формування векторапоказання лічильника перевищують на одиницю реальну розмірність. Це враховано прививоді вектора на відображення (блок№33) і при обчисленні функції (блок№37).
/>
БАЗОВА ПРОГРАМАРЕАЛІЗАЦІЇ АЛГОРИТМУ
Program Generalna;{Программа формирования квадратной матрицы по выражению для A[i,j], вектора Хпо транспонированной матрице и вычисления функции U}
usesCrt; {Используемый библиотечный модуль}
ConstLen=100;
Type
mtr=array [1..Len,1..Len] of real; {Пользовательский тип mtr}
mas=array [1..Len] of real; {Пользовательский тип mas}
vari,j, m,n:integer; {Рабочие переменные: параметры цикла и размерности}
k:byte;{Счетчик –формирователь индексов при получении массива Х}
L:byte;{Переменная для задания начального значения параметра цикла при транспонированииматрицы}
a:mtr;{Матрица А}
x:mas;{Массив Х}
c:real;{Рабочая переменная}
u:real;{Имя вычисляемой функции}
BEGIN
ClrScr;
writeln('Введите размерность матрицы A: числа M и N' );
write('m=');
read(m);
write('n=');
read(n);
writeln(' Введите элементы a[i,j] матрицы А ');
fori:=1 to m do{Внешний цикл по строкам}
for j:=1 to n do{Вложенный цикл по столбцам}
a[i,j]:=(ABS(3.7-j)-2)*exp (((i-j)*ln(2)))*(i+j-7.3)*SIN(1.5+(Ln(i/j)/ln(2)));
ClrScr;
write(' Выведите элементы a[i,j] матрицы А ');
writeln;
writeln;
{Выводматрицы А по строкам}
for i:=1 to m do{Внешний цикл по строкам}
begin
for j:=1 to n do{Вложенный цикл по столбцам}
write ('a[',i,',',j,']=', a[i,j]:10:7,' '); {Вывод элемента a[i,j]матрицы А}
writeln; {Оператор для перехода на очередную строку}
end;
{Транспонирование матрицы}
L:=1;{ Начальное значение переменной для задания начального значения параметра циклапо столбцам при транспонировании матрицы}
fori:=1 to m-1 do{Внешний цикл по строкам}
begin
for j:=l to n do{Вложенный цикл по столбцам}
begin
c:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=c;
end;
L:=L+1
end;
writeln( ' Транспонированная матрица');
writeln;
fori:=1 to m do
begin
for j:=1 to n do
write('a[',i,',',j,']=', a[i,j]:10:7,' ');{ Вывод элемента транспонированнойматрицы}
writeln;{ Оператор для переключения строки}
end;
{Формирование массива Х}
K:=1;{Начальное значение формирователя индексов элементов массива Х }
for i:=1 to m do
forj:=1 to n do
if a[i,j]
begin
x[k]:=a[i,j]; { Формирование элемента x[k] массива Х}
k:=k+1;
end;
{Вывод массива Х}
writeln(' Maссив X');
writeln;
for i:=1 to k-1 do
write('x[',i,']=', x[i]:10:7,' '); { Вывод элемента массива Х}
{Вычисление функции U}
U:=1; {Начальное значени переменной для накапливания произведений привычислении функции U}
for i:=1 to k-1 do
U:=U*(x[i]+x[k-i]); { Вычислеемое значение функции U на i-м шаге}
writeln;
writeln;
write (' Функция: u=',u:10:7); { Вывод значения функции U}
RepeatUntil KeyPressed
END.
ПРОГРАМАЗ ВИКОРИСТАННЯМ ПРОЦЕДУР
ProgramProverka_Proz;
usesCrt;
ConstLen=100;
Type
mtr=array [1..Len,1..Len] of real; {Tip massiv-matriza}
mas=array [1..Len] of real; {Tip massiv-vector}
vari,j,k,m,n,l:integer;
a:mtr;{ Imja peremennoi — matriza}
x:mas;{ Imja peremennoi — vektor}
u:real;{Imja peremennoi -funzija}
c:real;{ Rabochaja peremennaja}
ProcedureViv_M;
Begin
writeln;
writeln;
for i:=1 to m do {vnechnii zikl po strokam}
begin
for j:=1 to n do {vnutrenii zikl po stolbzam}
write('a[',i,',',j,']=', a[i,j]:10:7,' '); {vivod elementa matrizi a[i,j] }
writeln;{operaator dlja perehoda na ocherednuju stroku}
end;
writeln;
End;
BEGIN
ClrScr;
{vvod elementov matrizi po strokam}
writeln('vvedite razmernost matrizi A: chisla M i N');
write('m=');
read(m);
write('n=');
read(n);
{zapolnenie matrizi A -vvod elementov a[i,j]'}
fori:=1 to m do
for j:=1 to n do
a[i,j]:=(ABS(3.7-j)-2)*exp (((i-j)*ln(2)))*(i+j-7.3)*SIN(1.5+(Ln(i/j)/ln(2)));
ClrScr;
{vivodmatrizi A po strokam}
writeln ( ' ishodnaja Matriza');
Viv_M;{operator proceduru }
{ transponirovannaie Matrizi A }
L:=1; { nachalnoe znachenie parametra zikla po stolbzam pri transponirovaniiMatrizi A }
fori:=1 to m-1 do
begin
forj:=L to n do
begin
c:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=c;
end;
L:=L+1
end;
writeln( ' transponirovannaja Matriza');
{vivod transponirovannoi matrizi A po strokam }
Viv_M;{operator proceduru }
{formirovaniemassiva X iz transponirovannoi matrizi A }
k:=1;{nachalnoe znachenie formirovatelja indexov massiva X}
for i:=1 to m do
for j:=1 to n do
if a[i,j]
begin
x[k]:=a[i,j];{formirovanie elementa x[k] massiva X }
k:=k+1;
end;
{vivod massiva X}
writeln(' Massiv X');
writeln;
for i:=1 to k-1 do
write('x[',i,']=', x[i]:10:7,' ');{vivod elementa massiva X}
{vichislenie funkzii U}
U:=1; {nachalnoe znachenie funkzii U}
for i:=1 to k-1 do
U:=U*(x[i]+x[k-i]);
writeln;
writeln;
write ('Funkzija: u=',u:10:7);
RepeatUntil KeyPressed
END.
МОДУЛЬГЛОБАЛЬНИХ ОПИСІВ
UnitGlob; {Имя модуля}
Interface
Const
Len=100;
Type
T_Matr=array[1..Len,1..Len] of real; {Тип массива-матрицы}
T_Vect=array[1..Len] of real; {Тип массива-вектора}
End.
СЕРВІСНИЙМОДУЛЬ ОБСЛУГОВУВАННЯ МАТРИЦІ
UnitKR_Srv2;{ Имя сервисного модуля} Interface Uses Glob; { Имя модуля сглобальными описаниями} Procedure Ztvor_M(M,N:byte;Var ma:T_Matr); { Описаниепроцедуры создания матрицы} Procedure Print_M(Ma:T_Matr;M,N:byte); { Описаниепроцедуры печати}
Implementation
UsesCRT;
ProcedureZtvor_M(M,N:byte;Var ma:T_Matr); { Процедура создания матрицы}
Var
i,j:byte; { Рабочие переменные}
Begin
writeln (' Введите размерность матрицы A: числа M и N'); write('m=');
read (m);
write('n=');
read(n);
ClrScr;
For i:=1 to m do
For j:=1 to n do
ma[i,j]:=(ABS(3.7-j)-2)*exp (((i-j)*ln(2)))*(i+j-7.3)*SIN(1.5+(Ln(i/j)/ln(2)));
End;
ProcedurePrint_M(Ma:T_Matr;M,N:byte); { Процедура отображения матрицы}
var j,i:byte; Begin write (' Выведите элементы матрицы a[i,j]'); writeln; writeln; For i:=1 to m do
begin
For j:=1 to n do
write ('a[',i,’,’,j,']=',Ma[i,j]:10:7); { Отображение элементов матрицы}
writeln;
end;
End;
END.
ГОЛОВНАПРОГРАМА
ProgramMatr_KR2; uses Crt,Glob,KR_SRV2; { Список используемых модулей } vari,j,k,m,n,l:integer; { Рабочие переменные } a:T_Matr; {Имя элементов матрицы А}x:T_Vect; {Имя элементов массива Х }
u:real;{Имя вычисляемой функции }
c:real;{ Вспомогательная переменная для транспонирования матрицы }
begin
ClrScr;
writeln('Исходная матрица');
Ztvor_M(M,N,A);
Print_M(A,M,N);{ Оператор процедуры отображения матрицы }
{Транспонирование матрицы }
L:=1;{Начальное значение переменной для формирования начального значения параметравложенного цикла (работа по столбцам) при транспонировании матрицы А }
for i:=1 to m-1 do
begin
forj:=l to n do
c:=a[i,j];a[i,j]:=a[j,i]; a[j,i]:=c; { Получение элементов транспонированной матрицы }
L:=L+1
end;
writeln( ' Транспонированная матрица');
writeln;
Print_M(A,M,N);{ Оператор процедуры отображения матрицы }
{Формированиемассива X из транспонированной матрицы }
k:=1;{Начальное значение формирователя индексов элементов массива X}
for i:=1 to m do
for j:=1 to n do
if a[i,j]
begin
x[k]:=a[i,j];{Формирование элемента x[k]массива X }
k:=k+1;
end;
{Вывод массива X}
writeln(' Массив X');
writeln;
for i:=1 to k-1 do
write('x[',i,']=', x[i]:10:7,' '); {Вывод элемента массива X}
{ Вычисление функции U}
U:=1; {Начальное значение функции U}
for i:=1 to k-1 do
U:=U*(x[i]+x[k-i]); {Значение функции U}
writeln;
writeln;
write ('u=',u:10:7); {Отображение результирующего значения функции U}
RepeatUntil KeyPressed
END.РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИпри m=n=3 і при однаковом форматі виведення для всіхчотирьох видів даних a[i,j]:10:7;
Вихідна матриця
a[1,1]=-3.7007064a[1,2]=0.3092295 a[1,3]=-0.0910127
a[2,1]=-3.6028023a[2,2]=0.9875200 a[2,3]= 1.1849153
a[3,1]=-0.5229830a[3,2]= 1.2015703 a[3,3]= 1.6857605Транспонована матриця
a[1,1]=-3.7007064a[1,2]=-3.6028023 a[1,3]= -0.5229830
a[2,1]= 0.3092295a[2,2]= 0.9875200 a[2,3]= 1.2015703
a[3,1]=-0.0910127a[3,2]= 1.1849153 a[3,3]= 1.6857605
Масив Х
x[1]=-3.700706 x[2]=-3.6028023x[3]=-0.5229830 x[4]=0.3092295
x[5]=0.9875200x[6]=1.2015703 x[7]=-0.0910127 x[8]=1.1849153
x[9]=1.6857665
Значення функції:U=40.3382026
Результати ручнихрозрахунків співпадають з програмними, що свідчить про правильність роботипрограми.
ВИКОРИСТАНАЛІТЕРАТУРА
1. А. И. Марченко, Л. М. Марченко.Программирование в среде TURBO Pascal 7.0. Киев “ВЕК+””, Москва “ДЕСС”, 1999.
2. Ю.С. Бородич, А.Н. Вальвачев, Ф.И.Кузьмич. Паскаль для персональных компьютеров. Минск,”Вышэйшая школа”, БФ ГИТМП“НИКА”, 1991
3. Д.Б. Поляков, И.Ю. Круглов.Программирование в среде Турбо Паскаль, Москва, МАИ, А\О “РОСВУЗНАУКА”, 1992.
4. Ф.Б. Бартків, Я.Т. Гринчишин,А.М. Ломакович, Ю.С. Рамский. TURBO PASCAL: Алгоритми и програми. Київ, «Вищашкола», 1992.