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

Задача 4.

14. Глобальные функции для выполнения заданий:

typedef stack<Money> My_stack;

My_stack Create_stack(int n)

//создание стека, заполенного случайными данными

{

My_stack stack1;

int t;

Money a;

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

{

t=rand()%10000;

a.setrub(t/100);

a.setkop(t%100);

stack1.push(a);

}

return stack1;

}

void print_stack(My_stack stack1)

//вывод элементов стека

{

while (!stack1.empty())

{

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

stack1.pop();

}

cout<<endl;

}

Money min_el(My_stack stack1)

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

{

Money t1,trub=stack1.top();

while (!stack1.empty())

{

t1=stack1.top();

if (t1 <trub)

trub=t1;

stack1.pop();

}

return trub;

}

void ins(My_stack& stack1,Money a,int n)

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

{

vector<Money> temp;

vector<Money>::reverse_iterator it1;

int i=1;

if (n>stack1.size()+1)

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

else

{

while (!stack1.empty())

{

if (i++==n)

temp.push_back(a);

temp.push_back(stack1.top());

stack1.pop();

}

if ((i==n))

temp.push_back(a);

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

stack1.push(*it1);

}

}

Money Avg(My_stack stack1)

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

{

Money a(0,0);

int s=stack1.size();

while (!stack1.empty())

{

a+=stack1.top();

stack1.pop();

}

a/=s;

return a;

}

void Del_m(My_stack& stack1,Money& a)

//удаление элементов, равных a из списка

{

vector<Money> temp;

vector<Money>::reverse_iterator it1;

while (!stack1.empty())

{

if (!(stack1.top()==a))

temp.push_back(stack1.top());

stack1.pop();

}

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

stack1.push(*it1);

}

Money max_el(My_stack stack1)

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

{

Money t1,tmax=stack1.top();

while (!stack1.empty())

{

t1=stack1.top();

if (t1 >tmax)

tmax=t1;

stack1.pop();

}

return tmax;

}

void add(My_stack &stack1,Money a)

//увеличение всех элементов стека на сумму a

{

vector<Money> temp;

vector<Money>::reverse_iterator it1;

while (!stack1.empty())

{

temp.push_back(stack1.top()+a);

stack1.pop();

}

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

stack1.push(*it1);

}

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

void main()

{

char ch;

try

{

stack<Money> stack1;

int n;

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

cin>>n;

stack1=Create_stack(n);

print_stack(stack1);

ins(stack1,max_el(stack1),1);

cout<<"After inserting max element"<<endl;

print_stack(stack1);

Del_m(stack1,min_el(stack1));

cout<<"After deleting min element"<<endl;

print_stack(stack1);

add(stack1,max_el(stack1));

cout<<"Added by average"<<endl;

print_stack(stack1);

}

catch(int)

{

cout<<"Error";

}

cin>>ch;

}

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

Input the size of the stack

9

69,62 93,58 14,78 57,24 91,69 65,00 63,34 84,67 0,41

After inserting max element

93,58 69,62 93,58 14,78 57,24 91,69 65,00 63,34 84,67 0,41

After deleting min element

93,58 69,62 93,58 14,78 57,24 91,69 65,00 63,34 84,67

Added by average

187,16 163,20 187,16 108,36 150,82 185,27 158,58 156,92 178,25