Функция как вспомогательный блок программы
Что такое функция?
ФУНКЦИИ
Из чего состоит функция?
Пример функции
Пример функции
Как программа выполняет функцию?
Пример
Функция перевода десятичного числа в другие системы счисления
Зачем нужны вспомогательные блоки?
Глобальные и локальные переменные
Задача
Глобальные и локальные переменные
Изоляция данных на практике
Что будет, если имена переменных совпадают?
581.76K
Category: programmingprogramming

Функция как вспомогательный блок программы

1. Функция как вспомогательный блок программы

ЛЕКЦИЯ №6

2. Что такое функция?

ЧТО ТАКОЕ ФУНКЦИЯ?
Функция — это изолированный, именованный фрагмент кода, предназначенный
для выполнения определенной задачи.
Принцип «Черного ящика»: Основная программа знает, что передать функции и что
получить взамен, но не видит, как именно функция делает вычисления внутри
себя.
Аргументы
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) Написать функцию вычисления факториала числа.
Вычислить выражение
English     Русский Rules