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

polevoy_cpp_2012_spring_lecture_12

.pdf
Скачиваний:
12
Добавлен:
20.04.2015
Размер:
203 Кб
Скачать
☆

Генерация псеводслучайных чисел в диапазоне

•от 0 до n - 1 rand() % n

•от n1 до n2 - 1

n1 + (rand() % (n2 – n1))

28.04.2012

cppNewb.ru

31

Инициализация генератора псевдослучайных чисел

•определяет начальное значение (seed) для последовательности

•используется для улучшения качества

псевдослучайной последовательности

•в качестве начального значения используется некоторое “случайное” значение

28.04.2012

cppNewb.ru

32

Текущее время (time)

time_t time(time_t* timer);

•текущее время

•число секунд с 00:00, 1 января 1970 UTC

•аргумент м.б. 0

пример:

srand(static_cast<unsigned int>(time(0)));

28.04.2012

cppNewb.ru

33

Рекурсия

•вызов функции из неё же самой, непосредственно (простая рекурсия) или через другие функции

(сложная или косвенная рекурсия)

•в С++ « использует» стек вызова

•может заменятся циклом

–возможно с использованием стека

28.04.2012

cppNewb.ru

34

Рекурсия (плюсы и минусы)

•естественный способ (вычислений)

•простота организации и наблюдения

•зацикливания и переполнения стека

–сложность соблюдения допустимой « глубины»

–сложность косвенной рекурсии

•использовать не рекомендуется

28.04.2012

cppNewb.ru

35

Пример использования рекурсии

/**

рекурсивное вычисление факториала

*/

int factorial(const int n)

{

return n ? (n * factorial(n - 1)) : 1;

}

28.04.2012

cppNewb.ru

36

Указатель на функцию

ТипВозврата (*имя)(список_аргументов)

пример:

bool (*pCmp)(const int, const int)(0); pCmp = compareByIdx;

pCmp(i1, i2); // или (*pCmp)(i1, i2)

28.04.2012

cppNewb.ru

37

Функция обратного вызова

(call back function)

•передача исполняемого кода в качестве одного из параметров другого кода

•позволяет

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

–определять конкретный алгоритм на этапе выполнения (а не компиляции) программы

28.04.2012

cppNewb.ru

38

Функция обратного вызова (назначение)

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

•“ телефонная связь”, используемая для того, чтобы “связываться” с тем, кто вызвал процедуру, при наступлении какого-то события

28.04.2012

cppNewb.ru

39

Сортировка (qsort)

void qsort(void* base, size_t num,

size_t size,

int (*cmp)(const void*, const

void*));

•сортировка num блоков памяти размера size в массиве base

•для сравнения используется функция cmp

28.04.2012

cppNewb.ru

40