КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Структура подпрограммы
План заняття 1. Поняття структури підпрограми 2. Поняття заголовку підпрограми 3. Передача параметрів по назві та значенню 4. Параметри константи 5. Параметри результати
Список параметров содержит параметры, каждый из которых представляет собой про-извольное имя переменной и соответствующий ей тип через двоеточие. Если несколько параметров имеют одинаковый тип, то их можно перечислить через запятую.
Список параметров может быть опущен. Для некоторых параметров могут быть заданы значения по умолчанию (все параметры с такими значениями должны располагаться вместе и после параметров, для которых не задано значений по умолчанию). procedure МуРгос В подобных случаях заключительные параметры при вызове процедуры можно опускать — они получат значения по умолчанию. МуРгос(1, 2); Реально процедура вызывается с тремя параметрами, как если бы использовался следующий оператор. МуРгос(1, 2, 2); Передача параметров по имени и по значению В списке параметров перед любой переменной разрешается указывать ключевое слово var. Тогда считается, что данный параметр будет передаваться по имени: то есть копирования значения не происходит, а вместо формального параметра подставляется имя переменной — фактического параметра. (Отсюда следует, что в качестве фактических параметров, подставляемых вместо формальных параметров с ключевым словом var, можно применять только имена переменных.)
Параметр X будет передаваться по значению, параметр Y — по имени. При вызове MyProc(2+2, N); операторы в теле процедуры MyProc будут обрабатывать локальную переменную X, имеющую значение 4 (2+2), и переменную Y, которая на самом деле является переменной N из другой части программы. На «физическом» уровне произойдет просто подстановка адреса переменной N. Использование слова var в списке параметров по способу действия аналогично использованию указателя. При этом, если в теле процедуры значение переменной X будет меняться, то по окончании работы MyProc эта локальная переменная будет удалена из памяти (до следующего вызова процедуры), а вот если произойдет изменение значения переменной Y, то изменится и значение переменной N. Это потенциально чревато ошибками, так как разработчик может не рассчитывать на то, что во время работы подпрограммы произойдет изменение значения одного из ее параметров. В данном случае переменная Y является не чем иным, как указателем на переменную N, только описан он немного иначе: не с помощью операции Л, а как обычная переменная. Следует избегать передачи параметров по имени за исключением случая, когда тре-буется передать в подпрограмму данные большого объема. Например, если описан тип type TBigArray = array [1..100000] of string[50]; то передавать переменную этого типа по значению очень неэффективно, особенно если вызов подпрограммы происходит часто, потому что при этом требуется копировать большие объемы данных. То есть описание procedure Sum(A: TBigArray);
Правильнее написать так: procedure Sum(var A: TBigArray); При этом надо проследить, чтобы изменения элементов массива А внутри процедуры Sum не происходило (если этого не требует логика ее работы). Параметры-константы procedure Sum(const A: TBigArray);
Если заголовок процедуры описан так: procedure Sum(out A: TBigArray); то в теле процедуры Sum можно указывать операторы присваивания А[10000]-:= 'num172855'; но нельзя считывать значения элементов массива А: х:= А[2] * 2; // нельзя!
Потребность в этом хоть и редко, но все же возникает. Например: type Tl = array [1..2] of Byte; var Al: Tl; A2: array [1..2] of Byte; Переменные Al и A2 относятся к разным типам, хотя физически (в оперативной памяти) они представлены одинаково. Поэтому переменную А2, обычный массив, можно преобразовать (привести) к типу Tl:Tl(А2) Такая запись аналогична простому обращению к имени массива А2, только при этом считается, что он имеет новый тип Tl. К элементам массива нового типа можно обращаться, как и раньше, с помощью квадратных скобок: ТКА2) [1]
Паскаль позволяет указывать в заголовке подпрограммы параметры без типов (но с предшествующим словом const, var или out). Переменная А в таком случае считается не имеющей никакого типа, и ее нельзя использовать ни в каких выражениях или операторах, не выполнив предварительно преобразование — приведение к нужному типу.
Строки можно описывать, как уже говорилось ранее, двумя способами: просто как тип string, или как тип string с конкретной длиной строки в квадратных скобках. Однако указывать строки фиксированной длины в качестве параметров подпрограмм нельзя. Их сначала надо описать как новый тип. procedure Sum(S: string [50]); // неверно! Правильно написать так: type string50 = string [50]; procedure Sum(S: string50);
Дата добавления: 2014-12-25; Просмотров: 692; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |