Область действия имен

Имена, объявленные в разделе описания основной программы, действуют в раз­деле операторов основной программы и в любой подпрограмме (процедуре и функции). Эти имена называются глобальными. Имена, объявленные в подпрограмме, действуют только в этой подпрограмме и в любой объявленной в ней процедуре и функции. Такие имена называются локальными. Они не доступны для операторов основной программы.

Рекомендации по использованию процедур

Нужно ли использовать при программировании процедуры, сколько должно быть у нее параметров, какие из них должны быть параметры-значения , а какие пара­метры- переменные, что нужно передавать через глобальные переменные? Здесь не может быть категоричных утверждений, в этом заключается искусство программирова­ния.

Желательно, чтобы процедура реализовывала один вспомогательный алгоритм, а не несколько сразу. Например, процедура нахождения максимальногоиз двух чисел только находила это максимальное, а вывод результата на экран выполнялся бы в ос­новной программе или другой процедуре.

Примеры решения задач.


Задача 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; просмотров: 1112;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.015 сек.