Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lesson_7 генератор_ инициализация массива.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
133.12 Кб
Скачать

Урок 7.

План занятия.

  1. Генератор случайных чисел.

  2. Двумерные массивы.

  1. Генератор случайных чисел

Ранее все наши значения мы вписывали сами, то есть заранее знали какими они будут. Такой способ заполнения переменных и массивов ограничивает возможности программы. Невозможно создать нечто, обладающее искуственным интеллектом, если нет способа получать данные не зависящие от пользователя. Что же делать, если нам необходимы значения, выбранные случайным образом?

Использование функции rand.

В языке С существует возможность сгенерировать случайное число. Для этой операции используется функция под названием rand(). Эта функция находиться в библиотечном файле - stdlib.h, следовательно для ее работы необходимо этот файл подключить с помощью диррективы #include. На место вызова rand() в программе, подставится случайное число в диапазоне от 0 до 32767.

i = rand( );

Рассмотрим пример использования rand( ):

#include <iostream>

#include<stdlib.h> // в этом файле содержится функция rand

using namespace std;

void main ()

{

int i= rand(); //генерация случайного числа и запись его в переменную i

cout<<i<<"\n";

i=rand(); //повторная генерация случайного числа и запись его в переменную i

cout<<i<<"\n";

cin.get();

cin.get();

}

Если вы создали проект, набрали и запустили наш пример на выполнение, то обнаружили, что программа последовательно сгенерировала два так называемых случайных числа. Вот эти неправда ли:

Запустите еще раз. И, снова - таже картина. Выходит, случайные числа - не случайны, кроме того они еще и повторяются от запуска к запуску

Функция rand() не получает число из воздуха, а работает, используя в качестве начальной точки – точку определенную при написании алгоритма генератора случайного числа, то есть некое постоянное число. Другими словами, опираясь на эту точку, при разных вызовах программы эта функция генерирует одно и то же число, в чём мы уже успели убедиться. Из этого можно сделать вывод: Для того, чтобы rand() при разных вызовах программы выдавал разные числа необходимо изменить начальную точку генерации.

Диапазон значений, которые непосредственно вырабатываются функцией rand, часто отличается от того, который требуется конкретному приложению. Например, программа, имитирующая бросание монеты, требует только двух значений: 0 — для «орла» и 1 — для «решки». Программе, имитирующей бросание игральной кости с шестью гранями, потребовались бы случайные числа в диапазоне от 1 до 6. Программе, которая случайным образом определяет тип следующего космического корабля (из четырех возможных), появляющегося на горизонте в видеоигре, потребовались бы случайные числа от 1 до 4.

Бросание игральной кости. Чтобы продемонстрировать rand, давайте разработаем программу, которая имитирует 20 бросков шестигранной игральной кости и печатает результат каждого броска. Прототип функции rand находится в <cstdlib>. Для того, чтобы выработать целые числа в диапазоне от 0 до 5, используем в сочетании с rand операцию взятия по модулю %:

rand () % 6

Это называется масштабированием. Число 6 называется масштабирующим коэффициентом. Затем мы смещаем диапазон чисел, прибавляя к полученному результату единицу. Окно вывода подтверждает, что результаты лежат в диапазоне от 1 до 6.

#include <iostream>

#include <iomanip>

#include<stdlib.h> //в этом файле содержится функция rand

using namespace std;

void main ()

{

for (int i=1; i<=20; i++)

{

cout << setw(10) << (1+rand()%6); //получить случайное число от 1 до 6 и вывести его

if ( i%5 == 0 ) // если counter делится на 5, начать новую строку вывода

cout << endl;

}

cin.get();

cin.get();

}

Вывод (Смещенные масштабированные числа, генерируемые выражением 1 + rand() % 6 )

6 6 5 5 6

5 1 1 5 3

6 6 2 4 2

6 2 3 4 1

Для продолжения нажмите любую клавишу . . .

Повторный запуск программы выводит также теже числа!

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

На самом деле функция rand генерирует псевдослучайные числа. Последовательные вызовы rand генерируют ряд чисел, которые кажутся случайными. Однако этот ряд повторяется при каждом запуске программы. Когда программа будет тщательно отлажена, ее можно будет модифицировать таким образом, чтобы при каждом выполнении получались различные последовательности случайных чисел. Это называется рандомизацией и достигается применением функции srand стандартной библиотеки C++. Функция srand получает целый аргумент типа unsigned и засевает функцию rand таким образом, чтобы при каждом запуске программы она генерировала новую последовательность случайных чисел.

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