Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Обращение к функциям (вызов функций)
Синтаксически вызов функции не отличается от вызова процедуры:
Но вызов функции не является оператором. Обратиться к функции можно всюду, где допустимо использование значения типа, возвращаемого функцией. Обращение к функции может быть операндом в выражении, фактическим параметром-значением. Пример 3. Программа для проверки, упорядочена ли по невозрастанию данная целочисленная последовательность длиной не больше 100: Program sort_check; const MaxLen=100; type t_range =1.. MaxLen; t_vect= array[t_range] of integer; function is_sort(a: t_vect; n: t_range): boolean; {Логическая функция проверяет, упорядочена ли по невозрастанию последовательность a длины n} var i: t_ range; begin i:=2; while (i<=n) and (a[i-1]>=a[i]) do i:= i+1; is_sort:= i>n end; var i, n: t_range; a: t_vect; begin write(‘Введите длину последовательности£’, MaxLen); read(n); writeln(‘Введите члены последовательности’); for i:= 1 to n do read(a[i]); if is_sort(n, a) then writeln(‘ Последовательность упорядочена’) else writeln(‘ Последовательность неупорядочена’) end.
Побочный эффект функций
Основное назначение функции - возвращение значения в точку вызова, но функция так же, как и процедура, может изменять значения своих параметров-переменных. Такие функции называются функциями с побочным эффектом. Пример 4. Описание логической функции поиска элемента, равного x, в целочисленном массиве а длиной n £100. В качестве побочного эффекта параметру i присваивается номер первого из элементов, равных х. Используем типы, описанные в примере 3: function el_search(a: t_vect; n: t_range; x: integer; var i: t_range): boolean; begin i:=1; while (i<=n) and (x<>a[i]) do i:= i+1; el_search:= i<=n end;
Рекурсивные подпрограммы
В математике рекурсией называется способ описания функций или процессов через самих себя. Например, В некоторых языках программирования, в том числе и в Паскале, допустимо, чтобы подпрограмма вызывала себя. Такие подпрограммы называются рекурсивными. Рекурсивная подпрограмма обязательно удовлетворяет двум требованиям: 1) имеет нерекурсивный выход; 2) при каждом рекурсивном обращении задача упрощается, приближаясь к нерекурсивному решению. При решении некоторых задач можно использовать как рекурсивный, так и итеративный алгоритм. Преимущество рекурсивных подпрограмм заключается в простоте написания, легкости понимания. Обычно это касается задач, связанных с процессами, рекурсивными по своей природе. Но рекурсивные алгоритмы, как правило, менее эффективны из-за затрат времени на организацию стека. При каждом обращении в стеке запоминаются значения всех локальных переменных, параметров и коды возврата. Глубина рекурсии (количество обращений к себе) ограничена объемом памяти стека. При глубокой вложенности рекурсии может произойти переполнение стека.
Пример 5. Опишем рекурсивную и итеративную функцию для вычисления n!:
|
|||||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 159; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.129.100 (0.006 с.) |