Var t:real; //промежуточная переменная
Лабораторная работа №7
Разработка, отладка и испытание алгоритмов и программ с использованием процедур и функций
Цель работы: овладение практическими навыками разработки программ с использованием процедур и функций.
ОПИСАНИЕ ПРОЦЕДУРЫ
Описание процедуры начинается с заголовка, который является обязательным. Заголовок начинается со служебного слова Procedure,за которым следует имя процедуры и в круглых скобках описание формальных параметров. После заголовка могут идти те же разделы, что и в основной программе:
Procedure <Имя> [(Список формальных параметров)]; Разделы описаний процедуры Begin Тело процедуры End; |
При вызове процедуры ее формальные параметры заменяются на фактические — это параметры, которые передаются процедуре при ее вызове. Фактические и формальные параметры должны соответствовать:
- по типу,
- по порядку следования
- по количеству.
Формальные параметры описываются в заголовке процедуры. Они делятся на параметры-значения — это входные данные. Перед ними не ставится служебное слово Var.
Парметры-переменные — это выходные и входные данные. Перед ними ставится служебное слово Var.
В процедуре может быть любое конечное количество выходных данных (результатов). Все переменные делятся на глобальные (описываются в разделе описаний основной программы) и локальные (описываются в разделе описаний подпрограммы). Локальные переменные «живут» только во время работы подпрограммы.
Вызов процедуры
Вызов процедуры осуществляется путем указания имени процедуры с указанием фактических параметров. Например, Summa(a,150,s).
Пример . Найти значение выражения y=3x10+2x5+x3.
Решение. Для решения данной задачи воспользуемся процедурой, вычисляющей степень аn .
Var x, y, s1, s2, s3: integer; {x, y, s1, s2, s3 — глобальные переменные}
Procedure St (a, n: integer; Var s: integer);
{a, n, S — формальные параметры}
{a,n — параметры- значения, S — параметр -переменная }
Var i: integer; {i— локальная переменная}
Begin
S:=1;
For i:=1 to N do s:=s*a;
End; {ProcedureSt }
BEGIN
Read(x);
ST(x, 10,s1); ST(x, 5,s2); ST(x, 3,s3);
Y:=3*s1+2*s2+s3;
Write(y);
End.
Описание функции
Заголовок функции состоит из зарезервированного слова Function, за которым следует имя функции, затем в круглых скобках записывается список формальных параметров, далее ставится двоеточие и указывается тип результата функции (результат всегда один).
! В теле функции обязательно должен быть один и только один оператор присваивания, в левой части которого стоит имя функции, а в правой — ее значение. Иначе значение функции не определено. |
Таким образом, общий вид описания функции следующий:
Function Имя [ (Список формальных параметров)]: Тип результата;
<Описательная часть>
Begin
<Тело функции>
End;
Вызов функции
Вызов функции осуществляется в выражениях с указанием имени и фактических параметров: например, y: =f(1,x)+f(2*x,3).
Пример . Найти
Решение.
Var n: integer;
c: integer;
Function Factor (n:integer): integer;
Var i:integer; rez: integer;
Begin
Rez:=1;
For i:=1 to N do
rez:=rez*i;
Factor:=rez;
End;
Begin
Readln (n);
с:=factor(n);
Writeln (c);
End.
Задания
1. Составьте программу для определения числа сочетаний , используя функцию при вычислении факториала.
2. С помощь следующей процедуры произведите обмен значениями между двумя переменными:
procedure Swap (var x,y: real);
var t:real; //промежуточная переменная
Begin
t:=x; //запоминаем значение x
x:=y; //переменной x присваиваем значение y
y:=t; //переменной y присваиваем t, равное x
end;
- Опишите функцию, определяющую максимальное из двух чисел, и с помощью этой функции вычислите значение выражения:
.
- Даны значения c,d,l,k. Напишите функцию min для вычисления значения следующего выражения:
.
- Ввести 3 целых массива из n чисел каждый: А, В, С. Вычислить значение
, где max(A) — максимальный элемент массива А (аналогично max(B) и max(C)). Вычисление максимального элемента массива оформить в виде подпрограммы. Формула имеет смысл, если max(C)<>0.
- Треугольник задан длинами своих сторон. Найдите длины его медиан. Вычисление длины медианы оформить в виде подпрограммы (
– длина медианы, проведенной из вершины B).
***