русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ФУНКЦИИ


Дата добавления: 2015-06-12; просмотров: 618; Нарушение авторских прав


 

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

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

Таким образом, общий вид описания функции сле­дующий:

Function Имя[(Список формальных

параметров)]: Тип

результата;

Описательная часть

Begin

Тело функции, в котором обязательно

должно быть присваивание

Имя функции:=значение

End;

Пример 1

Составить программу, подсчитывающую число соче­таний без повторения из n элементов по k.

Число сочетаний без повторения вычисляется по формуле:

Обозначим через n и k переменные для хранения введенных чисел; c − переменную для хранения ре­зультата.

Чтобы подсчитать количество сочетаний без повто­рения, необходимо вычислить n!, (n-k)!, k!

Опишем функцию для вычисления факториала чис­ла

n(n!= 1•2•...•n).

Function factorial(n:Integer):Longint;

{заголовок функции}

Var i: Integer; {описательная часть}

rez: Longint;

Begin {тело функции}

rez:=1;

For i:=1 To n Do rez:=rez*i;

factorial:=rez;

{присваивание значения имени функции}

End;

Первая строчка в описании функции − это ее заголо­вок. Служебное словоFunction (функция) указывает на то, что именем factorial названа функция. В скоб­ках записан список формальных параметров функции, состо­ящий из одной переменной целого типа. Далее в заголовке указан тип значения функции. В данном примере резуль­тат функции factorial − длинное целое число.

За заголовком функции следует описательная часть функции, которая, как и у программы, может состоять из разделов описания переменных, констант, типов. В данном примере имеется только раздел описания пере­менных. В нем описаны переменные i (счетчик цикла) и rez (для накопления значения факториала).



Далее идет раздел операторов (тело функции). Ре­зультат присваивается имени функции, таким образом функция получает свое значение.

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

Program Example_73;

Var n, k: Integer;

a1, a2, a3, c: Longint;

Function factorial (n:Integer): Longint;

Var i: Integer;

rez: Longint;

Begin

rez:=1;

For i:=1 To n Do rez:=rez*i;

factorial:=rez;

End;

Begin

Writeln('Ввод n и k:');

Readln(n,k) ;

a1:=factorial(n); {вычисление n!}

a2:=factorial(k); {вычисление k!}

a3:=factorial(n-k);{вычисление(n-k)!}

c:=a1 div (a2*a3) ; {результат}

Writeln(c);

Readln;

End.

 

Пусть n=5, k=3. Когда в программе встречается оператор a1:=factorial(n), выполняются следующие действия:

¨ выделяется память для переменных, описанных в функции factorial;

¨ формальному параметру присваивается значение фактического: n:=n (n=5);

¨ выполняется функция, вычисляется факториал числа 5;

¨ значение функции передается в место обращения к этой функции, то есть присваивается переменной а1.

В операторах a2:=factorial(k) и a3:factorial(n-k) еще дважды вызывается функция factorial с пара­метрами k=3 и n-k=2. Всего в программе имеется 3 обращения к функции factorial, столько же раз выполняются и описанные выше действия.

Еще раз подчеркнем, что функция − это самостоя­тельная часть программы, имеющая собственные пере­менные, которым отводится отдельное место в памяти ЭВМ. Этим объясняется тот факт, что переменные с одинаковыми именами, используемые в функции и в ос­новной программе, являются разными (в рассмотрен­ном примере - переменная n основной программы и параметр n функции). При выполнении программы машина "не путает" имена этих переменных, так как области их действия не совпадают.

Это особенно важно при написании больших про­грамм.

Пример 2

Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, в каком из двух данных чисел больше цифр.

Решение

Мы уже решали похожую задачу, только в ней не требовалось написать функцию.

Надо выделять последнюю цифру числа до тех пор, пока число не станет равным нулю. При этом каждый раз счетчик увеличивается на 1 (начальное значение счет­чика − 0).

Function Quantity(x: Longint): Byte;

Var k: Byte;

Begin

k:=0;

While x <> 0 Do

Begin

Inc(k) ;

x:=x div 10;

End;

Quantity:=k;

End;

В заголовке функции указано ее имя − Quantity. Функции передается только один параметр − целое число, количество цифр которого надо найти. Результат − тоже целое число. В разделе переменных описана перемен­ная k − счетчик цифр. В теле функции с помощью цикла While выполняются указанные выше действия (увели­чивается значение счетчика и удаляется последняя цифра).

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

Program Example_74;

Var n1, n2: Longint;

k1, k2: Byte;

Function Quantity(x: Longint): Byte;

Var k: Byte;

Begin

k:=0;

While x<>0 Do

Begin

Inc(k) ;

x:=x div 10;

End;

Quantity:=k;

End;

Begin

Writeln('Введите два числа');

Readln(n1, n2);

k1:=Quantity(n1);

{количество цифр первого числа}

k2:=Quantity(n2);

{количество цифр второго числа}

If k1=k2 Then

Writeln('Одинаковое количество цифр')

Else If k1>k2 Then

Writeln('В первом числе цифр больше')

Else

Writeln('Во втором числе цифр

больше');

Readln;

End.

Пример 3

Составьте программу решения неравенства bn≤a≤bn+1 относительно n при условии a≥1, b>1.



<== предыдущая лекция | следующая лекция ==>
Решение | Решение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.401 сек.