Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 13_Комбинация функций, определяемых пользователем

.pdf
Скачиваний:
31
Добавлен:
14.03.2016
Размер:
185.32 Кб
Скачать

Лекция №12. Комбинация функций, определяемых пользователем

Дерево вызова функций

Последовательный вызов функций с зависимостью по данным

Вызов одной функции из другой

Последовательный вызов функций без зависимости по данным

Комбинация вызовов функций

1

Взаимодействие функций в программе

Функция ― это обособленный участок кода со своим набором переменных и операций, к которым другая функция не имеет непосредственного доступа

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

При вызове функции обмениваются между собой данными ― в функцию поступают входные данные,

2а из функции ― выходные

Дерево вызова функций

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

Узлом дерева является функция

Дуга в дереве показывает, что одна функция вызывает другую (количество вызовов не имеет значе-

ния)

функция 1

функция 2

функция 3

3

Задание

Нарисовать дерево вызова функций для следующей программы (стандартные функции включать в дерево функций)

int _tmain(int argc, _TCHAR* argv[])

{

const int N = 5;

//

кол-во элементов массива

int vector[N];

//

сам массив

// Вводим массив

for( int i = 0; i < N; i++ ) { scanf("%d", vector+i); }

4.........

Задание

.........

// Печатаем исходный массив printf("\nSource array:\t\t"); printArr(vector, N);

// Упорядочиваем массив sortArr(vector, N);

// Печатаем упорядоченный массив printf("\n\nArray after sort:\t"); printArr(vector, N);

return 0;

}

5.........

Задание

.........

/*!

*Печать массива

*\param [in] arr - массив

*\param [in] length - длина массива

*/

void printArr(const int arr[], int length)

{

for(int i = 0; i < length-1; i++)

{

printf("%d, ", arr[i]);

}

printf("%d", arr[length-1]);

}

6 .........

Задание

.........

/*! Упорядочивание массива по возрастанию

*\param [in|out] arr - массив

*\param [in] length - длина массива */ void sortArr(int arr[], int length)

{

for(int i = 0; i < length-1; i++)

{

for(int j = i+1; j < length; j++)

{ // Меняем i-й элемент с j-м, если j-й меньше i-го if(arr[j] < arr[i]) { swap(arr+i, arr+j);}

}

}

}

7.........

Задание

.........

/*!

*Обмен значениями двух переменных

*\param [in|out] a,b - переменные, значения которых обмениваем */

void swap(int *a, int *b)

{

int tmp; // буфер для обмена значений

tmp = *a; *a = *b; *b = tmp;

8 }

Дерево вызова функций

main

scanf

printf

printArr

sortArr

printf swap

Библиотечные функции

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

9

Комбинация функций, определяемых пользователем

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

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

Выделяют три основных способа комбинации функций:

1)последовательный вызов функций с зависимостью по данным

2)последовательный вызов функций без зависи-

 

мости по данным

10

3) вызов одной функции из другой