Главная/Раздел  4

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подпрограммы.
Функции

Функции, это такие подпрограммы, результатом которых обязательно является некоторое значение. Описание функции во многом совпадает с описанием процедуры. Но если имя процедуры используется только для её вызова, то с именем функции, кроме того, связывается её результат.

Отличия в описании функций

В описании функции заголовок выглядит следующим образом:

Function Имя (Список формальных параметров): Тип результата;

Как и у процедуры заголовок функции обязателен. Например:

function Chr (X: Byte): Char;
function Odd (X: Longint): Boolean;
function GetX: Integer;
function KeyPressed: Boolean;

Функция предполагает обязательную передачу информации из подпрограммы в программу через имя функции. Поэтому раздел операторов обязательно должен содержать хотя бы один оператор, в котором имени функции присваивается значение результата. В противном случае функция не возвратит результат (вернее возвратит произвольный результат).

Для примера рассмотрим две программы вычисления суммы двух чисел, в которых задача решена в первом случае с помощью процедуры, а во втором - с помощью функции:

Пример 1
--------
PROGRAM Ex_27_1;
USES Crt;
VAR  x,y,rez: real;

  Procedure Summa (var s: real; a,b: real);
  Begin
     s:=a+b;
  End;

BEGIN
  ClrScr;
  Write ('Введите два числа: '); Readln (x,y);
   {Вычисление с помощью процедуры}
  Summa (rez,x,y); Writeln ('Сумма = ',rez);
  Repeat Until KeyPressed;
END.

Пример 2
--------
PROGRAM Ex_27_1;
USES Crt;
VAR  x,y,rez: real;

 Function Sum (a,b: real): real;
  Begin
     Sum:=a+b;
  End;

BEGIN
  ClrScr;
  Write ('Введите два числа: '); Readln (x,y);
  {Вычисление с помощью функции}
  rez:=Sum (x,y);  Writeln ('Сумма = ',rez);
   {Непосредственное использование функции в выражениях}
                   Writeln ('Сумма = ',sum (x,y));
  Repeat Until KeyPressed;
END.

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

  1. в различных выражениях;
  2. только справа от знака присваивания;
  3. как элемент вывода в операторе вывода информации.
По способу передачи данных имя функции можно характеризовать как параметр четвёртой категории. С его помощью производится передача информации только в одном направлении, - от подпрограммы к программе. Но собственно параметром (формальным или фактическим) функция не является. Скорее функция похожа на переменную, значение которой зависит только от параметров функции и доступно только для чтения при непосредственном обращении.

Процедура или функция?

Оформлять некоторую программу как функцию целесообразно только в том случае, если ожидается некоторый результат её работы. Если же последовательность команд ориентирована только на выполнение некоторой последовательности действий (вывод на экран, рисование и т.д.), лучше оформить её как процедуру.

Контрольные вопросы

  1. Назовите основные отличия в описании процедур и функций.
  2. Каким образом производится вызов функции в программе?
  3. Что лучше процедура или функция?

Задания для самостоятельного выполнения

  1. Определить значение выражения m(a,b,c)+m(b,c,d)+m(c,d,a) для вещественных a,b,c,d где m(x,y,z) - функция определения минимального из трёх чисел.
  2. Даны действительные x,y. Определить u = min(x,y), v = min(xy,x+y), z = min(u+v^2, 3.14).
  3. Даны действительные a, b, c. Получить
                         max(a,a+b) + max(a,b+c)
         Получить   -----------------------
                             1 + max(a+bc,1.15) 
  4. Даны действительные числа s,t. Получить g(1.2,-s) + g(t,s) - g(2s-1,st)
                                   a^2 + b^2
           где    g(a,b) = --------------------.
                              a^2 + 3ab + 3b^2 + 4 
  5. Даны действительные s,t. Получить f(t,-2s,1.7) + f(2.2,t,s-t),
                                 2a - b - sin(c)
         где   f(a,b,c) = ---------------.
                                     5 + ¦c¦ 
  6. Даны действительные a,b,c.
                                  g(a,b)                       cos(x+y)   cos(x-y)
       Получить g(a,c) *  ------,     где g(x,y) = -------- * --------
                                  g(b,c)                        sin(x+y)   sin(x-y)
  7. Даны целочисленный массив мas из 10 элементов. Определить
         t(mas) + 98
         ------------- * t(mas),
         t(mas) - 98
    где t(mas) - среднее арифметическое элементов массива.
  8. Даны строки символов a, b. Определить max(f(a),5)*max(f(b),10), где f(s) - количество пробелов в строке.
  9. Напишите функцию преобразования градусной меры в радианную.
  10. Напишите функцию преобразования времени выраженного в сутках, часах, минутах и секундах просто в секунды.

НАЗАД                    ДАЛЕЕ

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz