КАТЕГОРИИ: Архитектура-(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) |
Функции. Если одна подпрограмма использует другую, а та, в свою очередь, использует первую, возникает проблема размещения этих процедур в программе
Директива forward Вложенные процедуры Если одна подпрограмма использует другую, а та, в свою очередь, использует первую, возникает проблема размещения этих процедур в программе. Какую из них поместить в программе первой? В этих случаях прибегают к директиве forward. Например: procedure pp1(a,b:integer):forward; procedure pp2(c: real); {Вторая процедура} var x,y:integer; begin … pp1(x, y); end; procedure pp1; {Первая процедура} var z:real; begin … pp2 (z); end; … Задача. Задан одномерный массив вещественных чисел. Найти максимальный элемент массива и определить его номер. Составим программу с использованием двух процедур: процедура ввода элементов массива; процедура поиска максимального элемента и определение его номера. Для передачи массива в процедуру введем пользовательский тип mas. program PP; type mas=array[1..100] of integer; {пользовательский тип} var { глобальные переменные } a:mas; max:real; n,max,kmax:integer; procedure input_mas(n:integer; var a:mas); var i:integer; {локальная переменная} begin for i:=1 to n do readln(a[ i ]); end; procedure max_m(n:integer; a:mas; var max,kmax:integer); var i:integer; begin max:=a[1];kmax:=1; for i:=1 to n do if a[i]>max then begin max:=a[i]; kmax:=i; end; end; begin writeln(‘ Введите n<=100’); readln(n); writeln (‘ Введите элементы массива ‘); input_mas(n,a); max_m(n,a,max,kmax); writeln(‘max=’,max,‘kmax=’,kmax); readln; end. Если результатом подпрограммы является только одно значение, то имеет смысл оформить такую подпрограмму в виде функции. Первая строка любой функции: function <имя >(<список формальных параметров>):<тип>; <список формальных параметров> – список имен переменных с указанием их типа, передающих информацию в функцию; <имя> возвращает результат в основную программу; <тип> – тип возвращаемого результата. Обращение из основной программы к функции возможно в структуре какого-либо оператора, например оператора присваивания: <переменная>:= <имя> (список фактических параметров); Функция возвращает в основную программу только один результат через переменную, являющуюся именем функции. Эта переменная не должна быть описана в основной программе. В описательной части функции этой переменной должно быть присвоено какое-либо значение, иначе функция не возвращает никакого значения. Задача. Составить программу вычисления n! с использованием функции. n! = 1* 2 * 3 * …* n program factorial; {описательная часть основной программы} var n,k:integer; function fun(k:integer):integer; {описательная часть подпрограммы} var p,i:integer; begin {исполнительная часть подпрограммы} p:=1; for i:=1 to k do p:=p*i; fun:=p; end; {исполнительная часть основной программы} begin writeln('введите n'); readln(n); for k: = 1 to n do writeln(fun(k)); end. n, k – глобальные переменные. p, i – локальные переменные. fun – имя функции, возвращает результат в основную программу. Имя функции в теле функции в операторах присваивания может стоять только слева от знака «:=», поэтому использована дополнительная переменная p для подсчета произведения.
Дата добавления: 2014-12-27; Просмотров: 408; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |