Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 Вариант.doc
Скачиваний:
11
Добавлен:
17.09.2019
Размер:
227.84 Кб
Скачать

15. Функция main()

void main()

{

char ch;

try

{

stack<Time> stack1;

int n;

cout<<"Input the size of the stack"<<endl;

cin>>n;

stack1=Create_stack(n);

print_stack(stack1);

cout<<"Input position to insert min element"<<endl;

cin>>n;

ins(stack1,min_el(stack1),n);

print_stack(stack1);

Del_m(stack1,Avg(stack1));

cout<<"After deleting elements greater than average"<<endl;

print_stack(stack1);

mult(stack1,max_el(stack1));

cout<<"Multiplicated by max"<<endl;

print_stack(stack1);

}

catch(int)

{

cout<<"Error";

}

cin>>ch;

}

16. Результаты работы программы:

Input the size of the stack

9

16:02 5:58 7:58 12:04 2:49 8:20 5:34 7:47 0:41

Input position to insert min element

3

16:02 5:58 0:41 7:58 12:04 2:49 8:20 5:34 7:47 0:41

After deleting elements greater than average

5:58 0:41 2:49 5:34 0:41

Multiplicated by max

2136:04 244:38 1008:22 1992:52 244:38

Задача 5.

17. Описание параметризованного класса.

template <class T>

class Vect

{

stack<T> c_stack; //последовательный контейнер для хранения элементов

int len; //длина контейнера

public:

Vect();

Vect(int s);

//конструктор с параметром типа int - длиной создаваемого контейнера

~Vect(); //деструктор

void prn(); //печать элементов контейнера

T min_el(); //величина минимального элемента

T max_el(); //величина максимального элемента

T Avg(); //среднее арифметическое элементов контейнера

void Del_m(T a); //удаление элементов, больших a

void ins(T a,int n); //вставка элемента a на позицию n

void mult(T a); //умножение всех элементов контейнера на величину a

};

18. Реализация функций параметризованного класса.

template <class T>

Vect<T>::Vect() {len=0;}

template <class T>

Vect<T>::Vect(int s)

{

T a;

len=s;

for(int i=0;i<s;i++)

{

cin>>a;

c_stack.push(a);

}

}

template <class T>

Vect<T>::~Vect() //деструктор

{

while (!(c_stack.empty()))

{

c_stack.pop();

}

}

template <class T>

void Vect<T>::prn()

{

stack<T> copy=c_stack;

while (!(copy.empty()))

{

cout<<copy.top()<<" ";

copy.pop();

}

cout<<endl;

}

template <class T>

T Vect<T>::min_el()

//поиск минимального элемента

{

T min=c_stack.top();

stack<T> copy=c_stack;

while (!(copy.empty()))

{

if (copy.top()<min)

min=copy.top();

copy.pop();

}

cout<<endl;

return min;

}

template <class T>

T Vect<T>::max_el()

//поиск максимального элемента

{

T max=c_stack.top();

stack<T> copy=c_stack;

while (!(copy.empty()))

{

if (copy.top()>max)

max=copy.top();

copy.pop();

}

cout<<endl;

return max;

}

template <class T>

T Vect<T>::Avg()

//нахождение среднего арифметического

{

Time a;

stack<T> copy=c_stack;

while (!(copy.empty()))

{

a+=copy.top();

copy.pop();

}

a/=len;

return a;

}

template <class T>

void Vect<T>::Del_m(T a)

//удаление элементов, больших a из контейнера

{

vector<Time> temp;

vector<Time>::reverse_iterator it1;

while (!c_stack.empty())

{

if (!(c_stack.top()>a))

temp.push_back(c_stack.top());

else len--;

c_stack.pop();

}

for(it1=temp.rbegin();it1!=temp.rend();it1++)

c_stack.push(*it1);

}

template <class T>

void Vect<T>::ins(T a,int n)

//добавление элемента a на позицию n

{

vector<Time> temp;

vector<Time>::reverse_iterator it1;

int i=1;

if (n>len+1)

cout<<"No such position"<<endl;

else

{

while (!c_stack.empty())

{

if (i++==n)

temp.push_back(a);

temp.push_back(c_stack.top());

c_stack.pop();

}

if ((i==n))

temp.push_back(a);

for(it1=temp.rbegin();it1!=temp.rend();it1++)

c_stack.push(*it1);

}

len++;

}

template <class T>

void Vect<T>::mult(T a)

{

vector<Time> temp;

vector<Time>::reverse_iterator it1;

while (!c_stack.empty())

{

temp.push_back(c_stack.top()*a);

c_stack.pop();

}

for(it1=temp.rbegin();it1!=temp.rend();it1++)

c_stack.push(*it1);

}