, : numtheory, : Top


8 Массивы (часть 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];     // Объявление массива
     
                         // Считываем массив
         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}). Найдите количество различных чисел в этом массиве.
  12. (L) Дан массив из N элементов и номер элемента в массиве k. Удалите из массива элемент с индексом k, сдвинув влево все элементы, стоящие правее элемента с индексом k.

    Программа получает на вход число N, затем N элементов массива, затем число k. Программа должна вывести N-1 число – элементы массива после удаления k–го элемента.

    Программа должна осуществлять сдвиг непосредственно в массиве, а не делать это при выводе элементов. Также нельзя использовать дополнительный массив.

    Например, при вводе

              7
              7 6 5 4 3 2 1
              2
    

    программа должна вывести (элементы массива индексируются с нуля!)

              7 6 4 3 2 1
    
  13. (M) Дан массив из N чисел, число k и значение C. Необходимо вставить в массив на позицию с индексом k элемент, равные C, сдвинув все элементы имевшие индекс не менее k вправо.

    Посколько при этом количество элементов в массиве увеличивается, необходимо сразу же создавать массив размером N+1. Вставку необходимо осуществлять уже в считанном массиве, не оставляя "свободного" места при считывании, не делая этого при выводе и не создавая дополнительного массива.

    Например, при вводе

              7
              7 6 5 4 3 2 1
              2 0
    

    программа должна вывести

              7 6 0 5 4 3 2 1
    
  14. (N) Дан массив. Посчитайте, сколько в нем пар элементов, равных друг другу.

    Считается, что любые два элемента, равные друг другу образуют одну пару, которую необходимо посчитать. Например, в массиве 1 2 3 2 3 имеется две равны пары, в массиве 1 1 1 – три пары, а в массиве 1 1 1 1 – шесть пар.