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

27…Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.

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

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

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

Если значение какого-то локального параметра необходимо сохранить между вызовами, то этот параметр нужно описать статически (static int n=0). Такая статическая переменная сохраняется не в стеке, а в сегменте данных и инициализируется один раз при первом обращении к подпрограмме.

Глобальные параметры описываются вне функций, в том числе и вне main, поэтому они видны во всех функциях программы и могут использоваться для передачи данных между всеми функциями. Если имена глобальных и локальных параметров совпадают, то внутри функций локальные переменные «заменяют» глобальные, а после выхода из функции значение глобальной переменной восстанавливается. Однако с помощью операции доступа к области видимости (::) можно получить доступ к одноименной глобальной переменной.

28…Передача параметров массивов в подпрограмму, примеры.

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

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

Если требуется запретить изменение параметров внутри функции, то перед этими параметрами ставится const.

Если размерность массива постоянна и известна, то передача массива в качестве параметра реализуется следующим образом

# include <iostream.h>

const int n=2;

int sum (int mas[n][n], const int n) {

int s=0;

for (int i=0; i<n; i++)

for (int j=0; l<n; j++)

s+=mas[i][j];

return s;

}

int main ( ) {

int x[n][n]={1,2,3,4}; int y[n][n];

cout<<”введите массив\n”;

for (int i=0; i<n; i++)

for (int j=0; j<n; j++)

cin>>y[i][j];

cout<<”сумма элемнтов массива x:”<<sum(x,n)<<”\n”;

cout<<”сумма элемнтов массива y:”<<sum(y,n)<<”\n”;

return 0;

}

29…Рекурсивные функции, примеры.

Рекурсия (от recursion – возвращение)– самовложение, определяющее объект или явление, внутри которого содержится подобный ему объект или явление.

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

n!=1 при n=0 и n!=1*2*3*…*n при n>0

это итерационное (итеративное) определение

n!=1 при n=0

n!=(n-1)!*n при n>0 – определение рекурсивное

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

long fact (long n) {

if (n==0 || n==1) return 1;

return n*fact (n-1);

}

long fact (long n) {

return (n>1)? n*fact(n-1):1;

}

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