- •Конспект лекций
- •1.4 Общая структура программы
- •1.5 Стандартные процедуры и функции
- •1.6 Процедуры ввода/вывода
- •2. Простые типы данных
- •2.1 Целые типы
- •2.2 Вещественные типы
- •2.3 Cимвольный тип данных
- •2.4 Логический тип данных.
- •2.5 Ограниченные типы
- •2.6 Перечислимые типы
- •2.7 Описание типов
- •2.8 Преобразование типов
- •2.9 Порядок вычисления выражений
- •3. Операторы языка Паскаль
- •3.1 Оператор присваивания
- •3.2 Составной оператор
- •3.3 Условный оператор
- •3.4 Оператор выбора case
- •3.5 Оператор цикла с параметром (цикл for)
- •3.6 Оператор цикла с предусловием (цикл while)
- •1 Вариант:
- •2 Вариант:
- •3 Вариант:
- •3.7 Оператор цикла с постусловием (цикл repeat)
- •3.8 Вложенные циклы
- •3.9 Оператор перехода goto
- •4. Массивы
- •4.2 Сортировка элементов массива
- •4.3 Многомерные массивы
- •5. Подпрограммы (процедуры и функции)
- •5.1 Процедуры
- •5.2 Функции
- •5.3 Области действия имен
- •5.4 Параметры процедур и функций
- •5.5 Побочные эффекты при использовании подпрограмм
- •5.6 Передача массивов в подпрограммы
- •5.7 Параметры-костанты
- •5.8 Массивы открытого типа
- •5.9 Рекурсия в подпрограммах
- •6. Строковый тип данных
- •6.1 Описание строк
- •6.2 Операции со строками
- •6.3 Процедуры и функции для работы со строками
- •7. Стандартные модули Турбо-Паскаля
- •7.1 Модули турбо3 и graph3
- •7.2 Модуль overlay
- •7.3 Модуль dos
- •7.4 Модуль system
- •7.5 Модуль printer
- •7.6 Модуль crt
- •7.7 Модуль graph
- •8. Записи
- •8.1 Определение записи
- •8.2 Оператор над записями
- •8.3 Вложенные записи
- •8.4 Массив записей
- •8.5 Записи с вариантами
- •9. Файлы
- •9.1 Определение файла
- •9.2 Процедуры и функции для работы с файлами
- •9.3 Нетипизированные файлы
- •10. Интегрированная среда Турбо Паскаля
- •10.1 Как начать работу с Турбо Паскалем
- •10.2 Ваша первая программа
5.2 Функции
Функция отличается от процедуры тем, что результат работы функции возвращается в виде значения через ее имя. Вызов процедуры – это отдельный оператор, а вызов функции может быть использован в выражениях вместе с другими операторами (в правой части оператора присваивания или в операторе write/writeln).
Пример:
стандартные процедуры: write, writeln, read, readln, delay, clrscr…
стандартные функции: sqr, sqrt, abs, odd, exp, ln, sin, cos…
Описание функции:
function <имя> (список формальных параметров): <тип>;
<раздел описаний>;
begin
<тело функции>;
end;
Пример 1: f(x,y)=;
function f (x,y: integer): real;
begin
f:=sqrt(sqr(x)+sqr(y));
end;
begin
……
z:=f(2,3);
writeln(‘f=’, f(6,8));
end.
Пример 2:
var s:real;
i,n: integer;
function fact(k: integer): longint;
var f: longint;
j: integer;
begin
f:=1;
for j:=1 to k do f:=f*j;
fact:=f;
end;
begin
write(‘Введите n’);
readln(n);
S:=0;
for i:=1 to n do s:=(s+1)/(fact(i)+fact(i+1)+fact(i+2));
writeln(‘S = ’,s:6:4);
end.
5.3 Области действия имен
Имена переменных, описанных в основной программе, называются глобальными и доступны в основной программе и во всех подпрограммах.
Имена переменных, описанных в подпрограмме, называются локальными и доступны в этой подпрограмме и во всех вложенных в нее подпрограммах (это же относится и к именам формальных параметров!)
Имена локальных переменных перекрывают имена глобальных, то есть если имена переменных в основной программе и подпрограмме совпадают, то в подпрограмме недоступна переменная, описанная в основной программе.
А – основная порграмма, все переменные доступны везде
B, E – подпрограммы, вложенные в А
C, D – подпрограммы, вложенные в В
5.4 Параметры процедур и функций
Формальные параметры – это параметры, используемые при описании процедур и функций
Фактические параметры – это параметры, используемые при вызове процедур и функций.
При вызове подпрограммы формальные параметры заменяются на соответствующие фактические параметры основной программы (!).
Пример:
var c: integer;
procedure p(b: integer);
begin
…
end;
b – формальный параметр
begin с – фактический параметр
p(c);
end.
По способу описания и передачи значения формальные параметры делятся на параметры-значения и параметры-переменные.
Параметры-значения (имя: тип)
Изменение значения таких параметров в подпрограмме не приводит к изменениям соответствующих фактических параметров основной программы. В подпрограмму передается копия фактического параметра (его значение). Поэтому фактические параметры, соответствующие параметрам-значениям, могут быть константами, переменными или выражениями. Другими словами, параметр-значение считается обычной локальной переменной. При вызове подпрограммы начальное значение параметра автоматически устанавливается равным значению соответствующего фактического параметра, заданного при вызове. Внутри подпрограммы возможны любые действия с формальными параметрами, но эти изменения никак не отражаются на значениях переменных основной программы.
Пример1:
var a: integer;
procedure proc(x: integer);
begin
x:=x+2;
end;
begin
a:=10;
proc(a); writeln(a); 10
proc(a*a); writeln(a); 10
proc(25); writeln(a); 10
end.
Параметры-переменные ( (var имя: тип); )
Изменение формальных параметров в подпрограмме приводит к аналогичному изменению фактических параметров, используемых при вызове подпрограммы. Эти параметры используются для возврата значений из процедур (в функциях обычно не используются, т.к. функция возвращает значение через свое имя).
В подпрограмму передается адрес фактического параметра, а не его копия. (Формальный параметр считается синонимом соответствующего фактического параметра). Поэтому фактический параметр, соответствующий параметру-переменной, должен быть переменной того же типа, что и формальный параметр (константы или выражения не допускаются).
Пример 1:
var a,b: integer;
procedure proc(x: integer; var y: integer);
begin
y:=x+y;
~
begin
a:=10; b:=10;
proc(a,b);
writeln(‘a = ’,a,’ b= ‘,b); a = 10 b = 20
end.
Пример2: Программа вычисления объема шара V=4/3πR3
С использованием функции: С использованием процедуры:
var r,v: real;
function vol (r:real): real;
begin
vol:=4/3*pi*r*r*r;
end;
begin
write(‘Введите радиус шара’);
readln(r);
v:=vol(r);
writeln(‘Объем шара = ’, v);
end.
var r,v: real;
procedure vol(r: real; var v:real);
begin
v:=4/3*pi*r*r*r;
end;
begin
write(‘Введите радиус шара’);
readln(r);
vol(r,v);
writeln(‘Объем шара = ’, v);
end.
~
v:=4/3πr3