Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
s__ekzamen.docx
Скачиваний:
8
Добавлен:
18.12.2018
Размер:
113.34 Кб
Скачать

22. Формальные и фактические параметры.

Формальные параметры - это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.

Фактические параметры - это реальные объекты программы, заменяющие в теле процедуры при ее вызове формальные параметр.

Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количество параметров, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группы, разделенные точками с запятыми. В группу формальных параметров включаются однотипные параметры одной категории.

Все формальные параметры можно разбить на четыре категории:

- параметры-значения (эти параметры подпрограмма может изменить в основной подпрограмме);

- параметры-переменные (эти параметры подпрограмма может изменить в основной программе);

- параметры-константы (только в версии 7.0);

- параметры-процедуры и параметры-функции (т.е. процедурного типа).

Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы - категорию. Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае параметр основной программы с таким именем становится недоступным для непосредственного использования подпрограммой. Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип.

Например, нельзя писать

Function SUMM (A: array[1..100] of Real): Real;

Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:

Type aArr = array[1..100] of real;

Function SUMM (A: aArr): Real;

При обращении к подпрограмме формальные параметры заменяются на соответствующие фактические вызывающей программы или подпрограммы.

23. Функции.

Функция - независимая совокупность объявлений операторов, обычно предназначенная для выполнения определенной задачи.

Объявление представляет собой заголовок функции. В этом заголовке должны быть указаны:

1. Тип возвращаемого функцией значения;

2. Имя функции (идентификатор);

3. В круглых скобках типы и имена формальных параметров;

4. Объявление заканчивается ‘;’.

- определение. Включает в себя заголовок и блок (‘;’ после блока не ставится). Внутри блока находятся описания локальных переменных и код реализации функции (т.е. действия). Блок заключается в фигурные скобки.

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

Функции в С++ равноправны, любая функция может быть вызвана из любой другой, допускается рекурсивный вызов функций .

Функция main представляет собой точку входа в программу (т.е. ее компилятор запускает первой).

Для возврата результата функции используется зарезервированное слово return с последующим выражением, которое подсчитывается и его результат ставится в соответствие вызову функции .

Объявление функции без тела программы называется прототипом.

int IfRus(char c)

Общий формат определения функций:

[спецификатор типа] Имя [(список параметров)]

Если спецификатор типа не используется, то считается, что функция возвращает int

Список параметров - последовательность объявлений формальных параметров, разделенных запятыми.

Формальные параметры - переменные, которые принимают значения, переданные функции во время вызова.

Имя(, …) - у функции переменное число аргументов.

Однако для таких функций предполагается, что функция имеет по крайней мере столько аргументов, сколько формальных параметров задано перед , …

Если функция не возвращает значений, то спецификатор типа = void

Общий формат вызова функции:

выражение ([список выражений])

Рекурсивные вызовы.

Любая функция может быть вызвана рекурсивно, то есть она может вызывать саму себя.

Компилятор допускает любое число рекурсивных вызовов. Параметры, предшествующие незавершенным рекурсивным вызовам, недоступны.

long Fact(int n)

{Return (n<=1)?1: n*Fact(n-1);}

Вызов функции с переменным числом аргументов.

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

va_start, va_arg, va_end, va_list

int average (int first

{int count=0, sum=0, i=first;

va_list marker;

va_start (marker,first);

while (i:=-1)

{ sum+=i; count++;

i=va_arg(marker,int); }

va_end(marker); return (sum?(sum/count):0);}

int A

A=average(1,2,3,4,-1)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]