Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Статья: Процедуры и функции в языке Паскаль. Сфера действия описаний

Название: Процедуры и функции в языке Паскаль. Сфера действия описаний
Раздел: Рефераты по информатике, программированию
Тип: статья Добавлен 13:01:12 19 ноября 2008 Похожие работы
Просмотров: 1248 Комментариев: 21 Оценило: 6 человек Средний балл: 4.5 Оценка: 5     Скачать

В языке Паскаль (как вы уже поняли из предыдущего материала) существуют понятия процедуры и функции. Процедуры и функции можно определить как замкнутые программные единицы, реализующие некоторый алгоритм. Фактически процедура или функция - это почти программа, почти - потому что она не может выполняться самостоятельно, а всегда вызывается какой-то другой процедурой или функцией. Программы, которые мы до сих пор писали, тоже были процедурами, правда, несколько особенными - главными процедурами. Программа может содержать любое количество процедур и функций, но она всегда содержит одну и только одну главную процедуру, с которой начинается выполнение программы.

Структура процедуры или функции очень похожа на структуру главной процедуры, она также содержит раздел описаний и раздел операторов; раздел операторов начинается с BEGIN и заканчивается END; (но не END. - как у главной процедуры). Единственным новым оператором для вас будет оператор заголовка, с которого начинается всякая процедура и функция. Все процедуры и функции записываются в разделе описаний какой-либо другой процедуры или функции, в том числе и главной процедуры. Оператор заголовка процедуры имеет вид:

PROCEDURE имя ( список параметров ) ;

Здесь имя - имя процедуры (любой идентификатор), список параметров может отсутствовать, но если он есть, записывается в круглых скобках после имени процедуры и имеет вид :

[VAR] имя , ... имя : тип ;

...........................

[VAR] имя , ... имя : тип

Здесь имя - имена параметров, каждый параметр может использоваться внутри процедуры как обычная переменная соответствующего типа. Тип - имя типа, но не описание пользовательского типа; скажем, описание параметра в виде x:1..5 неверно, но, если выше описан соответствующий тип: TYPE MyType=1..5, то параметр можно описать в виде x:MyType. Ключевое слово VAR перед описанием параметров означает в данном случае, что все параметры до ";" или до ")" - параметры-переменные; если же VAR отсутствует, то параметры являются параметрами-значениями. Смысл этих понятий мы рассмотрим несколько позже.

Процедуры вызываются в других процедурах и функциях с помощью уже известного вам оператора вызова:

имя ( список аргументов );

Список аргументов задается в том и только в том случае, когда в заголовке процедуры задан список параметров. Аргументы в списке разделяются запятыми и могут быть любыми выражениями, если соответствующий параметр есть параметр-значение, или только именами переменных, если соответствующий параметр есть параметр-переменная. Количество аргументов всегда должно совпадать с количеством параметров, и тип аргумента должен быть таким же, как тип параметра. При вызове процедуры значение соответствующих аргументов передается параметрам, и таким образом процедура получает информацию из вызывающей процедуры или функции. Запишем программу, использующую процедуру, которая будет аккуратно выводить значение переменной :

PROCEDURE OutVar(x:Real; Name:Char);

BEGIN WRITELN('Переменная ',Name,' равна ',x); END;

VAR a,b,c,d : Real;

BEGIN WRITE('Введите переменные a,b,c,d '); READ(a,b,c,d);

OutVar(a,'a'); OutVar(b,'b'); OutVar(c,'c'); OutVar(d,'d');

END.

Наша процедура OutVar получает из главной процедуры вещественное число x и символ Name, но ничего не передает обратно. Теперь попробуем написать процедуру, которая по заданным значениям x и y вычисляет cos(x)+cos(y) и cos(x)-cos(y) :

PROCEDURE T(x,y:Real; Cplus,Cminus:Real);

BEGIN Cplus:=cos(x)+cos(y); Cminus:=cos(x)-cos(y); END;

VAR p,m:Real;

BEGIN T(1.235,0.645,p,m); WRITELN(p:7:3,m:7:3); END.

Запустим эту программу и - вместо правильного результата 1.129,-0.470 - получим в лучшем случае нули. Дело в том, что через параметры-значения (а Cplus и Cminus описаны в нашей процедуре как параметры-значения!) невозможно передать информацию из процедуры, но лишь в процедуру. Чтобы правильно решить нашу задачу, следует Cplus и Cminus описать в заголовке как параметры-переменные:

PROCEDURE T(x,y:Real; VAR Cplus,Cminus:Real);

BEGIN Cplus:=cos(x)+cos(y); Cminus:=cos(x)-cos(y); END;

Таким образом, входные параметры процедуры могут быть и параметрами -значениями и параметрами-переменными, а выходные параметры - только параметрами-переменными. Для того, чтобы глубже понять это правило, выясним, что же происходит с параметрами и аргументами при вызове процедуры. В момент вызова для каждого параметра-значения в специальной области памяти, называемой стеком (за контроль переполнения стека отвечает описанная выше опция компилятора Stack cheking), создается его копия - переменная соответствующего типа, которой присваивается значение аргумента. В дальнейшем процедура работает с этой копией, и при выходе из процедуры копия уничтожается. Таким образом, никакие изменения параметра-значения не могут быть известны за пределами процедуры. По-другому обрабатываются параметры-переменные: в процедуру передается не значение аргумента, а его адрес, и она работает с аргументом (теперь понятно, почему аргумент, соответствующий параметру-переменной, должен быть только именем переменной: он должен иметь адрес). Так что все изменения параметра на самом деле происходят с аргументом и известны в вызывающей процедуре.

Функция, в отличие от процедуры, всегда вычисляет некоторое значение скалярного типа, которое внутри функции должно быть присвоено имени функции. Заголовок функции имеет вид:

FUNCTION имя ( список параметров ) : тип ;

В остальном функции аналогичны процедурам. Обращение к функции осуществляется с помощью указателя функции:

имя ( список параметров )

Указатель функции может использоваться как и любое другое выражение того же типа, но это не оператор, в отличие от оператора вызова. Запишем пример функции:

FUNCTION Na3(x:LongInt):Boolean;

{ функция проверяет, делится ли x на 3 }

BEGIN Na3:=x MOD 3=0; END;

VAR L:LongInt;

BEGIN WRITE('Введите целое число '); READ(L);

WRITE('Число ',L);

IF NOT Na3(L) THEN WRITE(' не');

WRITELN(' делится на 3 !');

END.

В любой процедуре и функции можно использовать черезвычайно полезную стандартную процедуру Exit без параметров для немедленного выхода в вызывающую процедуру.

Все процедуры и функции Паскаля являются рекурсивными, то есть могут вызывать сами себя, никаких усилий со стороны программиста для этого не требуется. В качестве примера запишем функцию, вычисляющую n!

FUNCTION Factorial(n:Byte):Real;

BEGIN IF n<=1 THEN Factorial:=1

ELSE Factorial:=n*Factorial(n-1);

END;

Но это, конечно, очень плохая функция, гораздо лучше записать этот алгоритм так:

FUNCTION Factorial(n:Byte):Real;

VAR i:Byte; f:Real;

BEGIN f:=1; FOR i:=2 TO n DO f:=f*i;

Factorial:=f;

END;

Итак, мы знаем, что программа может содержать много процедур и функций, и в каждой из них могут быть описаны типы, константы и переменные. Но не все из них могут быть использованы в любом месте программы, каждое описание имеет строго определенную сферу действия. Пусть процедура А находится внутри процедуры В - условимся называть процедуру А внутренней по отношению к В, а процедуру В - объемлющей по отношению к А. Если же ни процедура А не находится внутри В, ни В не находится внутри А, то эти процедуры - внешние по отношению друг к другу. Сфера действия описания любого объекта включает ту процедуру, где он описан (начиная с места описания) и все внутренние процедуры, если там данный идентификатор не описан. В принципе, это дает возможность передавать информацию в процедуры и функции, минуя параметры, то есть пользоваться во внутренней процедуре переменными, описанными в объемлющей процедуре, но такой стиль программирования считается ненадежным. Старайтесь, если это возможно, все переменные, используемые в процедуре, описывать в этой процедуре.

Для чего нужны процедуры и функции, когда и как их следует применять? Многие начинающие программисты избегают процедур и функций, утверждая, что "без них проще". На самом деле обойтись без функций и процедур легко только в самых тривиальных программах. Сколько-нибудь сложная программа, записанная "одним куском", требует при отладке от программиста огромных усилий, которые зачастую все равно пропадают даром. Обязательно используйте в своих программах процедуры и функции! Хорошая программа должна содержать главным образом обращения к процедурам и функциям. Конечно, не существует никаких жестких правил, определяющих, когда использовать функции, а когда нет, но автор этой книжки может предложить несколько нестрогих, но полезных рецептов:

- выделяйте в процедуру (функцию) небольшой логически завершенный фрагмент алгоритма;

- не смешивайте в одной процедуре (функции) ввод-вывод данных и вычислительные алгоритмы;

- называйте свои процедуры (функции) мнемоническими именами;

- если алгоритм, который вы решили выделить в процедуру (функцию), все еще слишком сложен, оформите фрагмент этого алгоритма в другой процедуре (функции);

- если алгоритм должен вычислить одно скалярное значение, пусть это будет функция, а не процедура;

- если в вашей программе встречаются многократно вложенные циклы или "многоэтажные" условные операторы, это верный признак, что вам нужны процедуры (функции);

- если текст вашей программы не умещается на одном экране - подумайте о процедурах;

- используйте в процедурах и функциях процедуру Exit.

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита07:27:51 02 ноября 2021
.
.07:27:50 02 ноября 2021
.
.07:27:50 02 ноября 2021
.
.07:27:49 02 ноября 2021
.
.07:27:48 02 ноября 2021

Смотреть все комментарии (21)
Работы, похожие на Статья: Процедуры и функции в языке Паскаль. Сфера действия описаний

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

Да, в любом случае.
Да, но только в случае крайней необходимости.
Возможно, в зависимости от цены.
Нет, напишу его сам.
Нет, забью.



Результаты(294402)
Комментарии (4230)
Copyright © 2005 - 2024 BestReferat.ru / реклама на сайте