Лабораторная работа №3. Массивы и векторы

Перед тем, как начать выполнение лабораторной, следует скачать заготовки и добавить их в свой проект. (обратите внимание на подключенные заголовочные файлы, на указатели и способ обхода массивов в файлах Lesson3.h и Lesson3.cpp. Также обратите внимание на объявление динамического массива в main.cpp)

Решения всех задач следует оформлять функциями в отдельном файле Lesson3.cpp. Функция main() должна демонстрировать вызов созданных функций. В такой схеме, очевидно, потребуется использование заголовочного файла. Для вывода на консоль элементов массива используем функцию-шаблон void printTheArray(T * a, int n, char delimiter = ' ')

Каждая функция должна сопровождаться комментарием о том, для чего она предназначена.

  1. void firstNOdd(int * a, int n); Дано целое число N (> 0) и адрес целочисленного массива длины N. Заполнить массив первыми N положительными нечётными числами: 1, 3, 5, … . Условным оператором не пользоваться.

  2. void printTheMeshedArray(const T * a, int n, char delimiter = ' ').Дан массив A размера N. Вывести сначала его элементы с нечётными номерами в порядке возрастания номеров, затем его элементы с чётными номерами в порядке убывания номеров \[ A_1,\, A_3,\,A_5,\, ....,\,A_6,\,A_4,\,A_2,\,A_0 \]

  3. void firstNFibonacci(int * a, int n); Дано целое число N (> 0) и адрес целочисленного массива длины N. Заполнить массив первыми N числами Фибоначчи: \[ F_1=1,\,F_2=1,\, .... \, F_N=F_{N-1}+F_{N-2} \]

  4. int isArithmeticProgression(const int * a, int n);  Дан целочисленный массив размера N. Проверить, образуют ли его элементы арифметическую прогрессию. Если образуют, вернуть разность прогрессии, если не образуют - вернуть 0.

  5.  int quantityBeforeMinimal(const T * a, int n) Дан массив размера N. Найти количество элементов перед первым минимальным. Продемонстрировать его использование на массиве, заполненном случайными целыми числами и на массиве, заполненном случайными вещественными числами

    Указание. Для проверки работы используем две перегруженные функции  fillTheArrayWithRandomNumbers. В функции main() следует объявить массив, заполнить его случайными числами, вывести на консоль и продемонстрировать результат работы функции.

  6. Реализовать функцию-шаблон void DoubleVec(vector<T> &vec), которая удваивает длину вектора и заполняет его вторую половину элементами из первой (используем  size(), push_back())

  7. vector<T> zipVectors(vector<T> a, vector<T> b)Даны два вектора A и B одного размера. Вернуть вектор, сформированный по следующему правилу: каждый его элемент равен максимальному из элементов векторов A и B с тем же индексом.

  8. Дан целочисленный вектор A. Записать в вектор B все числа из массива A, которые имеют в десятичной записи цифру 2.

    Указание 1: функция должна возвращать размер вектора B:

    int filterElemsWithDigitTwo(vector<int> a, vector<int> &b);

    Указание 2: в реализации функции воспользоваться функцией, которая проверяет, имеет ли данное целое в своей десятичной записи данную цифру:

    bool hasDigit(int n, int digit = 2);

    Её следует реализовать самостоятельно.