Реферат: Приклад обчислення функції на Паскалі

Міністерствотранспорту та зв’язку України

Міністерствоосвіти і науки України

Державнийуніверситет інформаційно-комунікаційних технологій

КАФЕДРАОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИКУРСОВАРОБОТА

Здисципліни «Інформатика».

Київ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<sup/>+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]<2 then

 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]<2 then

   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]<2 then

  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.

еще рефераты
Еще работы по информатике, программированию