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

Установка диапазона для генератора.

Числа, которые получаются путем вызова функции rand, находятся в диапазоне от 0 до 32767. Но, ведь нам не всегда требуется такой масштабный разброс данных. Что делать, если необходимо генерировать числа от 0 до 10 или от 0 до 100 и так далее?! На помощь, в таких случаях, приходит старое, доброе - деление по модулю.

Возьмем для примера произвольное число - 23. Согласитесь, что какое бы число вы не разделили на 23 по модулю, вы получите либо 0 (если остатка нет), либо остаток в диапазоне от 1 до 22. Этим свойством мы и воспользуемся, разделив сгенерированное случайное число по модулю:

int a=rand()%23;

На основании этого правила можно вывести формулу:

ЧИСЛО В ДИАПАЗОНЕ ОТ НУЛЯ ДО Х-1:

rand() % X

ЧИСЛО В ДИАПАЗОНЕ ОТ НУЛЯ ДО Х:

rand() % X+1

Но, диапазон не всегда начинается с нуля. Пусть нам необходим диапазон от 11 до 16. Все просто. Необходимо сгенерировать числа от 0 до 5 (разница между 16 и 11), а потом "сдвинуть" полученный результат на 11 единиц.

int a=rand()%5+11;

И, на основании уже модифицированного правила можно вывести формулу:

ЧИСЛО В ДИАПАЗОНЕ ОТ Y ДО Х:

rand() % (X+1-Y) + Y

for (i = 0; i < N; ++i)

{// Случайное число из интервала [0,1]

r = (float) rand()/RAND_MAX;

// Формирование случайного числа из заданного интервала

R = Left + (Right - Left) * r;

// Заполнение массива случайными числами

A[i] = R; }

Вложенные циклы и двумерные массивы

Ранее в этой главе вы уже видели, что цикл for — это естественный инструмент для обработки массивов. Теперь мы сделаем еще один шаг и посмотрим, как цикл for, внутри которого находится еще один цикл for (вложенные циклы), может применяться для обработки двумерных массивов.

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

В C++ не предусмотрен специальный тип представления двумерных массивов. Вместо этого создается массив, каждый элемент которого является массивом. Например, предположим, что требуется сохранить данные о максимальной температуре в четырех городах за четырехлетний период. В этом случае можно объявить массив следующим образом:

int maxtemps[4][5];

Это объявление означает, что max terms является массивом из четырех элементов. Каждый из этих элементов сам является массивом из пяти элементов (рис. 5.5). Массив max terms можно интерпретировать как представление четырех строк, по пять значений температуры в каждой.

int maxtemps[4][5]; maxterms — массив из четырех элементов, каждый элемент — массив из 5 значений int

Первый индекс можно представлять как строку таблицы, а второй — как ее столбец.

0

1

2

3

4

maxtemps[0] 0

maxtemps[0][0]

maxtemps[0][1]

maxtemps[0][2]

maxtemps[0][3]

maxtemps[0][4]

maxtemps[1] 1

maxtemps[1][0]

maxtemps[1][1]

maxtemps[1][2]

maxtemps[1][3]

maxtemps[1][4]

maxtemps[2] 2

maxtemps[2][0]

maxtemps[2][1]

maxtemps[2][2]

maxtemps[2][3]

maxtemps[2][4]

maxtemps[3] 3

maxtemps[3][0]

maxtemps[3][1]

maxtemps[3][2]

maxtemps[3][3]

maxtemps[3][4]

Предположим, что требуется распечатать все содержимое массива. В этом случае можно использовать цикл for для прохода по строкам и второй вложенный цикл for — для прохода по столбцам:

for (int row = 0; row < 4; row+ + )

{

for (int col = 0; col < 5; ++col)

cout << maxtemps [row] [col] << "\t";

cout << endl;

}

Для каждого значения row вложенный цикл for проходит по значениям col. Этот пример печатает символ табуляции (\t в нотации управляющих символов C++) после каждого значения и символ новой строки после каждой полной строки.

Многомерный массив может быть инициализирован при объявлении, во многом подобно одномерному массиву. Например, двумерный массив b со значениями 1 и 2 в строке 0 и значениями 3 и 4 в строке 1 можно инициализировать объявлением

int b[ 2 ] [ 2 ] = { { 1, 2}, { 3, 4 } };

Значения группируются в фигурных скобках построчно. Таким образом, 1 и 2 инициализируют соответственно b[ 0 ][ 0 ] и b[ 0 ][ 1 ], а 3 и 4 — соответственно b[ 1 ][ 0 ] и b[ 1 ][ 1 ]. Если для некоторой строки инициализаторов недостаточно, оставшиеся элементы строки инициализируются нулями. Следовательно, объявление

int b[ 2 ][ 2 ] = { { 1}, { 3, 4 };

инициализирует b[ 0 ][ 0 ] значением 1, b[ 0 ][ 1 ] значением 0, b[ 1 ][ 0 ] значением 3 и b[ 1 ][ 1 ] значением 4.

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