- •5.1. Что такое массив?
- •Int myArray[100];
- •5.2. Многомерные массивы
- •5.3. Инициализация массивов
- •5.4. Определение числа элементов массива
- •5.5. Операции с массивами
- •5.5.1. Ввод и вывод массива
- •5.5.2. Поиск минимального (максимального) элемента массива
- •5.5.3. Поиск в массиве заданного элемента
- •5.5.4. Сортировка массива
- •5.6. Строки
- •5.6.1. Основы техники строк
- •5.6.2. Некоторые библиотечные функции обработки строк
- •5.6.3. Примеры обработки строк
- •5.7. Массивы строк
- •5.7.1. Пример использования массива строк
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
