- •Лабораторная работа №6
- •1. Постановка задачи:
- •5. Функция main()
- •Лабораторная работа №11
- •1. Постановка задачи.
- •Задача 1.
- •3. Функция main().
- •Задача 2.
- •5. Описание класса
- •Int getmin() {return min;} //получение количества минут
- •Int getsec() {return sec;} //получение количества секунд
- •8. Функция main()
- •Задача 3.
- •12. Функция main()
- •Задача 4.
- •15. Функция main()
- •Задача 5.
- •19. Функция main()
- •Лабораторная работа №13
- •1. Постановка задачи. Задача 1.
- •Задача 2.
- •Задача 3.
- •2. Описание класса
- •Int getmin() {return min;} //получение количества минут
- •Int getsec() {return sec;} //получение количества секунд
- •Задача 1.
- •5. Функция main()
- •Задача 2.
- •8. Функция main()
- •Задача 3.
- •11. Функция main()
Задача 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