Здавалка
Главная | Обратная связь

Процедури і функції, що задаються користувачем.



Процедури і функції являють собою важливий інструмент мови Паскаль, що дозволяє писати структуровані програми. В структурованих програмах зазвичай легше відстежити основний алгоритм, їх легше зрозуміти навіть початківцям. Мови які використовують механізми процедур і функцій називаються процедурно-орієнтованими.

Процедура – це незалежна поіменована логічно завершена частина програми, призначена для виконання визначених дій. По своїй структурі вона є міні програмою. Одного разу описану процедуру можна визивати за ім’ям з різних наступних частин програми. Опис процедури має наступний вигляд:

 

Procedure < ім’я >( список формальних параметрів);

<розділ опису >

Begin

<тіло процедури >;

end;

 

У заголовку процедури вказується ім'я процедури та в круглих дужках описується список формальних параметрів, якщо він є. Якщо параметрів у процедури немає, тоді дужки використовувати не потрібно.

Список формальних параметрів – це опис змінних, через які власне здійснюється передача до процедури. Параметри в цьому списку поділяються на два типи – параметри-значення та параметри-змінні.

Параметри-значення – застосовуються для передачі даних в процедуру, і можуть використовуватись в ній в якості змінних, але навіть якщо ми змінимо їх значення в процедурі значення відповідних змінних в точці виклику не зміниться.

Параметри-змінні – призначені не тільки для передачі даних в процедуру, а й для повернення нових значень в точку виклику, і їх опис починається з ключового слова var.

Розділ опису – аналогічний розділу опису головної програми в ньому можна задавати імена констант, змінних і міток, які будуть використовуватись лише в цій процедурі.

Тіло процедури – послідовність операторів, які будуть виконуватись в цій процедурі.

Розглянемо приклад:

 

Procedure Cub(x : real, var y : real);

begin

y := x*x*x;

end;

 

Ця процедура знаходить куб дійсного числа X, і повертає це значення за допомогою параметра Y.

Виклик або запуск процедури здійснюється за допомогою оператора процедури, в якому міститься ім'я процедури і необхідні параметри. В нашому випадку він може виглядати так.

Cub(a, b);

тоді змінна a повинна містити значення яке ми хочемо привести до третього степеню, а в змінну b процедура поверне результат обчислень.

 

Функція– відрізняється від процедури тим, що один з результатів її роботи завжди повертається у вигляді значення, а отже функцій можуть використовуватись при обчисленні виразів. Опис процедури виглядає так:

 

Function < ім’я >( список формальних параметрів): <тип результату>;

<розділ опису >

Begin

<тіло процедури >;

end;

 

де тип результату – тип значення яке повертає функція.

Якщо повернутися до попереднього прикладу, то функцію для обчислення кубу можна задати так:

 

Function Cub2(x : real) : real;

Begin

Cub2 := x*x*x;

end;

 

тоді виклик функції можна здійснити наступним чином:

 

b := Cub2(a);

 

Приклад 5.

Приклад 5.

Скласти програму для обчислення суми членів ряду використовуючи функції:

з точністю до члена ряду, що по модулю менше E=0.00001.

1. Легко помітити, що для виконання завдання нам знадобляться функції приведення до степеню і обчислення факторіалу, наприклад :

 

FunctionFact(n:integer):real;{функція обчислення факторіалу}

{на вході функція отримує натуральне число, на виході - повертає значення факторіалу цього числа}

Var i: integer;{допоміжна змінна функції}

Begin

Fact := 1; {початкове значення функції}

for i:=1 to n do Fact := Fact * i; {так знаходимо n!}

end;

 

FunctionPow_n(x:real,n:integer):real;{функція обчислення степеню}

{на вході функція отримує дійсне число Х та натуральний показник N, на виході - повертає значення степеню}

Var i: integer;{допоміжна змінна функції}

Begin

Pow_n:= 1; {початкове значення функції}

for i:=1 to n do Pow_n:= Pow_n * x; {так знаходимо степінь}

end;

2. Далі запишемо формулу i-го члену ряду:

що, використавши вищенаведені функції, не важко записати на Паскалі як:

 

a := Pow_n(-1,i)*Pow_n(x,2*i+1)/Fact(n+1+i);

 

3. Тепер не важко записати програму повністю:

 

ProgramLaba_5;

Const

E=0.00001; {задаємо значення E за допомогою константи}

Var

i : integer; {ціла змінна для циклу}

n: integer; {змінна для значення n}

а: real; {дійсна змінна для членів ряду}

x:real; {дійсна змінна для значення X}

 

FunctionFact(n:integer):real;{функція обчислення факторіалу}

{на вході функція отримує натуральне число, на виході - повертає значення факторіалу цього числа}

Var i: integer;{допоміжна змінна функції}

Begin

Fact := 1; {початкове значення функції}

for i:=1 to n do Fact := Fact * i; {так знаходимо n!}

end;

 

FunctionPow_n(x:real,n:integer):real;{функція обчислення степеню}

{на вході функція отримує дійсне число Х та натуральний показник N, на виході - повертає значення степеню}

Var i: integer;{допоміжна змінна функції}

Begin

Pow_n:= 1; {початкове значення функції}

for i:=1 to n do Pow_n:= Pow_n * x; {так знаходимо степінь}

end;

 

Begin

Write(’Введіть значення X :’);

Readln(x);

Write(’Введіть значення N :’);

Readln(n);

i:=0; {початкове значення i}

s:=0; {початкове значення суми}

Repeat

a := Pow_n(-1,i)*Pow_n(x,2*i+1)/Fact(n+1+i);{обчислюємо

і-тий член ряду}

s := s+a; {сумма i – перших членів ряду}

i := i + 1; {збільшуємо i на 1}

untilabs(a)<E;

Writeln(’i=’, i-1); {виводимо значення i на 1 менше}

Writeln(’a=’, a:10:6);

Writeln(’s=’, s:10:5);

End.

 

Зауваження:

в цій програмі значення змінної i при виводі треба зменшувати на 1, бо оператор i := i + 1; стоїть після того як ми обчислили значення i-го члена ряду.

 

Результат роботи програми при значеннях X=5.0 і N=4 буде наступним:

 

Введіть значення X : 5.0

Введіть значення N : 4

i=59

a= -0,000006

s= -0,17260

Блок-схема програми:

5.3. Індивідуальні завдання.

Скласти алгоритм i програму розв’язання задач використовуючи функції

 

1. Обчислити суму членів ряду:

з точністю до члена ряду, що менше E=0.0001.

 

2. Обчислити суму членів ряду:

з точністю до 0,0001.

3. Обчислити суму членів ряду:

з точністю до члена ряду, що менше E=0.00001.

 

4. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4.

 

5. Обчислити суму членів ряду:

з точністю до члена ряду, що менше E.

 

6. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-6.

 

7. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-6.

 

8. Обчислити значення функції exp з точністю до п’ятого знаку, використовуючи розкладення в ряд Тейлора:

 

9. Обчислити значення функції cos з точністю до п’ятого знаку, використовуючи розкладення в ряд Тейлора:

10. Обчислити суму членів ряду:


з точністю до члена ряду, що менше E.

 

11. Обчислити з точністю до п’ятого знаку:

з точністю до члена ряду, що менше E.

 

12. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4.

13. Обчислити arctg використовуючи наступне розкладання в ряд:
для x>1

Обчислення провести з точністю до шостого знака.

 

14. Обчислити значення функції sinз точністю до п’ятого знаку, використовуючи розкладення в ряд Тейлора:

15. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4.

 

16. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4. Для визначеного поточного члена ряду використовувати рекурентну формулу: де n - номер члена ряду. Початкове значення y взяти рівним .

17. Обчислити суму членів ряду:

 

з точністю до члена ряду, що менше E.

18. Скласти програму обчислення відрізка ряду:
x = 0,56. Розрахунки припинити, якщо .

19. Скласти програму обчислення функцiї , використовуючи ітераційну формулу: .
Розрахунки припинити, якщо .

20. Обчислити з точністю E, використовуючи співвідношення: .

21. Знайти значення змінної для кожного із значень x, розташованих на інтервалі (-2; 2) з кроком 0,5, з точністю до 0,0001 .
Роздрукувати таблицю значень y і x.

22. Знайти значення змінної з точністю до 0,00001 для значень x, розташованих на інтервалі (0; 1) з кроком 0,25.
Роздрукувати таблиці значень y і x.

23. Обчислити значення змінної з точністю E для значень x, розташованих на інтервалі (-1; 2) з кроком 0,25. Роздрукувати таблицю значень p і x.

24. Знайти значення змінної з точністю до 0,00001 для значень x, розташованих на інтервалі (0; 1) з кроком 0,25; на інтервалі (0; 3) з кроком 0,5. Роздрукувати таблицю значень y і x.

25. Знайтиметодом Ньютона корінь рівняння -cos(2x)
з точністю до 10-4, взявши як перше приблизне значення кореня x=0. Наступні наближення знаходяться за формулою: ,
де f `(x) - похідна від функції f(x).

26. Обчислити з точністю до четвертого знака, використовуючи співвідношення: .

27. Скласти програму обчислення відрізка степеневого ряду.

x=0,56.
Розрахунки припинити, якщо .

28. Знайти значення змінної з точністю до 0,0001 для значень x, розташованих на інтервалі (0; 1.5) з кроком 0,25. Роздрукувати таблиці значень y і x.

29. Знайти значення змінної з точністю до 0,0001 для значень x, розташованих на інтервалі (0; 2) з кроком 0,4. Роздрукувати таблицю значень y і x.

30. Обчислити значення змінної з точністю до 0,0001, для значень x, розташованих на інтервалі (-1; 2) з кроком 0,25. Роздрукувати таблицю значень d і x.


 

6. Лабораторна робота №6.
Робота з масивами.

Поняття масивів.

Масивами в мові Паскаль, як і в багатьох інших мовах програмування, є впорядковані набори однотипних даних. Аналогами масивів в математиці – являються вектори та матриці.

Змінну-масив можна оголосити за допомогою ключового слова Arrayнаступним чином:

Var

< ім’я_змінної >: Array[<індекс1 >..< індекс2 >]

Of <тип елемента >;

де

< ім’я_змінної > - ім’я змінної-масиву;

<індекс1 >...< індекс2 > - верхня і нижня межі індексів елементів масиву;

<тип елемента > - тип даних елементів масиву;

або

Type

< ім’я_типу_масив > = Array[<індекс1 >..< індекс2 >]

Of <тип елемента >;

Var

< ім’я_змінної >:< ім’я_типу_масив>;

 

в цьому випадку за допомогою ключового слова Typeмасив оголошується як окремий тип даних, зі своєю унікальною назвою. А змінна-масив проголошується змінною цього типу.

 

Наприклад:

 

Type

Vect10= array[1..10]of real;

Var

v : Vect10;

a : array [0..8] of integer;

 

В цьому прикладі масив змінна v є масивом десяти дійсних елементів з номерами від 1 до 10, а змінна a- масив з 9 цілих елементів з індексами від 0 до 8.

Щоб звернутися до елементу масиву в програмі, треба після назви змінної-масиву в квадратних дужках вказати його порядковий номер (індекс).

a[0] := 1; {нульовому елементу присвоюється значення 1}

a[1] := 3; {першому елементу присвоюється значення 3}

a[2] := a[0]+a[1]; {значення 2-го елементу задається

як сума 2-х перших}







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.