пользователей: 21212
предметов: 10450
вопросов: 177346
Конспект-online
зарегистрируйся или войди через vk.com чтобы оставить конспект.
РЕГИСТРАЦИЯ ЭКСКУРСИЯ


Функции

Функции

Как мы уже отмечали, в том случае, когда результатом работы процедуры является одно скалярное значение, эту процедуру можно оформить в виде функции.
Описание функции имеет вид:
Function <имя> (<список формальных параметров>): <тип результата>
<раздел описаний>
begin
<тело функции>
end;
Обращение к функции (ее вызов) имеет вид:
<имя функции> (<список фактических параметров>)
Результат работы функции присваивается ее имени, поэтому в теле
функции обязательно должен быть оператор присваивания вида:
<имя функции>:=<значение результата>.
После того, как функция описана, её можно использовать в качестве
операнда по имени в правой части оператора присваивания при вычислении значений каких-то выражений. То есть использование функций,
определенных пользователем, аналогично использованию встроенных
70
стандартных функций (sin(x), cos(x) и т.д.). Поэтому при решении задач
из какой-либо конкретной области пользователь обычно составляет свою
библиотеку функций, оформляет эти функции в виде отдельного файла и
подключает этот файл к основной программе. Подключаемый файл может быть либо текстовым файлом, либо специально оттранслированным
файлом-модулем.
Пример: Составить программу вычисления значения выражения

мер: Составить программу вычисления значения выражения3wZIWxdgWHw.jpg

Здесь трижды надо вычислить факториал, поэтому оформим вычисление факториала произвольного числа в виде функции. Функция для
вычисления факториала будет иметь один формальный параметр, обозначим его буквой k.
Для вычисления k! необходимо организовать цикл с параметром i,
который будет изменяться от 1 до k, а в теле цикла накапливать произведение P:=P*i. Начальное присваивание: P=1. Переменные P и i будут
локальными переменными и описываются в разделе описаний функции:
Текст программы:
Program primer_func;
Var m,n:integer; C:real; {глобальные переменные}
Function fact (k:integer):longint;
Var i:integer; P:longint; {локальные переменные}
Begin {тело функции}
P:=1;
For i:=1 to k do
P:=P*i;
Fact:=P
End;
Begin {основная программа}
Write (‘m,n=’);
Readln (m,n);
C:=fact (m) * fact(n) /fact(m-n);
Writeln (c)
End.
Вложенность процедур и функций. Побочные эффекты.
Как мы уже отмечали, допускается любой уровень вложенности
процедур и функций, но иногда при использовании вложенных процедур
и функций возникают побочные эффекты, выражающиеся в том, что
вносятся нежелательные изменения (искажения) данных в программе. В
основном это искажение подпрограммой значений глобальных переменных. Для избежания побочных эффектов необходимо:
1.Разделить все параметры на параметры-значения (для исходных
данных) и параметры-переменные (для результатов).
2.Не использовать по возможности в подпрограммах глобальных
переменных.
3.В функциях не использовать параметров-переменных.
4.Подбирать имена локальных и глобальных переменных так, что-
бы они не совпадали.
5.Совпадение имен формальных и фактических параметров допускается, но для большей наглядности также лучше сделать их различными.
Пример: Составить программу вычисления значения выражения_Muc7Opu2ak.jpg

используя функцию нахождения максимума из 3 чисел (max3) и
функцию нахождения максимального из 2 чисел (max2), причем max2
должна быть вложенной по отношению к max3.
Program vlog_func;
Var x,y,z,v : real;
Function max3(a,b,c:real) : real;
Var d : real;
Function max2(e,f:real):real;
Begin
If e>f then max2:=e else Max2:=f
End;
Begin
d:=max2(a,b);
d:=max2(d,c);
Max3:=d
End;
Begin
Write (‘ Введите 3 числа’);
Readln (x,y,z);
V:=(max3(x, y ,z)+max3(x+y, x-y, x+z))/
72
(max3(x*y, x*z, y*z));
writeln (‘v=’,v:6:4);
End.

 

 


29.06.2016; 21:32
хиты: 4
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2016. All Rights Reserved. помощь