Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
іНФОРМАТИКА 1.doc
Скачиваний:
15
Добавлен:
15.08.2019
Размер:
13.85 Mб
Скачать
  1. Підпрограми функції (function).

Окрім підпрограм – процедур у мові Pascal використоуються підпрограми – функції.

Функціяце підпрограма, що визначає одне - єдине скалярне або посилальне значення, що використовується при обчисленні виразу.

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

Function < назва > : < тип функції > ;

Або

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

Загальний опис функції:

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

<розділи описів і оголошень функції>;

begin

<розділ команд функції, де має бути така команда:

назва: =вираз>

end;

У розділі команд функції має бути команда присвоєння значення деякого виразу назві функції. Результат функції повертається в основну програму через її назву (як і у випадку використання станда­ртних функцій, таких як sin, cos).

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

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

Звернення до функції:

<назва> (<список фактичних параметрів>).

Н а п р и к л а д: Скласти програму для обчислення визначеного iнтегралу

Обчислити довжини сторін трикутника, заданого координатами вершин. Основною дією в цій задачі є обчислення відстані між двома точками на площині. Відстань d між двома точками з координатами (а1; b1), (a2; a2) визначається за формулою

program ex_; {обчислення довжин сторін трикутника} var x1, y1, x2, y2, x3, y3:real; {координати вершин трикутника} d1, d2, d3:real; {довжини сторін трикутника}

{===== обчислення відстані між двома точками ====}

function Distance(a1, b1, a2, b2:real):real;

begin

Distance:=sqrt(sqr(a1-a2)+sqr(b1-b2));

end;

{===== введення координат вершин трикутника ——}

procedure Init;

begin

writeln('enter triangle apexes coordinates');

write('coordinates x1, y1 '); readln (x1,y1);

write('coordinates x2, y2 '); readln (x2,y2);

write('coordinates х3, у3 '); readln (х3,у3);

end;

{======== обчислення довжин сторін трикутника=====}

procedure Solution;

begin

d1:=Distance(x1, y1, x2, y2);

d2:=Distance(x2, y2, x3, y3);

d3:= Distance(x1, y1, x3, y3);

end;

{===== виведення даних ======================}

procedure Browse;

begin

writeln('lengthl=', d1:6:2);

writeln('length2=', d2:6:2);

writeln(‘length3=', d3:6:2);

end;

{=========== основна програма ================}

begin

Init;

Solution;

Browse;

end.

Приклад. Функція IntPow підносить дійсне число x до цілого степеня N. (Y = x N )

Function IntPow(x: Real; N: Integer) : Real;

Var i: Integer;

Begin

IntPow := 1;

For i:=1 to Abs(N) do IntPow := IntPow * x;

If N < 0 then IntPow := 1/IntPow

End;

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

Program GCD_of_Array;

Const n = 100 ;

Var i, D : Integer;

A : Array[1..n] of Integer;

Function GCD (x, y : Integer) : Integer ;

Begin

While x <> y do

If x < y

then y := y - x

else x := x - y;

GCD := x

End;

Begin { основна програма }

{Процедура читання масиву натуральних чисел}

D := GCD (A[1], A[2]);

For i := 3 to n do D := GCD(D, A[i]);

writeln ( ‘ НCД послідовності = ‘ , D )

End.

Приклад. Створимо функцію для обчислення tg(x) та обчислимо значення виразу tg(x)+ctg(x)+tg2(x).

program Myfunc;

uses Crt;

var x,y:real;

function tg(x:real):real;

begin

tg:=sin(x)/cos(x)

end;

begin clrscr;

writeln('Введіть х');

readln(x);

y:=tg(x)+1/tg(x)+sqr(tg(x));

writeln('y=', y:5:2); readln

end.

Завдання: "Знайти максимальне з трьох введених чисел". Для вирішення скористаємося описом функції, що приймає значення максимального з двох чисел, які передаються в неї у вигляді параметрів.

Program Fn; Var A,B,C :Real; Function Max(A,B:Real):Real; { Описуємо функцію Max з формальними } Begin { параметрами A і B, яка приймає }

If A>B Then Max:=A { значення максимального з них } Else Max:=B { Тут A і B - локальні змінні }

End;

Begin

Writeln('Введіть три числа'); Readln(A,B,C); Writeln('Максимальним зі всіх є ', Max(Max(A,B),C))

End.

Оператори виходу

Для завершення роботи програм, процедур і функцій без переходу на мітку закриваючого end в Turbo Pascal запроваджені процедури Exit і Halt. Виклик Exit завершує роботу свого програмного блоку і передає управління викликаючій програмі. Якщо Exit виконується в підпрограмі, то виконання цієї підпрограми припиниться, і далі буде виконуватися оператор, слідуючий за оператором виклику цієї підпрограми. Якщо Exit виконується в основній програмі, вихід з неї буде еквiвалентним її нормальному завершенню.

Виклик процедури Halt, де би вона не знаходилась, завершує роботу програми і передає управління операційній системі. Процедура Halt має структуру Halt(n), де n - код повернення, що може бути проаналізований операційною системою за допомогою команди If Errorlevel. Значення n=0 відповідає нормальному завершенню роботи програми. Виклик процедури Halt без параметра еквiвалентний виклику Нalt(0).

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

Program time;

Uses crt;

Var

Ch:integer;

Procedure menu;

begin

Writeln(‘1.Перетворити год, хв і сек в секунди’);

Writeln(‘2.Перетворити секунди в год, хв і сек ’);

Writeln(‘3.Завершити роботу’);

Writeln;

Writeln(‘Введіть номер 1-3’);

End;

Procedure time_to_sec;

Var

T_sec:longint;

God,min,sec:longint;

Begin

Clrscr;

Writeln(‘введіть години’); Readln(god);

Writeln;

Writeln(‘введіть хвилини’); Readln(min);

Writeln;

Writeln(‘введіть секунди’); Readln(sec);

Writeln;

T_sec:=god*3600+min*60+sec;

Writeln;

Writeln(god,‘год.’,min,’хв.’,sec,’сек. це’,t_sec,’сек.’);

Writeln;

Writeln(‘для продовження роботи нажміть <Enter>’); Readln;

End;

Procedure sec_to_time;

Var

T_sec:longint;

God,min,sec:longint;

T:longint;

Begin

Clrscr;

Writeln(‘введіть сумарну кількість секунд’); Readln(t_sec);

Writeln;

T:=t_sec div 60;

Sec:=t_sec mod 60;

God:=t div 60;

Min:=t mod 60;

Writeln;

Writeln(t_sec,’секунд- це’);

Writeln;

Writeln(god,‘год.’,min,’хв.’,sec,’сек.’);

Writeln;

Writeln(‘для продовження роботи нажміть <Enter>’);

Readln;

End;

Begin

Ch:=0;

While ch<>3 do

Begin

Clrscr;

Menu;

Readln(ch);

Case ch of

1:time_to_sec;

2:sec_to_time;

end;

end;

end.

Контрольні запитання:

  1. Які відмінності між процедурами та функціями?

  2. Що таке підпрограма?

  3. Що таке рекурсія?

  4. Що Ви розумієте під прямою і непрямою рекурсією?

Домашні самостійні завдання:

  1. Скласти блок-схему та написати програму на мові Pascal з використанням процедур та функцій:

  2. Розташувати в порядку зменшення три цілі числа.

  3. Знайти максимальне з трьох введених чисел.