Similar presentations:
Функция как вспомогательный блок программы
1. Функция как вспомогательный блок программы
ЛЕКЦИЯ №62. Что такое функция?
ЧТО ТАКОЕ ФУНКЦИЯ?Функция — это изолированный, именованный фрагмент кода, предназначенный
для выполнения определенной задачи.
Принцип «Черного ящика»: Основная программа знает, что передать функции и что
получить взамен, но не видит, как именно функция делает вычисления внутри
себя.
Аргументы
integer
string
True/False
Результат
Функция
integer
string
True/False
3. ФУНКЦИИ
• Стандартные функции• (прописаны в системном модуле System)
sin()
round()
sqrt()
sqr()
ln()
odd()
readlnreal()
abs()…
• Пользовательские
• (описываются программистом в описательной
части программы)
Примеры вызова функции:
y:=sin(x)/cos(x+2);
if odd(a) then …
if round(x)=x then …
4. Из чего состоит функция?
ИЗ ЧЕГО СОСТОИТ ФУНКЦИЯ?Компоненты блока:
❑ Имя функции: Уникальный идентификатор, по которому к ней обращаются
(например, CalculatePrice).
❑ Параметры (Аргументы): Переменные, которые функция принимает на вход
для расчетов.
❑ Тело функции: Набор инструкций и алгоритмов, выполняющих работу.
❑ Возвращаемое значение: Итоговый результат работы, который отдается
обратно в программу.
5. Пример функции
ПРИМЕР ФУНКЦИИfunction Sum_cifr (a: integer): integer;
begin
Sum_cifr := 0;
while a > 0 do begin
Sum_cifr += a mod 10;
a:= a div 10;
function Sum_cifr (a: integer): integer;
begin
result := 0;
while a > 0 do begin
result+= a mod 10;
End;
a:= a div 10;
end;
End;
end;
6. Пример функции
ПРИМЕР ФУНКЦИИfunction CalculatePrice(basePrice: integer; distance: real): real;
begin
if distance > 10.0
then result := basePrice * 0.9 { скидка 10% }
else result := basePrice;
end;
Var Price:integer;
function CalculatePrice(basePrice: integer; distance: real): real;
begin
if distance > 10.0
then CalculatePrice := basePrice * 0.9 { скидка 10% }
else CalculatePrice := basePrice;
end;
Begin
Println(CalculatePrice(40,25));
Price:=readlninteger(‘Введите стоимость проезда: ’);
Println(CalculatePrice(40,readlnreal(‘введите км: ’)));
End.
7. Как программа выполняет функцию?
КАК ПРОГРАММА ВЫПОЛНЯЕТФУНКЦИЮ?
Пошаговый алгоритм:
• Основная программа доходит до строки с вызовом функции.
• Передает аргументы (данные) в функцию.
• Основной код временно «замораживается».
• Управление передается функции, она выполняет свои строки кода.
• Функция вычисляет результат и возвращает его.
• Основная программа «просыпается», принимает результат и идет дальше.
8. Пример
ПРИМЕРfunction sum_n(n:integer):integer; //описание функции
begin
result:=0;
while n>0 do begin
Параметр
result+=n mod 10;
функции
n:=n div 10;
end
end;
Var a,b:integer;
Begin
Readln(a,b);
if sum_n(a) > sum_n(b)
else print(sum_n(b));
end.
then print(sum_n(a))
9. Функция перевода десятичного числа в другие системы счисления
ФУНКЦИЯ ПЕРЕВОДА ДЕСЯТИЧНОГО ЧИСЛА В ДРУГИЕСИСТЕМЫ СЧИСЛЕНИЯ
function perevod(n,p:integer):string;
var alf:string;
begin
Формальные
result:='';
параметры
while n>0 do begin
case n mod p of
0,1..9:
result+=char(ord('0')+(n mod p));
10:result+='A';
11:result+='B';
12:result+='C';
13:result+='D';
14:result+='E';
15:result+='F';
End;
n:=n div p;
Фактические
end;
result:=result[::-1]
параметры
end;
Begin
Print(Perevod(7,5));
Print(Perevod(56,13));
end.
Порядок и тип
формальных и
соответствующих
фактических
параметров должен
совпадать!!!
10. Зачем нужны вспомогательные блоки?
ЗАЧЕМ НУЖНЫ ВСПОМОГАТЕЛЬНЫЕБЛОКИ?
Преимущества использования функций:
❑ Борьба с дублированием: Принцип DRY (Don't Repeat Yourself — Не
повторяйся). Пишем код один раз, используем многократно.
❑ Читаемость: Код становится чистым и понятным, так как сложные
вычисления спрятаны за говорящими именами функций.
❑ Упрощение отладки: Если в расчете есть ошибка, её нужно исправить
только в одном месте — внутри функции.
11. Глобальные и локальные переменные
ГЛОБАЛЬНЫЕ И ЛОКАЛЬНЫЕПЕРЕМЕННЫЕ
❑ Глобальные переменные: Создаются в начале программы. Живут всё
время и видны отовсюду (включая любые функции).
❑ Локальные переменные: Создаются внутри функции (в блоке var перед её
begin). Они «рождаются» при вызове функции и полностью «умирают»
(стираются из памяти), как только функция завершит работу.
❑ Защита данных: Основная программа не может заглянуть внутрь функции и
изменить её локальные переменные.
12. Задача
ЗАДАЧАВводится последовательность из N целых чисел. Определить
максимальное число, восьмеричная запись которого заканчивается
на «12».
13. Глобальные и локальные переменные
ГЛОБАЛЬНЫЕ И ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕfunction perevod(n,p:integer):string;
var alf:string;
begin
Локальные
result:='';
переменные
alf:='0123456789abcdef';
while n>0 do begin
result+=alf[n mod p + 1];
n:=n div p;
end;
result:=result[::-1]
end;
Локальные
переменные
Глобальные
переменные
Var a,n,mx:integer;
Begin
n:=readlninteger('введите N-');
Mx:=-maxint;
For var i:integer:=1 to n do begin
a:=readlninteger('Число: ‘);
if (perevod(a,8)[^2:]='12')and (a>mx) then mx:=a;
end;
print(mx);
end.
Память под локальные переменные
выделяется в отдельном сегменте
памяти – стеке, поэтому локальные
и глобальные переменные с
одинаковыми идентификаторами не
влияют друг на друга.
14. Изоляция данных на практике
ЗАДАНИЕ1) Написать функцию вычисления факториала числа.
Вычислить выражение
programming