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

Задача 2.

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

My_stack Create_stack(int n)

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

{

My_stack stack1;

int t;

Time a;

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

{

t=rand()%1000;

a.setmin(t/60);

a.setsec(t%60);

stack1.push(a);

}

return stack1;

}

void out_el(Time t1) {cout<<t1<<" ";}

vector<Time> stack_to_vector(My_stack stack1)

//копирование стека в вектор

{

vector<Time> temp;

while (!stack1.empty())

{

temp.push_back(stack1.top());

stack1.pop();

}

return temp;

}

My_stack vector_to_stack(vector<Time> temp)

//копирование вектора в стек

{

My_stack stack1;

vector<Time>::reverse_iterator it1;

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

stack1.push(*it1);

return stack1;

}

void print_stack(My_stack& stack1)

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

{

vector<Time> temp=stack_to_vector(stack1);

for_each(temp.begin(),temp.end(),out_el);

cout<<endl;

}

Time min_el(My_stack &stack1)

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

{

vector<Time> temp=stack_to_vector(stack1);

vector<Time>::iterator min;

min=min_element(temp.begin(),temp.end());

return *min;

}

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

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

{

vector<Time> temp;

vector<Time>::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);

stack1=vector_to_stack(temp);

}

}

Time Avg(My_stack stack1)

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

{

Time 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,Time& a)

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

{

vector<Time> temp;

vector<Time>::iterator last;

vector<Time>::reverse_iterator it1;

while (!stack1.empty())

{

temp.push_back(stack1.top());

stack1.pop();

}

last=remove_if(temp.begin(),temp.end(),bind2nd(greater<Time>(),a));

temp.erase(last,temp.end());

stack1=vector_to_stack(temp);

}

Time max_el(My_stack &stack1)

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

{

vector<Time> temp=stack_to_vector(stack1);

vector<Time>::iterator max;

max=max_element(temp.begin(),temp.end());

return *max;

}

void mult(My_stack &stack1,Time a)

//домножение всех элементов списка на время a

{

vector<Time> temp;

vector<Time>::reverse_iterator it1;

while (!stack1.empty())

{

temp.push_back(stack1.top());

stack1.pop();

}

transform(temp.begin(),temp.end(),temp.begin(),bind2nd(multiplies<Time>(),a));

stack1=vector_to_stack(temp);

}

bool eq_min(Time t1,int m){return t1.getmin()==m;}

//проверяет равно ли количество минут значению m

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

void main()

{

char ch;

try

{

My_stack stack1;

vector<Time> temp;

vector<Time>::iterator it1;

int n,m;

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);

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

Del_m(stack1,Avg(stack1));

print_stack(stack1);

cout<<"Ascending sort"<<endl; //сортировка по возрастанию

temp=stack_to_vector(stack1);

sort(temp.begin(),temp.end());

stack1=vector_to_stack(temp);

print_stack(stack1);

cout<<"Descending sort"<<endl; //сортировка по убыванию

sort(temp.begin(),temp.end(),greater<Time>());

stack1=vector_to_stack(temp);

print_stack(stack1);

cout<<"Input minutes fo find"<<endl;

cin>>m;

it1=find_if(temp.begin(),temp.end(),bind2nd(ptr_fun(eq_min),m));

if (it1==temp.end())

cout<<"No element with such minutes"<<endl;

else cout<<*it1<<endl;

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

mult(stack1,max_el(stack1));

print_stack(stack1);

}

catch(int)

{

cout<<"Error";

}

cin>>ch;

}

9. Результат работы программы для задачи 2.

Input the size of the stack

10

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

Input position to insert min element

7

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

After deleting elements greater than average

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

Ascending sort

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

Descending sort

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

Input minutes fo find

5

5:58

Multiplicated by max

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