Автор: Пользователь скрыл имя, 07 Марта 2013 в 02:12, курс лекций
Лекция 1. Представление алгоритмов на языке Программирования ПаскальАВС.
Лекция 2. Построение линейных алгоритмов
Лекция 3. Алгоритмы, содержащие структуру ветвления.
Лекция 4. Алгоритмы, содержащие структурные операторы циклов.
...
Лекция 9. Файловый тип данных
Лекция 5.
Процедуры и функции пользователя.
В лекции рассматриваются следующие вопросы:
1.Зачем нужны процедуры и функции пользователя.
2. Общий вид процедуры
4. Процедура с входными, но без выходных параметров.
5. Процедуры с входными и выходными параметрами.
6.Общий вид функции пользователя.
7.Пример использования
функции пользователя
8.Пример использования
функции пользователя
9.Пример использования в программе и функций и процедур пользователя.
10.Рекурсия прямая и косвенная.
1. Зачем нужны процедуры и функции пользователя.
Процедуры и функции обеспечивают возможность практической реализации принципов структурного программирования. Ориентируясь на эти принципы, можно разделить большую программу на меньшие, оформив их как процедуры или функции. Эти процедуры отлаживаются отдельно и независимо, а затем могут использоваться в основном блоке программы или в других программах, процедурах и функциях.
При создании процедур или функций пытаются достичь следующих целей:
- разделения некоторой общей задачи на несколько меньших по объему и сложности частных задач;
- уменьшения объема
программы за счет
Структурное программирование привело к идее разделения труда среди программистов. При этом каждый программист занимается конкретным программным модулем, на который ему выдано задание и может не знать общих размеров проекта, так как его задача составляет лишь малую часть проекта. Он может использовать процедуры и функции, созданные другими программистами, зачастую не зная их внутреннего устройства.
2. Общий вид процедуры пользователя.
Процедура пользователя имеет ту же структуру, что и любая программа языка Паскаль, другими словами, процедура пользователя состоит из следующих частей:
1.Заголовок
2.Объявление данных
3.Исполняемая часть
Существенные отличия процедуры и вообще программы в заголовке. Заголовок процедуры пользователя начинается служебным словом Procedure, после него идет имя процедуры (которое дает пользователь), далее в круглых скобках указываются формальные параметры и их типы). Формальные параметры заголовка делятся на входные и выходные. Входные формальные параметры процедуры пользователя – это те параметры, которые получают свое значение из основной программы. Выходные формальные параметры свое значение передают в основную программу. Входные параметры записываются сразу после открытой круглой скобки в заголовке процедуры. Выходные формальные параметры записываются после служебного слова Var в заголовке процедуры, затем круглая скобка закрывается.
Формат заголовка:
Procedure имя процедуры (входные формальные параметры : их типы; Var выходные формальные параметры : их типы); |
Для обращения к процедуре в основной программе записывается процедурный оператор, который состоит: из имени процедуры, и в круглых скобках перечисляются фактические параметры через запятую.
Между формальными и фактическими параметрами должно быть взаимно однозначное соответствие. Это значит, что:
1.Должно быть одинаковое
количество формальных
2.Должен соблюдаться
порядок следования
3.Типы соответственных
Пример. Дана функция . Построить таблицу значений функции на отрезке [a,b]с шагом h. Таблицу оформить в следующем виде:
______________________________
: Х : У : время рисовать подчеркиваю-
: 2 ___6.1____ 2 : 2 ____6.1_____ 2 : щие полоски, то рисование ее
:_____________:_______________
:_____________:_______________
Procedure lin;
Var i:Integer;
Begin
For i:=1 to 23 do Write(‘_’);
Writeln;
End;
Так как процедура только рисует полоску, то никаких входных и выходных параметров она не имеет, поэтому в заголовке процедуры круглые скобки отсутствуют.
В отличие от вообще программы
на языке Паскаль процедура
В данной процедуре используется переменная i. Эта переменная используется только внутри процедуры и никакого отношения к основной программе она не имеет. Такие переменные называются локальными переменными и их тип указывается после заголовка процедуры в разделе Var.
В целом программа будет иметь следующий вид:
Program tabl;
Var a,b,h,x,y : Real;
{Процедура пользователя}
Procedure lin;
Var i:Integer;
Begin
For i:=1 to 23 do Write(‘_’);
Writeln;
End;
{Основная программа}
Begin
Writeln(‘Ввести концы отрезка”);
Readln(a,b);
Writeln(‘Ввести шаг’);
Readln(h);
Lin; {оператор обращения к процедуре}
Writeln(‘: X : Y :);
Lin;
X:=a;
While x<=b do
Begin
Y:=Sin(x)+exp(x);
Writeln(‘: ‘,x:6:1,’ : ‘,Y:6:1,’ :’);
Lin;
X:=x+h;
End;
Readln;
End.
4. Процедура с входными, но без выходных параметров.
Пример. Даны три разных целых числа. Указать для каждого составное оно или простое.
Сначала предположим, что
у нас имеется одно целое число.
Составим процедуру определения
это число простое или
Procedure Prost(x:Integer);
Var d,k : Integer;
Begin
K := 0; {К –это счетчик делителей}
{В цикле переменная d – это числа, которые могут быть делителями данного числа х}
For d := 1 to x do If x mod d=0 Then k := k+1;
{Если делителей меньше или равно 2, то число простое, т.е. оно делится только на 1 и само на себя}
If k<=2
Then Writeln(x,’простое число’)
Else Writeln(x,’число составное’);
End;
В этой процедуре х – это число, для которого определяется простое оно или составное. Так как в основной программе будет три разных целых числа, то в процедуру вместо х будем отправлять сначала первое число, и процедура для него выдаст ответ, потом второе и ответ для него, а потом третье и ответ для него.
Исходя из этого считаем, что х – это входной параметр процедуры. Так как ответ для числа простое оно или составное выводится внутри тела процедуры, то выходных параметров в данной процедуре не будет, т.е. в основную программу не передается ни одно значение. Основная программа примет вид:
Program chislo;
Var a,b,c : Integer;
{Процедура пользователя}
Procedure Prost (x : Integer) ;
Var d,k : Integer;
{d,k – локальные параметры, которые используются только внутри тела процедуры и в основную программу не передаются, поэтому они записаны не в заголовке, а в отдельном разделе Var}
Begin
K := 0;
For d := 1 to x do If x mod d=0 Then k := k+1;
If k<=2
Then Writeln(x,’простое число’)
Else Writeln(x,’число составное’);
End;
{Основная программа}
Begin
Writeln(‘Ввести три целых числа’);
Readln(a,b,c);
Prost(a); {а – фактический параметр, значение которого передается в процедуру вместо х}
Prost(b); {b – фактический параметр, который свое значение передает в процедуру в переменную х}
Prost( c ); {с – фактический параметр, значение которого передается в переменную х в процедуру}
Readln;
End.
5. Процедуры с входными и выходными параметрами.
Пример. Даны 3 целых числа a, b, c. Найти наибольший общий делитель этих чисел.
В математике имеется следующее соотношение НОД(НОД(а,в),с). Для двух целых чисел НОД находится по алгоритму Евклида. Оформим его в виде процедуры.
Procedure NOD (x,y : Integer; Var s : Integer);
Begin
While x<>y do If x>y Then x := x-y Else y := y-x;
S:=x;
End;
В этой процедуре х, у – это два числа, для которых находим НОД. Сам НОД мы обозначили через s. Таким образом х, у – это входные параметры процедуры, которые будут передаваться из основной программы в процедуру, а параметр s – выходной параметр, который передается из процедуры в основную программу. Основная программа примет вид:
Program aa;
Var a,b,c, r,t : Integer;
{Процедура пользователя}
Procedure NOD (x,y : Integer; Var s : Integer);
{х,
у – входные формальные
{s – выходной формальный параметр}
{в процедуре
других параметров нет,
Begin
While x<>y do If x>y Then x := x-y Else y := y-x;
S:=x;
End;
{Основная программа}
Begin
Writeln(‘’);
Readln(a, b, c);
NOD(a,b,r); {a,b – фактические параметры, их значения передаются переменным x, y в процедуру, r – тоже фактический параметр, но он свое значение получает из процедуры из переменной s}
NOD(r, c, t); {r, c – фактические параметры, их значения передаются переменным x, y в процедуре, t – фактический параметр, свое значение он получает из процедуры из переменной s}
Writeln(‘NOD(‘,a, ‘,’, b, ‘,’, c, ‘)=’,t);
Readln;
End.
Входных и выходных параметров в процедуре может быть сколько угодно и они могут быть разных типов.
Пример. Даны целых числа. Для каждого из чисел указать, имеются ли в записи числа четные цифры.
Создадим процедуру для ответа на вопрос задачи для одного числа, а затем 4 раза обратимся к этой процедуре.
Program aa2;
Var a,b,c,d,m:Integer; {Это переменные, которые будут встречаться в основной программе. Они являются фактическими параметрами.}
{Процедура пользователя}
Procedure yes(n:Integer: Var k:Integer);
{Переменная k – это счетчик четных цифр в числе, переменная n – это само число, в котором ищем, сколько оно имеет четных цифр. Переменные n,k – это формальные параметры. N – это входной формальный параметр, k – выходной формальный параметр}
Var c:Integer;
{с – формальный локальный параметр, он встречается только в процедуре}
Begin
K:=0;
Repeat
C:=n mod 10;
If c mod 2=0 Then k:=k+1;
N:=n div 10;
Until n=0;
End;
{Основная программа}
Begin
Writeln(‘Ввести 4 целых числа’);
Readln(a,b,c,d);
{Ответ на вопрос задачи для 1 числа а}
Yes(a,m);
If m<>0
Then Writeln(‘В числе’, а,’ есть четные цифры ’)
Else Writeln(‘В числе’, а,’ нет четных цифр ’);
{Ответ на вопрос задачи для второго числа b}
Yes(b,m);
If m<>0
Then Writeln(‘В числе’, b,’ есть четные цифры ’)
Else Writeln(‘В числе’, b,’ нет четных цифр ’);
{Ответ на вопрос задачи для третьего числа с}
yes(с,m);
If m<>0
Then Writeln(‘В числе’, с,’ есть четные цифры ’)
Else Writeln(‘В числе’, с,’ нет четных цифр ’);
{Ответ на вопрос задачи для четвертого числа d}
Yes(d,m);
If m<>0
Then Writeln(‘В числе’, d,’ есть четные цифры ’)
Else Writeln(‘В числе’, d,’ нет четных цифр ’);
Readln;
End.
6.Общий вид функции пользователя.
Функции пользователя – это другой вид подпрограмм. Функции пользователя очень похожи на процедуры пользователя, но имеют свои особенности:
1.В теле функции
обязательно должен
2.Обращение к функции
происходит не отдельным
Информация о работе Лекции по "Языкам и методам программирования" (PascalABC)