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

5.4. Определение числа элементов массива

Массивы относятся в языке C++ к ссылочным типам. Это означает, что содержимое массива хранится в оперативной памяти в виде набора значений, доступ к которым организован с помощью указателя (имени массива), который лишь указывает на массив, но не хранит его непосредственно. Стандартный оператор sizeof применительно к массиву возвращает его длину в байтах. Зная тип элементов массива, можно определить число его элементов по формуле

sizeof(имя-массива)/sizeof(тип-элемента-массива)

Например:

int mуАггау[] = { 1, 2, 4, 8, 16 };

Значение sizeof (mуАггау) /sizeof (int) будет равно 5. Если тип массива быстро определить не удается, вместо типа можно ввести имя любого из элементов:

sizeof(mуАггау)/sizeof(mуАггау[0]).

5.5. Операции с массивами

Типичными операциями при работе с массивами являются:

  • вывод массива;

  • ввод массива;

  • поиск максимального или минимального элемента массива;

  • поиск заданного элемента массива;

  • сортировка массива.

При демонстрации операций с массивами очень часто используются случайные числа. Поэтому изучение операций с массивами начнем с примера генерации случайных чисел.

Пример генерации случайных чисел.

Элемент случайности может быть введен в компьютерные приложения с помощью функции rand из стандартной библиотеки С++. Рассмотрим следующий оператор:

i = rand () ;

Функция rand генерирует целое число в диапазоне от 0 до RAND_MAX (символическая константа, определенная в заголовочном файле <cstdlib>). Значение RAND_MAX для Visual Studio равно 32767. Если функция rand действительно вырабатывает случайные целые, то при очередном вызове rand шансы быть выбранным (т.е. вероятность) равны для всех чисел из диапазона от 0 до RAND_MAX.

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

Бросание игральной кости

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

rand () % 6

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

// randExample.cpp : Defines the entry point for the console application.

//

// Смещенные и масштабированные случайные целые числа

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <iomanip> // обеспечивает работу манипулятора setw

#include <cstdlib> // содержит прототип для функции rand

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

{

// poftorit' 20 raz

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

{

// poluchit' cluchainoe chislo ot 1 do 6 i vyvesti ego

cout << setw (5) << ( 1+ rand () % 6 );

// esli counter delitcya na 5, nachat' novuu stroku

if (counter % 5 == 0)

cout << endl;

} // end for

// zaderzhka ekrana

char ch;

cin >> ch;

return 0;

} // end main

Рис. 5.1. Смещенные масштабированные числа, генерируемые выражением

1 + rand() % 6