Указатель на объект класса и один объект. В основной программе реализовать алгоритм Объявить указатель на объект класса. Создать объект оператором new. 3
Скачать 0.71 Mb.
|
Постановка задачи Создать базовый класс, содержащий метод наименованием in_out без параметров. Метод организует ввод исходных данных: размерности целочисленного массива и значений элементов целочисленного массива. На базе базового класса создать производный класс 1 содержащий метод целого типа наименованием func. Метод от значения первого элемента целочисленного массива последовательно вычитает значения остальных элементов. Полученный результат возвращает. На базе класса 1 создать производный класс 2 содержащий метод целого типа наименованием func. Метод суммирует элементы целочисленного массива. Полученный результат возвращает. На базе класса 2 создать производный класс 3 содержащий метод наименованием in_out без параметров для вывода исходных данных и вычисленных значений. В основной программе использовать один указатель на объект класса и один объект. В основной программе реализовать алгоритм: 1. Объявить указатель на объект класса. 2. Создать объект оператором new. 3. Ввод исходных данных: размерности целочисленного массива и значений элементов данного массива. 4. Вычисление значение вычитания от первого элемента массива всех остальных. 5. Вычисление суммы элементов массива. 6. Вывод полученных результатов. Описание входных данных Первая строка: «размерность целочисленного массива» Размерность массива натуральное число больше или равно 1 и меньше или равно 100. Вторая строка: «последовательность целых чисел» Количество целых чисел равно размерности массива и разделены пробелами. Значение каждого числа принадлежит интервалу [-100, 100]. Описание выходных данных Первая строка: Array dimension: «размерность целочисленного массива» Вторая строка: The original array:«последовательность целых чисел» Для вывода каждого числа выделяется поле из 5 позиции. Третья строка: Min: «значение вычитания из первого элемента массива всех остальных» Четвертая строка: Sum: «значение суммы элементов массив» Метод решения Библиотека iostream Собственные классы Base: protected: • int n - размер массива, который хранит Base • int * a - массив чисел public: • void in_out() - метод считывания длины массива и его самого Derived1: protected: • int result_sub = 0 - результат работы функции func, определенной в данном классе public: • int func() - метод, подсчитывающий разность первого элемента и суммы всех остальных Derived2: protected: • int result_sum = 0 - результат работы функции func, определенной в данном классе (сумма элементов) public: • int func() - метод, подсчыитвающий сумму элементов Derived3: public: • void in_out() - метод, выводящий размер массива, сам массив, значение переменных result_sub и result_sum Будет создан объект класса Derived3, а внутри него Derived2, Derived1 и Base по одной штуке каждого Номер Имя класса Имя классанаследника Модификатор при наследовании Описание Переход 1 Base Класс с функционалом считывания Derived1 public 2 2 Derived1 Класс с функционалом подсчета разности Derived2 public 3 3 Derived2 Класс с функционалом подсчета суммы элементов Derived3 public 4 4 Derived3 Класс с функционалом вывода информации Описание алгоритма Функция: main Функционал: Главная функция Параметры: отсутствуют Возвращаемое значение: отсутствует № Предикат Действия № перехода Комментарий 1 Инициализация объекта d класса Derived3 2 2 Вызов метода in_out от Base у объекта d без аргументов 3 3 Вызов метода func от Derived1 у объекта d без аргументов 4 4 Вызов метода func от Derived2 у объекта d без аргументов 5 5 Вызов метода in_out от Derived3 у объекта d без аргументов ∅ Класс объекта: Base Модификатор доступа: public Метод: in_out Функционал: Считывание массива Параметры: отсутствуют Возвращаемое значение: отсутствует № Предикат Действия № перехода Комментарий 1 Считывание свойства n 2 2 Инициализация массива a размера n 3 3 Инициализация целочисленной переменной i со значением 0 4 4 i < n Считывание i-ого элемента массива 5 i >= n ∅ 5 Увеличение i на единицу 4 Класс объекта: Derived1 Модификатор доступа: public Метод: func Функционал: Подсчитывает разность первого элемента массива a и суммы остальных его элементов Параметры: отсутствуют Возвращаемое значение: int - ответ № Предикат Действия № перехода Комментарий 1 Инициализация целочисленной переменной c со значением первым элементов массива a 2 2 Инициализация целочисленной переменной i со значением 1 3 3 i < n Вычитание из c значения i-ого элемента массива 4 i >= n Присваивание свойству result_sub значения c 5 4 Увеличение i на единицу 3 5 Вернуть c ∅ Класс объекта: Derived2 Модификатор доступа: public Метод: func Функционал: Подсчитывает сумму элементов массива Параметры: отсутствуют Возвращаемое значение: int - сумма элементов массива № Предикат Действия № перехода Комментарий 1 Инициализация целочисленной переменной c со значением первым элементов массива a 2 2 Инициализация целочисленной переменной i со значением 0 3 3 i < n Прибавление к c значения i-ого элемента массива 4 i >=n Присваивание свойству result_sum значения c 5 4 Увеличение i на единицу 3 5 Вернуть c ∅ Класс объекта: Derived3 Модификатор доступа: public Метод: in_out Функционал: Выводит информацию о массиве Параметры: отсутствуют Возвращаемое значение: отсутствует № Предикат Действия № перехода Комментарий 1 Вывод "Array dimension: ", значения n и переноса строки 2 2 Вывод "The original array:" 3 3 Инициализация целочисленной переменной i со значением 0 4 4 i < n Вывод i-ого элемента массива с учетом табуляции ∅ i >= n Вывод переноса строки, "Min: ", значения result_sub, переноса строки, "Sum: ", значения result_sum ∅ Увеличение i на единицу 4 Блок-схема алгоритма Код программы Файл Base.cpp #include #include "Base.h" void Base::in_out(){ // Считываем размер массива std::cin >> this->n; // Создаем массив this->a = new int[this- >n]; // Считываем элементы массива for (int i =0; i < this- >n;++i){ std::cin >> this- >a[i]; } } Файл Base.h #ifndef BASEH #define BASEH class Base{ protected: int n; int * a; public: virtual void in_out(); }; #endif Файл Derived1.cpp #include "Derived1.h" int Derived1::func(){ // Записали значение первого элемента int c = this->a[0]; // Вычитаем из него остальные for (int i = 1; i < this->n; ++i) { c -= this->a[i]; } // Сохраняем значение внутри класса this->result_sub = c; return c; } Файл Derived1.h #ifndef DERIVED1H #define DERIVED1H #include "Base.h" class Derived1: public Base{ protected: int result_sub = 0; public: virtual int func(); }; #endif Файл Derived2.cpp #include "Derived2.h" int Derived2::func(){ // Создаем счетчик int c = 0; // Прибавляем к нему значения элементов массива for (int i =0; i < this->n; ++i) { c += this->a[i]; } // Сохраняем значение внутри класса this->result_sum = c; return c; } Файл Derived2.h #ifndef DERIVED2H #define DERIVED2H #include "Derived1.h" class Derived2: public Derived1{ protected: int result_sum = 0; public: virtual int func(); }; #endif Файл Derived3.cpp #include #include "Derived3.h" void Derived3::in_out(){ // Выводим размер массива std::cout << "Array dimension: " << this->n << "\n"; // Выводим элементы массива std::cout << "The original array:"; for (int i = 0; i < this->n; ++i) { std::printf("%5d", this->a[i]); } // Выводим подсчитанные значения (разность и сумму) std::cout << "\nMin: " << this->result_sub << "\nSum: " << this- >result_sum; return; } Файл Derived3.h #ifndef DERIVED3H #define DERIVED3H #include "Derived2.h" class Derived3: public Derived2{ public: virtual void in_out(); }; #endif Файл main.cpp #include "Derived3.h" int main() { // Создаем элемент для работы Derived3 * d = new Derived3(); // Вызываем метод считывания массива, он определен в классе Base d->Base::in_out(); // Вызываем метод подсчета вычитания, он определен в классе Derived1 d->Derived1::func(); // Вызываем метод подсчета суммы элементов, он определен в классе Derived2 d->Derived2::func(); // Выводим информацию о массиве с помощью метода класса Derived3 d->in_out(); return(0); } Тестирование Входные данные Ожидаемые выходные данные Фактические выходные данные 5 1 2 3 4 5 Array dimension: 5 The original array: 1 2 3 4 5 Min: 13 Sum: 15 Array dimension: 5 The original array: 1 2 3 4 5 Min: 13 Sum: 15 6 9 0 4 -45 99 -32 Array dimension: 6 The original array: 9 0 4 -45 99 -32 Min: -17 Sum: 35 Array dimension: 6 The original array: 9 0 4 -45 99 -32 Min: -17 Sum: 35 |