Процедури і функції, що задаються користувачем.
Процедури і функції являють собою важливий інструмент мови Паскаль, що дозволяє писати структуровані програми. В структурованих програмах зазвичай легше відстежити основний алгоритм, їх легше зрозуміти навіть початківцям. Мови які використовують механізми процедур і функцій називаються процедурно-орієнтованими. Процедура – це незалежна поіменована логічно завершена частина програми, призначена для виконання визначених дій. По своїй структурі вона є міні програмою. Одного разу описану процедуру можна визивати за ім’ям з різних наступних частин програми. Опис процедури має наступний вигляд:
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. Обчислити суму членів ряду:
2. Обчислити суму членів ряду: 3. Обчислити суму членів ряду:
4. Обчислити суму членів ряду:
5. Обчислити суму членів ряду:
6. Обчислити суму членів ряду:
7. Обчислити суму членів ряду:
8. Обчислити значення функції exp з точністю до п’ятого знаку, використовуючи розкладення в ряд Тейлора:
9. Обчислити значення функції cos з точністю до п’ятого знаку, використовуючи розкладення в ряд Тейлора:
10. Обчислити суму членів ряду:
11. Обчислити з точністю до п’ятого знаку: з точністю до члена ряду, що менше E.
12. Обчислити суму членів ряду: 13. Обчислити arctg використовуючи наступне розкладання в ряд: Обчислення провести з точністю до шостого знака.
14. Обчислити значення функції sinз точністю до п’ятого знаку, використовуючи розкладення в ряд Тейлора: 15. Обчислити суму членів ряду:
16. Обчислити суму членів ряду: 17. Обчислити суму членів ряду:
з точністю до члена ряду, що менше E. 18. Скласти програму обчислення відрізка ряду: 19. Скласти програму обчислення функцiї 20. Обчислити 21. Знайти значення змінної 22. Знайти значення змінної 23. Обчислити значення змінної 24. Знайти значення змінної 25. Знайтиметодом Ньютона корінь рівняння 26. Обчислити 27. Скласти програму обчислення відрізка степеневого ряду. x=0,56. 28. Знайти значення змінної 29. Знайти значення змінної 30. Обчислити значення змінної
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 Все права принадлежат авторам размещенных материалов.
|