Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

Лабораторна робота №4

з дисципліни «Програмування-2»

Тема: «Розробка програм з параметрично поліморфними класами та функціями»

Завдання
 Створити шаблон класу Масив з параметрами:
 Т - тип елементів масиву;
 n - кількість елементів масиву.
 Шаблон класу Масив повинен містити:
 властивості – масив, кількість елементів масиву;
 метод, що рахує середнє арифметичне.
 В головній програмі, використовуючи шаблон класу Масив, побудувати два об’єкти
різного розміру (наприклад, 5 та 10 елементів) та різного типу (наприклад, int та float)
та:
 задати значення елементів масивів;
 вивести на екран результат середнього арифметичного.

Варіант №6: с-т С-92 н.г. Обуховець О.В.

1. Математичне забезпечення
У даному варіанті завдання полягає у тому, щоб знайти середнє арифметичне
a 1+a 2+a ..
значення елементів масиву. m=
n
2. UML-діаграма

3. Програма
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

template <typename T>


class MyMas{
T * pmas;
int n;
public:
~MyMas() {if(!pmas) delete [] pmas;}
MyMas(int i) {
n = i;
pmas = nullptr;
try {
pmas = new T[n];
}
catch (bad_alloc ba){
cout << "Template array not created, bad allocation dynamic memory" << endl;
cout << ba.what() << endl;
}
}
void initMas();
void outMas();
void ser();
};

template <typename T>


void MyMas<T>::initMas() {
if(pmas)
for (int i = 0; i < n; ++i) {
pmas[i] = static_cast<T>(rand()%100 - (51 - 0.1)); ///-0.1 щоб компілятор реагував на
числа як на double;
}
}

template <typename T>


void MyMas<T>::outMas() {
if(pmas){
for (int i = 0; i < n; ++i) {
cout << setw(4) << pmas[i] << " ";
}
cout << endl;
}
}

template <typename T>


void MyMas<T>::ser() {
T sum = 0;
for (int i = 0; i < n; ++i) {
sum += pmas[i];
}
cout << "srednee arifmeticheskoe = " << sum / n << endl;
}
int main() {

srand(time(NULL));

MyMas<int>arr1(4);
arr1.initMas();
cout << "for int: " << endl;
arr1.outMas();
arr1.ser();
cout << "=====================================" << endl;

MyMas<double>arr2(3);
arr2.initMas();
cout << "for double: " << endl;
arr2.outMas();
arr2.ser();

return 0;
}

4. Тести

№ Вхідні дані Очікувані Результати Висновок


результати програми
srednee srednee
for int: arifmeticheskoe = 16 arifmeticheskoe
30 28 2 6 = 16
1 srednee вірно
for double: arifmeticheskoe = srednee
39.1 -47.9 -49.9 -19.5667 arifmeticheskoe
= -19.5667
srednee srednee
for int: arifmeticheskoe = 8 arifmeticheskoe
-38 45 -12 39 =8
2 srednee вірно
for double: arifmeticheskoe = srednee
42.1 -30.9 -3.9 2.43333 arifmeticheskoe
= 2.43333
srednee srednee
for int: arifmeticheskoe = 25 arifmeticheskoe
-12 42 32 38 = 25
3 srednee вірно
for double: arifmeticheskoe = srednee
-8.9 26.1 29.1 15.4333 arifmeticheskoe
= 15.4333

Висновки:

В ході виконання даної лабораторної роботи ми навчилися розробляти


програми з параметрично поліморфними класами та функціями, а саме:
створювати шаблон класу.
Тестування показало, що програма працює вірно.

You might also like