
polevoy_cpp_2012_spring_lecture_12
.pdf
Генерация псеводслучайных чисел в диапазоне
•от 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 |