Теоретический материал (С++)

Массивы (часть 1)

Часто возникает необходимость хранить не одну переменную, а набор однотипных переменных. Например, список учащихся класса – это набор данных строкового типа, координаты вершин многоугольника или коэффициенты многочлена – это набор числовых данных. Для хранения наборов данных используются структуры данных. Основная структура данных – это массив.

Массив — это структура однотипных данных, занимающих непрерывную область памяти. Массив имеет размер — количество элементов в нем. Каждый элемент массива имеет свой номер (также называемый индексом), обращение к элементу массива осуществляется путем указания его индекса. В языке C++ элементы нумеруются, начиная с 0, поэтому последний элемент массива имеет номер на 1 меньше размера массива.

Массив в языке C++ задается следующим образом:

      тип_элементов идентификатор[размер];

где тип_элементов — произвольный тип данных языка C++, который будут иметь элементы массива, например, int, double и т.д.; идентификатор — имя массива, размер — число элементов в нем.

К элементу массива можно обращаться, как идентификатор[индекс]. Например, если было сделано объявление

     double A[5];

то таким образом создается 5 элементов массива типа double: A[0], A[1], A[2], A[3], A[4].

Пример программы, которая создает массив типа int[], заданного пользователем размера, считывает с клавиатуры его элементы, затем прибавляет к каждому элементу массива число 1, затем выводит результат на экран:

     #include<iostream>
     using namespace std;
     int main()
     {
         int n;          // Размер массива
         int i;          // Счетчик в циклах
     
         cout<<"Введите количество чисел: ";
         cin>>n;         // Считываем размер массива
     
         int arr[n];     // Объявление массива (так делать нельзя), лучше вместо такого объявления массива использовать std::vector<int> arr(n);

     
                         // Считываем массив
         cout<<"Введите "<<n<<" целых чисел: ";
         for(i=0;i<n;++i)
             cin>>arr[i];
     
                         // Прибавляем по 1 к каждому элементу
         for(i=0;i<n;++i)
          arr[i]+=1;
     
                         // Выводим массив на экран
         for(i=0;i<n;++i)
             cout<<arr[i]<<" ";
                         // Переведем курсор на новую строку
         cout<<endl;
         return 0;
     }

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

Упражнения

В упражнениях подразумевается, что массив вводится, как в приведенном примере (сначала – количество элементов в массиве, потом – все элементы массива по одному). Все массивы – числовые типа int[].

  1. (A) Выведите на экран все элементы массива с четными индексами (то есть A[0], A[2], A[4], ...).
  2. (B) Выведите на экран все четные элементы массива (то есть те элементы, которые являются четными числами).
  3. (C) Найдите количество положительных элементов в массиве. Программа должна считать массив и вывести единственное число – количество положительных элементов в массиве.
  4. (D) Дан массив. Найдите количество элементов массива, которые больше предыдущего элемента в этом массиве.
  5. (E) Массив содержит только ненулевые числа. Определите, есть ли в данном массиве два соседних элемента с одинаковыми знаками. Программа должна вывести YES, если есть два числа с одинаковыми знаками и NO иначе.
  6. (F) Дан массив. Определите, сколько в этом массиве элементов, которые строго больше обоих своих соседей.
  7. (G) Дан массив. Переставьте элементы массива в обратном порядке без использования дополнительного массива. Программа должна считать массив, поменять порядок его элементов, вывести результат на экран (просто вывести элементы массива в обратном порядке – недостаточно!).
  8. (H) Переставьте соседние элементы массива (0-й элемент поменять с 1-м, 2-й с 3-м и т.д. Если элементов нечетное число, то последний элемент остается на своем месте)
  9. (I) Циклически сдвиньте элементы массива вправо (0-й элемент становится 1-м, 1-й становится 2-м, ..., последний становится 0-м, то есть массив {3, 5, 7, 9} превращается в массив {9, 3, 5, 7}).
  10. (J) Найдите значение наибольшего элемента в массиве.
  11. (K) Дан массив, отсортированный по возрастанию (каждый элемент массива не меньше предыдущего элемента, например, {1, 2, 2, 3, 3, 3}). Найдите количество различных чисел в этом массиве.