Страницы

8. Массив


Одномерные массивы

Массив - это структура данных, которая содержит множество значений, которые относятся к одному типу.

Например, массив может содержать годовые отметки по математике двадцати пяти учеников класса. Так как годовая отметка - это целое число, то тип значений элементов массива short.
Также массив - это среднесуточная температура 30 дней апреля. Температура - это не всегда целое число, поэтому тип значения элементов массива float.

Каждое значение сохраняется в отдельном элементе массива и хранится в памяти последовательно друг за другом. Каждый элемент массива имеет номер и значение. Нумерация массивов в C++ начинается с нуля.

Индекс (номер)
0
1
2
3
4
5
6
Значение элемента
25
48
-8
0
12
4
58

Данный массив содержит 7 элементов. 
Третий элемент массива имеет значение (равен)  0, пятый элемент массива имеет значение 4.

Объявление массива

При объявлении массива мы должны описать три аспекта:
   тип значений элементов массива;
   имя массива;
   количество элементов массива.

   имя_типа   имя_массива [размер_массива];

Например:
short marks [25];
float month [12];

Обратите внимание, что первый элемент массива имеет индекс 0, а последний элемент на 1 меньше, чем его размер.

marks[0] - первый элемент массива, marks[24] - последний элемент массива. month[0] - первый элемент массива, month[11] - последний элемент массива. 

Пример 1. Необходимо найти сумму 5 целых чисел.

Напишем программу без использования массива.


#include <iostream>
using namespace std;

int main()
{
    float a, b, c, d, e, s;
    cin >> a >> b >> c >> d >> e;
    s = a + b + c + d + e;
    cout <<  s;

    return 0;
}

А если требуется найти сумму 30 целых чисел? Решение по аналогии требует введения 30 однотипных переменных. При увеличении количества слагаемых задача становится малоприятной при оформлении и вычислении. Для решения задач использующих большие блоки однотипной информации удобно использовать массив.

Для работы с массивами используют цикл (чаще for), тогда возникает обобщенное имя элементов массива a[i], где i должно изменяться согласно диапазону индексов элементов.

#include <iostream>
using namespace std;

int main()
{
   short n; // инициализируем переменную - количество элементов в массиве

   cin >> n; // спрашиваем, сколько элементов в массиве

   float a[n]; // инициализируем массив из n элементов

   float s = 0; // сумме присваиваем значение нуль

  for (int i = 0; i < n; i++) // рассматриваем все элементы массива от нулевого до n-1
    {
      cin >> a[i]; // спрашиваем значение элемента с номером i (i меняется от 0 до n-1)
      s = s + a[i]; // добавляем элемент к сумме
   }
  cout << s;
  return 0;
}

Формирование массива

1 способ: присваивание элементам значений

int a[4];

a[0] = 4;
a[1] = -2;
a[2] = 0;
a[3] = -4;
a[4] = 0;

2 способ: ввод значений элементов с клавиатуры

float b[10];

for (i = 0; i < 10; i++)
   cin >> a[i];

3 способ: массив-константа

int a [5] = {3, 5, 7, 2, -1};

4 способ: используя генератор случайных чисел


Используется, если программа на стадии отладки.

Функция rand() генерирует случайное число. Необходимо подключить библиотеку #include <stdlib.h>

Если мы хотим получить случайное число до 3, можно использовать функцию остатка от деления:   rand() % 3

Вывод элементов массива

На экран при работе с массивами можно выводить:

1. Массив целиком от первого до последнего элемента.

for (int i = 0; i < n; i++)
  cout << a[i] << " ";      //вывод элементов в строку через пробел

for (int i = 0; i < n; i++)
   cout << a[i] << "\n";      //вывод элементов в столбец

2. Массив целиком в обратном порядке от последнего до первого элемента.

for  (int i = n - 1; i >=0; i--)
   cout << a[i] << " ";

3. Фрагмент массива (часть элементов от m-го до k-го элемента, где m,k-номера в пределах диапазона индексов массива).

for (int i = m; i <=  k; i++)
  cout << a[i] << " ";

Пример 2. Сформировать массив из 15 целых чисел на отрезке [10;50].Вывести их на экран.

#include <stdlib.h>
#include <iostream>
using namespace std;

int main()
{
    short n = 15;

   int a[n];

    for (int i = 0; i < n; i++)
    {
        a[i] = rand () % 41 +10; //генерируем числа до 40 и прибавляем 10, тогда получим диапазон от 10 до 50
        cout << a[i] <<  " ";
    }

    return 0;
}


Экспериментальный раздел работы

1. Измените запись, чтобы значения элементов выводились через запятую.

2. Измените программу для вывода последних пяти элементов массива.

3. Измените программу для вывода последних пяти элементов массива в обратном порядке.

4. Измените программу для вывода суммы элементов массива.

5. Измените программу для вывода произведения пяти первых элементов массива.


Задания для самостоятельного решения

1. Составьте программу формирования массива из 20 целых чисел от -5 до 15. Выведите сумму значений и элементы массива в строку.

2. Составить программу удвоения значений элементов и вывода массива на экран в строку. Массив-константа (4,6,12,-5,7,0,-4,3,-4).

3. Составить массив, в котором первые два элемента задаются с клавиатуры, а все последующие равны сумме двух предыдущих.

4. Найти значения и номера всех отрицательных элементов массива 25 целых чисел от -12 до 12.