Область действия имен
Имена, объявленные в разделе описания основной программы, действуют в разделе операторов основной программы и в любой подпрограмме (процедуре и функции). Эти имена называются глобальными. Имена, объявленные в подпрограмме, действуют только в этой подпрограмме и в любой объявленной в ней процедуре и функции. Такие имена называются локальными. Они не доступны для операторов основной программы.
Рекомендации по использованию процедур
Нужно ли использовать при программировании процедуры, сколько должно быть у нее параметров, какие из них должны быть параметры-значения , а какие параметры- переменные, что нужно передавать через глобальные переменные? Здесь не может быть категоричных утверждений, в этом заключается искусство программирования.
Желательно, чтобы процедура реализовывала один вспомогательный алгоритм, а не несколько сразу. Например, процедура нахождения максимальногоиз двух чисел только находила это максимальное, а вывод результата на экран выполнялся бы в основной программе или другой процедуре.
Примеры решения задач.
Задача 1.
Написать процедуру, находящую максимальное из двух вещественных чисел и с ее помощью определить максимальное из 4-х вводимых с клавиатуры вещественных чисел.
Начните решение задачи с ответов на вопросы:
1. Какие данные являются входными для процедуры, что будет являться результатом работы процедуры? ( Входными данными являются два вещественных числа, а результатом будет являться максимальное из них).
2. Сколько параметров у этой процедуры?( Всего три параметра: два параметра-значения вещественного типа, их имена будут а и Ь, и один параметр-переменная
(результат) вещественного типа, его имя будет с). Имя процедуры make, имена переменных, вводимых с клавиатуры а1,а2,а3,а4. Имена вспомогательных переменных - zl ,z2,z3.
Примерное решение:
program zadani;
var al,a2,a3,a4,zl,z2,z3:real;
Procedure makc(a,b:real;var c:real);
begin
ifa>b then c:=a else c:=b
end; {конец процедуры}
begin
\\т11е('Введите 4 вещественных числа'); readl(al,a2,a3,a4);
makc(al,a2,zl);
makc(a3,a4,z2);
makc(zl,z2,z3);
ут1е1п('максимальное=',г3);
end.
Задача 2.
Написать процедуру с 2-мя параметрами целочисленного типа, меняющую их • значения местами.
Пусть имена переменных, значения которых необходимо переставить местами, будут I и J, их значения можно занести в эти переменные оператором присваивания. Имя процедуры - PER, имена параметров процедуры х и у.
Program perest;
Varij:integer;
Procedure PER(x,y:integer);
Var z-.integer;
begin z:=x; x:=y; y:=z;
end; { конец процедуры}
begin r^l;]:^;
writeln( 'до перестановки' ,'i=',i:3,'j='.j:3);
PER(iJ);
write/n('no<yie перестановки ','i='.i:-5,'J^'j'-S);
end.
Упражнение 18.
1. Написать процедуру, вычисляющую по заданному натуральному числу N сумму натуральных чисел от 1 до N включительно. Используя ее, найти сумму натуральных чисел от 51 до 99. Указание: искомая сумма равна разности суммы чисел от 1 до 99 и суммы от 1 до 50.
2. Написать процедуру, которая вычисляет площадь треугольника по его известным сторонам( используя формулу Герона). Используя эту процедуру, вычислить площадь четырехугольника с известными сторонами и одной из диагоналей.___________________ __
19.5. Понятие функции
Функция необходима для определения алгоритма вычисления нового значения некоторого простого типа.
В этом отношении функция подобна выражению, которое вычисляет значение. Вызов функции является одним из допустимых операндов выражения, обозначая в нем то значение, которое вычисляет функция. Имя функции можно употреблять при записи выражений, аналогично тому, как мы употребляли имя стандартной тригонометрической функции SIN(x) при вычислении значений тригонометрических выражений. (Привести примеры стандартных функций.)
Функция пользователя оформляется аналогично процедуре. Отличительные особенности функции: она имеет только один результат выполнения (но может иметь несколько входных параметров), результат обозначается именем функции и передается в основную программу.
Функция оформляется в следующем виде:
FUNCTION имя[( список формальных параметров)] :тип;
—————————:——1
раздел описании
be ————————————'
раздел операторов END; '—————————————'
Строка, начинающаяся с ключевого слова FUNCTION, называется заголовком функции, а все остальное - телом функции.
Вызывается функция по ее имени с указанием списка фактических параметров ( если они есть ). При вызове функции тип не указывается. ? Может ли имя функции встречаться в теле функции справа от знака := ? Ответ: да.
Примеры решения задач.
Задача I
Написать функцию, находящую максимальное из двух вещественных чисел, и с ее помощью определить максимальное из 4 вводимых с клавиатуры вещественных чисел.
После описания параметров необходимо описать тип результата, возвращаемого функцией. Функция будет вызываться по имени в операторе присваивания.
Решение:
program zadani;
var al,a2,a3,a4,zl,z2,z3:real;
Function makc(a,b:real):real;
var c:real;
begin
ifa>b then c:=a else c:=b;
makc'.^c end; • begin
\\тЬе('Введите 4 вещественных числа'); readl(al,a2,a3,a4);
z\•.~•:makc(a\,a2);
z2:=makc(a3,a4);
z3:=makc(zl,z2);
у/гНе^Смаксимальное^гЗ);
end.
Задача 2
Написать функцию , вычисляющее число Фибоначчи по номеру. С ее помощью вычислить сумму 10-го и 12-го (по порядковому номеру) чисел Фибоначчи.
Все входные данные должны быть заложены в программе.
Результатом программы является число, равное сумме двух чисел, его нужно вывести на экран.
Числа Фибоначчи образуют такую последовательность
1,1,2,3,5,8, 13...
Каждое следующее число равно сумме двух предыдущих, а два первых равны 1.
program funcfib;
var z:integer;
function fib(n:integer):integer;
var c,d,k,i:integer;
begin
c:=l;d:=l;i:=2;
repeat
k:=c+d; c:=d; d:=k; i:=i+l;
until i>n-l;
fib:= k;
end;
begin z-fibOt^+fn^U^writelnCz-'.z);
end.
Упражнение 19.
Написать функцию вычисления N! (N факториал ), Указание: N!=l *2* ... (N-1)*N - произведение чисел от 1до N.
Необходимо проверять правильность любых программ и подпрограмм - это называется тестированием. Программа проверяется при различных значениях исходных данных, для которых известен результат. Например, 6!=720. Необходимо тестировать при критических значениях входных параметров, например, что выдаст программа при введенном 0 ( 0!=1) или при отрицательном значении (должно быть сообщение об ошибке в данных).
Используя написанную подпрограмму, определить, сколькими способами можно из 10 предметов выбрать два.
Это число = 10!/(2!*8!)
Можно ли с помощью этой функции вычислить 10! ? Нет, это большое число, превышающее 32767 . Необходимо объявить переменные как longint;
2.Написать функцию , которая вычисляет площадь треугольника по его известным сторонам (используя формулу Герона)
Используя эту функцию, вычислить площадь четырехугольника с известными сторонами и одной из диагоналей.____ _______ _____________
Дата добавления: 2015-12-11; просмотров: 1134;