Функция возвращает в основную программу только один результат через переменную, являющуюся именем функции. Эта переменная не должна быть описана в основной программе. В описательной части функции этой переменной должно быть присвоено какое-либо значение, иначе функция не возвращает никакого значения.
Примеры типовых задач на тему «Подпрограммы»
1. Задан одномерный массив вещественных чисел. Найти максимальный элемент массива и определить его номер.
Составим программу с использованием двух процедур:
· процедура ввода элементов массива;
· процедура поиска максимального элемента и определение его номера.
Для передачи массива в процедуру введем пользовательский тип mas.
Программа
Пояснения
program PP;
type
mas=array[1..100] of integer;
var
a:mas; max:real; n,max,kmax:integer;
procedure input_mas(n:integer ; var a:mas );
var i:integer;
begin
for i:=1 to n do readln(a[ i ]);
end;
procedure max_m(n:integer; a:mas; var max,kmax:integer );
var i:integer;
begin
max:=a[1];kmax:=1;
for i:=1 to n do
if a[i]>max then
begin max:=a[i]; kmax:=i; end;
end;
begin
writeln(‘ Введите n<=100’) ;
readln( n );
writeln (‘ Введите элементы массива ‘);
input_mas(n,a);
max_m(n,a,max,kmax );
writeln(‘max=’,max,‘kmax=’,kmax);
readln; end.
Имя программы – РР
{Описательная часть программы}
Пользовательский тип данных
Глобальные переменные
Текст первой процедуры
{Описательная часть процедуры}
{Исполнительная часть процедуры}
Ввод элементов массива
Текст второй процедуры
{Описательная часть процедуры}
{Исполнительная часть процедуры}
Поиск максимального элемента
{Исполнительная часть программы}
Вывод сообщения на экран
Ввод размера массива
Вывод сообщения на экран
Обращение к первой процедуре
Обращение ко второй процедуре
Вывод результатов на экран
2. Составить программу вычисления n! с использованием функции, в которую вынесем подсчет факториала.
n! = 1* 2 * 3 * …* n
Введем обозначения:
n, k – размер и индекс массива, глобальные переменные.
p, i – значение факториала и индекс массива в функции, локальные переменные.
fun - имя функции, возвращает результат в основную программу.
Программа
Пояснения
program factorial;
var
n,k:integer;
function fun(k:integer):integer;
var p,i:integer;
begin
p:=1;
for i:=1 to k do
p:=p*i;
fun:=p;
end;
begin
writeln('введите n');
readln(n);
for k: = 1 to n do
writeln(fun(k));
readln; end.
Имя программы – factorial
{Описательная часть программы}
Глобальные переменные
Текст функции
{Описательная часть функции}
{Исполнительная часть функции}
{Описательная часть процедуры}
{Исполнительная часть процедуры}
{Исполнительная часть программы}
Вывод сообщения на экран
Ввод размера массива
Обращение к функции
Имя функции в теле функции в операторах присваивания может стоять только слева от знака присваивания «:=», поэтому использована дополнительная переменная p для подсчета произведения.
3. Задан двумерный массив целых чисел. Определить количество четных чисел в массиве.
Составим программу с использованием двух процедур и функции :
· процедура ввода элементов массива input_mas;
· процедура вывода двумерного массива в виде матрицы print_mas;
· функция подсчета количества четных чисел kol_mas.
Программа
Пояснения
program pp_1;
type
mas=array[1..10,1..10] of integer;
var
a:mas; n,m,i,j:integer ;
procedure input_mas(n,m:integer; var a:mas);
begin
for i:=1 to n do
for j:=1 to n do readln(a[i,j]);
end;
function kol_mas( n,m:integer; a:mas ):integer;
var
k:integer ;
begin
kol:=0;
for i:=1 to n do
for j:=1 to n do
if not odd( a[ i,j ] ) then k:=k+1;
kol:=k;
end;
procedure print_mas(n,m:integer; a:mas);
begin
for i:=1 to n do
begin
for j:=1 to n do write( a[i,j],‘ ‘);
writeln;
end;
end;
begin
writeln(‘Введите n<=10 , m<=10’);
readln (n,m);
writeln(‘Введите элементы массива по строкам’);
input_mas(n,m,a);
writeln(‘Исходная матрица’);
print_mas(n,m,a);
writeln(‘Количество нечетных чисел =’,kol_mas(n,m,a));
readln; end.
Имя программы – pp_1
{Описательная часть программы}
Глобальные переменные
Процедура ввода матрицы
{Исполнительная часть процедуры}
Функция подсчета количества четных чисел
{Описательная часть функции}
{Исполнительная часть функции}
Процедура вывода матрицы
{Исполнительная часть процедуры}
{Исполнительная часть программы}
Вывод сообщения на экран
Ввод размера массива
Вывод сообщения на экран
Обращение к процедуре ввода массива
Обращение к процедуре вывода мас-ва
Обращение к функции подсчета количества четных чисел в массиве
Выражение not odd( a[ i,j ] ) – «истинно», если элемент массива четное число.
Вопросы для самоконтроля
1. В каких случаях прибегают к построению подпрограмм?
2. В каком месте программы располагаются функции или процедуры?
3. Что такое процедура?
4. Какова структура процедуры?
5. Как передается информация в процедуру?
6. Каким образом возвращаются результаты работы процедуры в основную программу?
7. Какое соответствие должно быть между формальными и фактическими параметрами?
8. Какие переменные называются глобальными? Время существования глобальных переменных?
9. Какие переменные называются локальными? Время существования локальных переменных?
10. Когда используют директиву forward?
11. В каких случаях целесообразно прибегать к построению функций?
12. Как передается информация в функцию?
13. Каким образом возвращается результат работы функции в основную программу?