|
||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[17] Procedure Name P(p1, p2,...: "тип"; Var p3, p4,...: "тип";...); Заголовок функции состоит из служебного слова Function, имени функции и списка параметров, кроме того указывается тип возвращаемого функцией значения, например: Function Name F("список формальных параметров"):"тип результата"; Здесь Function и Procedure - служебные слова, Name F, Name P - имена функции и процедуры соответственно, p1, p2 - имена формальных параметров-значений, p3, p4 - имена формальных параметров-переменных, . . . - многоточие означает возможность перечисления большего числа параметров. В дальнейшем, если не оговаривается особо, все сказанное к процедуре относится также и к функции. Тип возвращаемого функцией значения может быть простым, строковым или типом-указателем. Тип формальных параметров может быть любым, но должен указываться только идентификатором (именем типа). Таким образом, имя типа формального параметра -массива должно быть задано предварительно в операторе Type, например: Type M= array[1..100]of real; Затем тип массива может указываться в заголовке процедуры, например: Procedure Name P(p: M); Тип формальных параметров описывается только в заголовке процедуры. Список формальных параметров может отсутствовать, например. процедура Randomize; не имеет параметров. Если в результате выполнения нескольких операторов получается одно значение переменной, то эти операторы можно включить в описание функции. Например, функция Sin(x); возвращает значение, которое присваивается переменной Y:=sin(x); (эта, и другие стандартные функции описаны в модуле System, который подключается к программе автоматически). Если в результате выполнения нескольких операторов производится некоторое действие или расчет нескольких переменных, то эти операторы лучше включить в описание процедуры. Например, процедура ClrScr; из модуля CRT очищает экран. Вызов процедуры осуществляется в разделе выполнения основной программы или других процедур (вложенные процедуры). Программа (процедура) внутри которой вызывается другая процедура называется внешней по отношению к вызываемой процедуре. При вызове процедуры вместо формальных параметров подставляются фактические параметры, значения которых используются в процедуре. Например: Name P(p11, p22,..., p33, p44,...); - вызов процедуры Name P, Y:= Name F(" список фактических параметров"): - вызов функции Name F, Здесь p11, p22, . . . - имена или значения переменных, p33, p44, . . . - имена переменных, значения которых возвращаются в программу. Y - переменная, которой присваивается значение возвращаемое функцией. Типы соответствующих формальных и фактических параметров должны совпадать, а имена могут совпадать или быть различными. Вместо параметров- значений можно подставлять имена переменных, значения переменных или выражения, вместо параметров- переменных подставляются имена переменных. Функция и параметры-переменные возвращают во внешнюю программу значения, полученные после окончания работы функции или процедуры. Изменения параметров- значений в процедуре носит локальный характер, во внешней программе соответствующие фактические параметры не изменяются. Если не требуется передавать во внешнюю программу новые значения, то следует использовать параметры-значения, а не параметры- переменные. В процедуре можно использовать локальные метки, константы и переменные, описав их в разделе описания процедуры. Локальные имена не должны совпадать с именами формальных параметров, а их значения не передаются во внешнюю программу. Метки, константы и переменные, описанные во внешней программе раньше, чем сама процедура, называются глобальными по отношению к вызываемой процедуре. Если локальные и глобальные имена совпадают, то в процедуре используются локальные значения, а во внешней программе - глобальные значения, т. е. локальные и глобальные идентификаторы независимы. Если имя глобальной переменной уникально (в процедуре не описывается переменная с таким же именем) и ее значение в процедуре изменяется, то оно изменяется и во внешней программе. Вызывая в программе процедуру программист использует ее имя и параметры не анализируя, а часто и не зная содержимого процедуры. Поэтому в целях универсальности процедур следует все значения в процедуру передавать через список параметров, а переменные внутри процедуры описывать, т. е. делать их локальными. Приведем пример процедуры вывода на экран визитной карточки программиста. Program NP 1; Var Dat, Fam: string; { Fam: глобальная переменная } Procedure VIZ(D R :string);{ D R - формальный параметр } Var S t: string;{ S t: локальная переменная } Begin Writeln( Разработчик программы:, Writeln( Writeln( Writeln( Writeln( Writeln( г. УФА, Телефон: Fam:14, D R:14, 22-44-66 Комментарий: ); Readln(S t) end; Begin Fam:=И.И.Иванов; Dat:=06.12.95 VIZ(Dat); { вызов процедуры } ; {Dat - фактический параметр } Readln END. Если процедура описана в другом файле с именем, например, F PR. pas, то ее можно подключить к программе, указав в разделе описания директиву: {$I F PR. pas} Приведем пример использования стандартных процедур модуля DOS для вывода текущей даты и времени: uses DOS;{ подключение модуля DOS } Procedure Date Time; var y, m, d, d w:word; h, min, sec, hund: word; {локальные параметры } begin GetDate(y,m,d,d w); { вызов процедуры DOS, возвращающей параметры даты } GetTime(h,min,sec,hund); { процедура, возвращающая параметры времени } writeln(сегодня: ); writeln( :10, d, число); writeln( :10, m, месяц); writeln( :10, y, год ); writeln(день недели: , d w );{ d w= 0 - воскресенье, и т. д. } writeln(Время: );
Begin Date Timeend. В практических задачах часто пишутся процедуры, возвращающие значения элементов массивов. Приведем пример процедуры расчета "N" значений функции, например, Y= 4*Sin(x)+7*Cos(x); в заданном диапазоне x1<=x<=x2, при N<=100 и равномерной разбивке диапазона. type r 1000= array[1. . 1000] of real;{ задается тип r 1000 } var Z: r 1000; x1, x2: real; n: word; Procedure Mas Y(var Y:r 1000; x1,x2:real; n:word); {Y - параметр- переменная} var i: word; x, dx: real;{ локальные параметры } If (n>1000) or (n<2) then begin writeln(Длина массива >1 и не должна превышать 1000); Readln; Haltend; i:=0; x:=x1; dx:=(x2-x1)/(n-1); { dx - шаг изменения аргумента } If dx<= 0 then begin writeln(x2 должно быть больше x1); Readln; Halt end; While x<x2 do begin i:=x:= x1 + dx*(i-1); Y[i]:= 4*Sin(x)+7*cos(x) end end; begin Writeln(Введите значения х1,х2, (x2>x1)); Readln(x1, x2); Writeln(Введите значение 1 <n<= 1000 ); Readln(n); Mas Y(Z, x1, x2, n);{ вызов процедуры, возвращающей массив "Z" } Здесь тип формального параметра "Y" задается в разделе описания типов внешней программы и совпадает с типом фактического параметра "Z", значения элементов которого возвращаются во внешнюю программу. Оператор Halt прерывает выполнение всей программы, даже если он используется внутри процедуры. Применение оператора Exit внутри процедуры вызывает прерывание процедуры, но не внешней программы. Приведем пример процедуры вывода массива чисел в файл: Type И 30х30 г= array[1..30, 1..30] of real; { задается тип M 30х30 r } var x: И 30х30 г; i, j, n, m: byte; {---------------------------------------------------------------- } Procedure Wr M(a: И 30х30 г; name f: string; n, m: byte); Var i, j: byte;{ a - массив NxM, n<=30, m<=30 } f: text;{ name f - имя файла } begin assign(f, name f); rewrite(f); For i:= 1 to n do begin writeln(f); For j:= 1 to m do write(f, a[i,j]:6:2) end; close(f) |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||||||||||||