Содержание
Цель работы
Изучить приемы создания и использования шаблонов классов.
Общая постановка
Даны: число $N$ и последовательность $a_1,\ a_2,\ …,\ a_N$. Создать шаблон класса, порождающего динамические одномерные массивы с элементами различных типов (вещественные, целочисленные, символьные и т.д.). Тип данных и результат являются параметрами по отношению к классу.
Программа должна содержать: конструктор, деструктор, метод просмотра значений созданного массива, а также метод для решения задач формирования нового массива по соответствующему индивидуальному заданию.
Индивидуальные задания
№ | Условие |
1 | $a_1,\ (a_1\ +\ a_2),\ …,\ (a_1\ +\ a_2\ +\ …\ +\ a_N)$ |
2 | $(a_1\ \cdot a_1),\ (a_1\ \cdot a_2),\ …,\ (a_1\ \cdot a_N)$ |
3 | $|a_1|,\ |a_1\ +\ a_2|,\ …,\ |a_1\ +\ a_2\ +\ …\ +\ a_N|$ |
4 | $a_1,\ -a_1 \cdot a_2,\ +a_1 \cdot a_2 \cdot a_3,\ …,\ (-1)^{N-1} \cdot a_1 \cdot a_2 \cdot … \cdot a_N$ |
5 | $-a_1,\ +a_2,\ -a_3,\ …\, (-1)^N \cdot a_N$ |
6 | $(a_1\ +\ 1),\ (a_2\ +\ 2),\ (a_3\ +\ 3),\ …,\ (a_N\ +\ N)$ |
7 | $a_1 \cdot 1,\ a_2 \cdot 2,\ a_3 \cdot 3,\ …,\ a_N \cdot N$ |
8 | $a_1 \cdot a_2,\ a_2 \cdot a_3,\ …,\ a_{N-1} \cdot a_N$ |
9 | $\frac{a_1}{1},\ \frac{a_2}{2},\ \frac{a_3}{3},\ …,\ \frac{a_N}{N}$ |
10 | $(a_1\ +\ a_2),\ (a_2\ +\ a_3),\ …,\ (a_{N-1}\ +\ a_N)$ |
11 | $(a_1\ +\ a_2\ + a_3),\ (a_2\ +\ a_3\ +\ a_4), \\ \ (a_3\ +\ a_4\ +\ a_5),\ …,\ (a_{N-2}\ +\ a_{N-1}\ +\ a_N)$ |
12 | $(N\ +\ a_1),\ (N-1\ +\ a_2),\ …,\ (1\ +\ a_N)$ |
13 | $N \cdot a_1,\ (N — 1) \cdot a_2,\ …,\ (1 \cdot a_N)$ |
14 | $\frac{a_1}{N},\ \frac{a_2}{N},\ …,\ \frac{a_N}{N}$ |
15 | $-a_1,\ +a_1 \cdot a_2,\ -a_1 \cdot a_2 \cdot a_3,\ …,\ (-1)^{N} \cdot a_1 \cdot a_2 \cdot … \cdot a_N$ |
Образец выполнения (вариант №6)
Условие задания звучит так:
$(a_1\ +\ 1),\ (a_2\ +\ 2),\ (a_3\ +\ 3),\ …,\ (a_N\ +\ N)$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | #include <iostream> // для консольного ввода-вывода #include <clocale> // для руссификации диалогов программы #include <string> // для строковых данных using namespace std; // шаблонный класс, порождающий одномерные динамические массивы различных типов данных template <class T> class Array { private: int n; // количество элементов одномерного массива T *data; // указатель на данные (элементы) одномерного массива public: // конструктор по умолчанию Array() { this->n = 0; this->data = NULL; } // параметрический конструктор Array(const int pn) { this->n = pn; this->data = new T[this->n]; cout << endl << "Вам предстоит ввести " << this->n << " знач. с клавиатуры:" << endl; for(int i = 0; i < this->n; i++) { cout << "\t- введите элемент №" << (i + 1) << ": "; cin >> this->data[i]; } cout << endl; } // получение количества элементов массива int GetN(void) { return this->n; } // назначение элементам массива новых значений void SetData(T *pdata, const int pn) { if(this->n != 0) delete []this->data; this->n = pn; this->data = new T[this->n]; for(int i = 0; i < this->n; i++) this->data[i] = pdata[i]; } // вывод значений созданного одномерного массива на экран void Print(string pmessage) { cout << "Последовательность из " << this->n << " элементов имеет вид(" << pmessage << "): "; for(int i = 0; i < this->n; i++) cout << "\t" << this->data[i]; cout << endl; } // формирование нового массива по заданному правилу T* Run(void) { T *tmp = new T[this->n]; for(int i = 0; i < this->n; i++) tmp[i] = this->data[i] + (i + 1); return tmp; } // деструктор (уничтожает ранее выделенную динамическую память под данные) ~Array() { delete []this->data; } }; // главная функция программы (точка входа) int main(void) { setlocale(LC_ALL, "rus"); // настройка руссификации int n; // отвечает за количество элементов последовательности // запрашиваем от пользователя количество элементов будущих массивов cout << "Введите количество элементов последовательности (N): "; cin >> n; // создание одномерного массива целых чисел Array<int> a(n); a.Print("массив a (int[])"); // формирование нового массива целых чисел из массива a Array<int> b; b.SetData(a.Run(), a.GetN()); b.Print("массив b (int[])"); // создание одномерного массива символов Array<char> c(n); c.Print("массив с (char[])"); // формирование нового массива символов из массива c Array<char> d; d.SetData(c.Run(), c.GetN()); d.Print("массив d (char[])"); // создание одномерного массива вещественных чисел Array<float> e(n); e.Print("массив e (float[])"); // формирование нового массива вещественных чисел из массива e Array<float> f; f.SetData(e.Run(), e.GetN()); f.Print("массив f (float[])"); cout << endl << "Для завершения работы программы нажмите ENTER..."; cin.get(); // задержка программы, чтобы можно было просмотреть результат cin.get(); return 0; // завершение работы программы и передача управления в ОС (код 0 = все прошло успешно!) } |

Стоимость заказа работы своего варианта
➡ Стоимость программы из любого варианта составляет $250$ рублей.
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.
Добавить комментарий