Файл: Лабораторная работа 3 Лабораторная работа 6 Лабораторная работа 11 Лабораторная работа 13 Лабораторная работа 3.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 144
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Федеральное агентство по образованию
Пермский государственный технический университет
Лабораторные работы на языке программирования СИ++
Выполнил студент:
Группы АСУзу-09-1
Дускаева Айгуль Халиловна
Проверила:
Викентьева Ольга Леонидовна
Пермь 2010
Содержание
Лабораторная работа №3
Лабораторная работа №6
Лабораторная работа №11
Лабораторная работа №13
Лабораторная работа №3
1. Постановка задачи.
-
Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя нолями: типа long для рублей и типа inl для копеек. Дробная часть числа при выводе на экран должна быть отделена от целой части запятой.
-
Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
-
Определить в классе деструктор.
-
Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы).
-
Перегрузить операцию присваивания.
-
Перегрузить операции ввода и вывода объектов с помощью потоков.
-
Перегрузить операции вычитания секунд и сравнение временных интервалов.
-
Написать программу, в которой продемонстрировать создание объектов и работу всех перегруженных функций.
2. Описание класса
class Money
{
long rub;
int kop;
public:
Money() {rub=0L;kop=0;} //конструктор без параметров
Money(int a) {rub=a; kop=0;} //конструктор с одним параметром типа int
Money(long a,int b) {rub=a; kop=b;} //конструктор с двумя параметром типа long и типа int
Money (Money& Money1) {rub=Money1.rub; kop=Money1.kop;} //конструктор с параметром типа Money
Money() {} //деструктор
int getrub() {return rub;} //получение количества рублей
int getkop() {return kop;} //получение количества копеек
void setrub(long a) {rub=a;} //установка количества рублей
void setkop(int a) {kop=a;} //установка количества копеек
Money& operator = (Money& ); //перегрузка оператора присваивания
Money operator + (Money& Money1); //перегрузка оператора "+"
Money operator - (Money& Money1); //перегрузка оператора "-"
friend istream& operator>>(istream& in, Money& Money1); //дружественный внешний оператор ввода
friend ostream& operator<<(ostream& out, Money Money1); //дружественный внешний оператор вывода
};
3. Определение компонентных функций.
Money& Money::operator =(Money& Money1)
{
rub=Money1.rub;
kop=Money1.kop;
return *this;
}
Money Money::operator + (Money& Money1)
{
Money Money2;
Money2.rub=rub+Money1.rub+(kop+Money1.kop)/100;
Money2.kop=(kop+Money1.kop)%100;
return Money2;
}
Money Money::operator - (Money& Money1)
{
Money Money2;
Money2.rub=rub-Money1.rub+(100+kop-Money1.kop)/100+1;
Money2.kop=(100+kop-Money1.kop)%100;
return Money2;
}
4. Определение глобальных функций.
istream &operator >>(istream& in, Money& Money1)
{
cout<<"input rubli\n";
in>>Money1.rub;
cout<<"input kopejki\n";
in>>Money1.kop;
return in;
}
ostream &operator <<(ostream& out,Money Money1)
{
out<
return out;
}
5. Функция main()
void main()
{
char ch;
long r;
int k;
Money a; //конструктор по умолчанию
Money b(1000L); //конструктор с одним параметром типа int
Money c(130L,10); //конструктор с двумя параметрами типа long и типа int
Money d(c); //конструктор с одним параметром типа Money
cout<
cin>>a; //ввод переменной a
cin>>b; //ввод переменной b
cout<
r=a.getrub(); //получение количества минут из переменной a
k=a.getkop(); //получение количества секунд из переменной a
cout<
b.setrub(120L); //установка количества рублей в переменную b
b.setkop(34); //установка количества копеек в переменную b
cout<
a=c+d;
cout<
a=a+d-b;
cout<
cin>>ch;
}
6. Результаты работы программы
0,00
1000,00
130,10
130,10
input rubli
12
input kopejki
45
input rubli
2000
input kopejki
00
12,45
2000,00
130,10
130,10
12 45
120,34
260,20
271,96
7.
-
Дружественные функции и классы используются для обращения функций – не членов класса к закрытым членам класса.
-
Дружественная функция объявляется внутри класса. Перед описанием добавляется ключевое слово friend. Дружественная функция не является функцией-членом класса, в котором объявляется, однако имеет доступ к закрытым членам этого класса. Дружественная функция может быть членом другого класса.
-
Префиксный унарный оператор можно перегрузить либо как функцию-член класса, не имеющую параметров, либо как глобальную дружественную функцию с одним параметром имеющим тип класса, для которого она перегружается.
Постфиксный унарный оператор, в отличие от префиксного имеет дополнительный параметр типа int, который не нужен лишь для отличия в описании перегруженных операторов.
-
Унарный оператор, определяемый внутри класса, не имеет операндов кроме случаев постфиксных операторов инкремента и декремента.
-
Унарный оператор, определяемый вне класса должен иметь один операнд данного класса.
-
Бинарный оператор, определяемый внутри класса, будет иметь один операнд.
-
Бинарный оператор, определяемый вне класса, будет иметь два операнда.
-
Операция присваивания возвращает ссылку на переменную, которой было присвоено значение.
-
Операция присваивания перегружается как бинарная функция-член класса, получающая в качестве параметра переменную этого же класса и возвращающая ссылку на переменную, которой было присвоено значение.
-
Операция присваивания возвращает ссылку на переменную, которой было присвоено значение.
-
Операции ввода-вывода перегружаются созданием дружественных функций – членов классов, определяющих потоки ввода-вывода.
-
Компилятор будет воспринимать вызов оператора как вызов функции-члена класса Student, имеющую 1 параметр – ссылку на тип Student, и возвращающую ссылку на тип Student.
-
Компилятор будет воспринимать вызов оператора как вызов дружественной для класса Student функции, имеющую 1 параметр – ссылку на тип Student, и возвращающую ссылку на тип Student.
-
Компилятор будет воспринимать вызов оператора как вызов функции-члена класса Student, имеющую 2 параметра – ссылки на тип Student, и возвращающую значение типа bool.
-
Компилятор будет воспринимать вызов оператора как вызов дружественной для класса Student функции, имеющую 2 параметра – ссылки на тип Student, и возвращающую значение типа bool.
Лабораторная работа №6
1. Постановка задачи:
1) Определить класс-контейнер МНОЖЕСТВО с элементами типа int.
2) Реализовать конструкторы, деструктор, операции ввода-вывода, операцию присваивания.
3) Реализовать следующие перегруженные операции:
-
[] – доступа по индексу;
-
int() – определение размеров множества;
-
+ - объединение множеств;
-
++ – переход вправо к следующему элементу (с помощью класса-итератора).
4) Реализовать класс-итератор. Реализовать с его помощью операции последовательного доступа.
5)Написать тестирующую программу, иллюстрирующую выполнение операций.
2. Описание класса-контейнера.
class My_Set
{
int size; //размер множества
int *data; //указатель на массив значений элементов множества
Iterator begin; //указатель на первый элемент множества
Iterator end; //указатель на элемент, следующий за последним
public:
My_Set(); //Конструктор - пустое множество
My_Set(int n); //Конструктор с параметром типа int
My_Set(My_Set& set1); //конструктор с параметром типа My_Set
My_Set(); //деструктор
My_Set& operator=(My_Set & set1); //перегруженный оператор присваивания
int operator[](int n); //перегруженный оператор обращения к элементу множества
int operator() (); //размер множества
My_Set operator+ (My_Set& set1); //перегруженный оператор объединения множеств
friend istream& operator >>(istream& input,My_Set& set1); //перегруженный оператор ввода
friend ostream& operator <<(ostream& output,My_Set& set1); //перегруженный оператор вывода
Iterator first() {return begin;} //извлекает указатель на первый элемент
Iterator last() {return end;} //извлекает указатель на элемент, следующий за последним
};
3) Описание компонентных и дружественных функций.
//Конструктор пустого множества
My_Set::My_Set()
{
size=0;
data=0;
//установление указателей на первый и последний элементы
begin.element=&data[0];
end.element=&data[size];
}
//конструктор с параметром типа int
My_Set::My_Set(int n)
{
size=n;
data=new int[size];
for(int i=0;i
data[i]=i;
//установление указателей на первый и последний элементы
begin.element=&data[0];
end.element=&data[size];
}
My_Set::My_Set(My_Set& set1) //конструктор с параметром типа My_Set
{
size=set1.size;
data=new int[size];
for(int i=0;i
data[i]=set1.data[i];
//установление указателей на первый и последний элементы
begin.element=&data[0];
end.element=&data[size];
}
My_Set::
My_Set() //деструктор
Федеральное агентство по образованию
Пермский государственный технический университет
Лабораторные работы на языке программирования СИ++
Выполнил студент:
Группы АСУзу-09-1
Дускаева Айгуль Халиловна
Проверила:
Викентьева Ольга Леонидовна
Пермь 2010
Содержание
Лабораторная работа №3
Лабораторная работа №6
Лабораторная работа №11
Лабораторная работа №13
Лабораторная работа №3
1. Постановка задачи.
-
Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя нолями: типа long для рублей и типа inl для копеек. Дробная часть числа при выводе на экран должна быть отделена от целой части запятой.
-
Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
-
Определить в классе деструктор.
-
Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы).
-
Перегрузить операцию присваивания.
-
Перегрузить операции ввода и вывода объектов с помощью потоков.
-
Перегрузить операции вычитания секунд и сравнение временных интервалов.
-
Написать программу, в которой продемонстрировать создание объектов и работу всех перегруженных функций.
2. Описание класса
class Money
{
long rub;
int kop;
public:
Money() {rub=0L;kop=0;} //конструктор без параметров
Money(int a) {rub=a; kop=0;} //конструктор с одним параметром типа int
Money(long a,int b) {rub=a; kop=b;} //конструктор с двумя параметром типа long и типа int
Money (Money& Money1) {rub=Money1.rub; kop=Money1.kop;} //конструктор с параметром типа Money
Money() {} //деструкторСоздать класс Money для работы с денежными суммами. Число должно быть представлено двумя нолями: типа long для рублей и типа inl для копеек. Дробная часть числа при выводе на экран должна быть отделена от целой части запятой.
Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
Определить в классе деструктор.
Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы).
Перегрузить операцию присваивания.
Перегрузить операции ввода и вывода объектов с помощью потоков.
Перегрузить операции вычитания секунд и сравнение временных интервалов.
Написать программу, в которой продемонстрировать создание объектов и работу всех перегруженных функций.
int getrub() {return rub;} //получение количества рублей
int getkop() {return kop;} //получение количества копеек
void setrub(long a) {rub=a;} //установка количества рублей
void setkop(int a) {kop=a;} //установка количества копеек
Money& operator = (Money& ); //перегрузка оператора присваивания
Money operator + (Money& Money1); //перегрузка оператора "+"
Money operator - (Money& Money1); //перегрузка оператора "-"
friend istream& operator>>(istream& in, Money& Money1); //дружественный внешний оператор ввода
friend ostream& operator<<(ostream& out, Money Money1); //дружественный внешний оператор вывода
};
3. Определение компонентных функций.
Money& Money::operator =(Money& Money1)
{
rub=Money1.rub;
kop=Money1.kop;
return *this;
}
Money Money::operator + (Money& Money1)
{
Money Money2;
Money2.rub=rub+Money1.rub+(kop+Money1.kop)/100;
Money2.kop=(kop+Money1.kop)%100;
return Money2;
}
Money Money::operator - (Money& Money1)
{
Money Money2;
Money2.rub=rub-Money1.rub+(100+kop-Money1.kop)/100+1;
Money2.kop=(100+kop-Money1.kop)%100;
return Money2;
}
4. Определение глобальных функций.
istream &operator >>(istream& in, Money& Money1)
{
cout<<"input rubli\n";
in>>Money1.rub;
cout<<"input kopejki\n";
in>>Money1.kop;
return in;
}
ostream &operator <<(ostream& out,Money Money1)
{
out<
return out;
}
5. Функция main()
void main()
{
char ch;
long r;
int k;
Money a; //конструктор по умолчанию
Money b(1000L); //конструктор с одним параметром типа int
Money c(130L,10); //конструктор с двумя параметрами типа long и типа int
Money d(c); //конструктор с одним параметром типа Money
cout<
cin>>a; //ввод переменной a
cin>>b; //ввод переменной b
cout<
r=a.getrub(); //получение количества минут из переменной a
k=a.getkop(); //получение количества секунд из переменной a
cout<
b.setrub(120L); //установка количества рублей в переменную b
b.setkop(34); //установка количества копеек в переменную b
cout<
a=c+d;
cout<
a=a+d-b;
cout<
cin>>ch;
}
6. Результаты работы программы
0,00
1000,00
130,10
130,10
input rubli
12
input kopejki
45
input rubli
2000
input kopejki
00
12,45
2000,00
130,10
130,10
12 45
120,34
260,20
271,96
7.
-
Дружественные функции и классы используются для обращения функций – не членов класса к закрытым членам класса. -
Дружественная функция объявляется внутри класса. Перед описанием добавляется ключевое слово friend. Дружественная функция не является функцией-членом класса, в котором объявляется, однако имеет доступ к закрытым членам этого класса. Дружественная функция может быть членом другого класса. -
Префиксный унарный оператор можно перегрузить либо как функцию-член класса, не имеющую параметров, либо как глобальную дружественную функцию с одним параметром имеющим тип класса, для которого она перегружается.
Постфиксный унарный оператор, в отличие от префиксного имеет дополнительный параметр типа int, который не нужен лишь для отличия в описании перегруженных операторов. -
Унарный оператор, определяемый внутри класса, не имеет операндов кроме случаев постфиксных операторов инкремента и декремента. -
Унарный оператор, определяемый вне класса должен иметь один операнд данного класса. -
Бинарный оператор, определяемый внутри класса, будет иметь один операнд. -
Бинарный оператор, определяемый вне класса, будет иметь два операнда. -
Операция присваивания возвращает ссылку на переменную, которой было присвоено значение. -
Операция присваивания перегружается как бинарная функция-член класса, получающая в качестве параметра переменную этого же класса и возвращающая ссылку на переменную, которой было присвоено значение. -
Операция присваивания возвращает ссылку на переменную, которой было присвоено значение. -
Операции ввода-вывода перегружаются созданием дружественных функций – членов классов, определяющих потоки ввода-вывода. -
Компилятор будет воспринимать вызов оператора как вызов функции-члена класса Student, имеющую 1 параметр – ссылку на тип Student, и возвращающую ссылку на тип Student. -
Компилятор будет воспринимать вызов оператора как вызов дружественной для класса Student функции, имеющую 1 параметр – ссылку на тип Student, и возвращающую ссылку на тип Student. -
Компилятор будет воспринимать вызов оператора как вызов функции-члена класса Student, имеющую 2 параметра – ссылки на тип Student, и возвращающую значение типа bool. -
Компилятор будет воспринимать вызов оператора как вызов дружественной для класса Student функции, имеющую 2 параметра – ссылки на тип Student, и возвращающую значение типа bool.
Лабораторная работа №6
1. Постановка задачи:
1) Определить класс-контейнер МНОЖЕСТВО с элементами типа int.
2) Реализовать конструкторы, деструктор, операции ввода-вывода, операцию присваивания.
3) Реализовать следующие перегруженные операции:
-
[] – доступа по индексу; -
int() – определение размеров множества; -
+ - объединение множеств; -
++ – переход вправо к следующему элементу (с помощью класса-итератора).
4) Реализовать класс-итератор. Реализовать с его помощью операции последовательного доступа.
5)Написать тестирующую программу, иллюстрирующую выполнение операций.
2. Описание класса-контейнера.
class My_Set
{
int size; //размер множества
int *data; //указатель на массив значений элементов множества
Iterator begin; //указатель на первый элемент множества
Iterator end; //указатель на элемент, следующий за последним
public:
My_Set(); //Конструктор - пустое множество
My_Set(int n); //Конструктор с параметром типа int
My_Set(My_Set& set1); //конструктор с параметром типа My_Set
{
delete[] data;
size=0;
}
My_Set& My_Set::operator=(My_Set& set1) //перегруженный оператор присваивания
{
if (this==&set1)
return *this; //проверка на самоприсваивание
if (size!=0)
delete [] data;
size=set1.size;
data=new int[size];
for(int i=0;i
data[i]=set1.data[i];
//установление указателей на первый и последний элементы
begin.element=&data[0];
end.element=&data[size];
return *this;
}
int My_Set::operator[](int n) //перегруженный оператор обращения к элементу множества
{
if (n<0 || n>=size)
{
cout<<"Index out of range"<
}
else
return data[n];
}
int My_Set::operator() () //длина множества
{
return size;
}
My_Set My_Set::operator+ (My_Set& set1) //перегруженный оператор объединения множеств
{
int newsize=0,i1=0,i2=0;
int *un;
un=new int[size+set1.size+1];
//******Слияние упорядоченных множеств*********
while (i1
{
if (data[i1]==set1.data[i2])
{
un[newsize++]=data[i1++];
i2++;
}
else
{
if (data[i1]>set1.data[i2])
un[newsize++]=set1.data[i2++];
else
if (data[i1]
un[newsize++]=data[i1++];
}
}
for (int i=i1;i
un[newsize++]=data[i];
for (int i=i2;i
un[newsize++]=set1.data[i];
//*****************************************
My_Set set2(newsize);
for (int i=0;i
set2.data[i]=un[i];
delete [] un;
//установление указателей на первый и последний элементы
set2.begin.element=&(set2.data[0]);
set2.end.element=&(set2.data[size]);
return set2;
}
istream& operator>>(istream& input,My_Set& set1) //перегруженный оператор ввода
{
int s,n,realsize,i,j,j1;
int *all;
cout<<"input size"<
input>>s;
if (s<0)
{
cout<<"Incorrect size"<
return input;
}
all=new int[s];
cout<<"input data"<
//****Ввод с упорядочением****
realsize=0;
for (i=0;i
{
input>>n;
j=0;
while (all[j]
j++;
if (all[j]!=n)
{
for(j1=realsize;j1>j;j1--)
all[j1]=all[j1-1];
all[j]=n;
realsize++;
}
}
//*****************************
if (realsize!=set1.size)
{
My_Set set2(realsize);
set1=set2;
}
set1.size=realsize;
for (i=0;i
set1.data[i]=all[i];
delete [] all;
return input;
}
ostream& operator <<(ostream& output,My_Set& set1) //перегруженный оператор вывода
{
for (int i=0;i
output<
return output;
}
4. Описание класса-итератора.
class Iterator
{
int *element; //указатель на элемент вектора
friend class My_Set; //объявление класса My_Set как дружественного
public:
Iterator() {element=0;} //создание пустого указателя
Iterator(Iterator& itt1) {element=itt1.element;} //создание указателя-копии
int& operator* () {return *element;} //перегруженный оператор разыменования указателя
int operator ==(Iterator& itt1) {return element==itt1.element;} //перегруженный оператор равенства
int operator !=(Iterator& itt1) {return element!=itt1.element;} //перегруженный оператор неравенства
Iterator& operator ++(int n); //сдвиг указателя на 1 позицию вправо
};
Компонентная функция класса-итератора.
/сдвиг указателя на одну позицию вправо
Iterator& Iterator::operator ++(int n)
{
element++;
return *this;
}
5. Функция main()
void main()
{
char ch;
My_Set a(5),b;
// создание множества с 5 элементами и пустого множества
cin>>b; //ввод множества b
cout<
cout<
cout<<"Size of set b is "<
My_Set d(a); //создание множества-копии из множества a
d=b+a; //множеству d присваивается объединение множества a и множества b
cout<
Iterator itt1,itt2;
itt1=d.first();
itt2=b.first();
cout<<"First elements of sets b and d are "<<*itt2<<" "<<*itt1<
cout<<"Set d"<
while (itt1!=d.last())
{
cout<<*itt1<<" "; //вывод очередного элемента
itt1++; // смещение к следующему элементу
}
cout<
cout<<"Press any key";
cin>>ch;
}
6. Результат работы программы:
input size
4
input data
1 5 2 9
0 1 2 3 4
1 2 5 9
Size of set b is 4
0 1 2 3 4 5 9
First elements of sets b and d are 1 0
Set d
0 1 2 3 4 5 9
Press any key
7.
1) Абстрактным называется тип данных, определяемый через операции, которые можно совершать над его содержимым. Представление содержащихся данных не имеет значения.
Примерами абстрактных типов могут служить функция или класс в C++.
2) Примером абстракции через параметризацию может являться функция.
3) Примером абстракции через спецификацию является класс.
4) Контейнером называется объект, содержащий набор однотипных элементов. Примерами контейнеров могут быть массив и список.
5) Основные группы операций с контейнерами:
-
операции доступа; -
операции добавления; -
операции поиска; -
операции объединения.
6) Доступ к элементам контейнера может быть последовательным, прямым или ассоциативным. Пример последовательного доступа – линейный список, пример произвольного доступа – массив.
7) Итератор – это объект, который обеспечивает последовательный доступ к элементам контейнера.
8) Итератор можно реализовать как набор функций – членов класса-контейнера или как самостоятельный класс.
9) Объединение контейнеров может быть реализовано следующими способами:
-
сцепление (последовательное добавление данных из второго контейнера); -
добавление в упорядоченный набор с сохранением порядка; -
добавление только элементов, не содержащихся в первом контейнере (объединение множеств). -
добавление только элементов, содержащихся в обоих контейнерах (пересечение множеств). -
удаление из первого контейнера данных, содержащихся во втором (вычитание множеств) -
извлечение части контейнера.
10) Контейнер, состоящий из элементов «ключ-значение» предоставляет ассоциативный доступ к данным.
11) Контейнер, в котором вставка и удаление элементов выполняется на одном конце, называется стек.
12) d int mas[100] – контейнер-массив из 100 элементов.
13) d int mas – переменная типа int, не являющаяся контейнером.
14) Доступ к элементам динамического массива будет прямым.
15) Доступ к линейному списку будет последовательным.
0>
Лабораторная работа №11
1. Постановка задачи.
Задача 1.
-
Создать последовательный контейнер – вектор.
-
Заполнить его элементами типа double.
-
Найти в векторе максимальный элемент и вставить его в начало вектора.
-
Удалить из вектора минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов вектора.
-
Выполнение заданий оформить в виде глобальных функций.
Задача 2.
-
Создать последовательный контейнер – вектор
-
Заполнить его элементами типа Money.
-
Найти в векторе максимальный элемент и вставить его в начало вектора.
-
Удалить из вектора минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов вектора.
-
Выполнение заданий оформить в виде глобальных функций.
Задача 3.
-
Создать параметризованный класс, используя в качестве контейнера множество
-
Заполнить его элементами типа Money.
-
Найти в множестве максимальный элемент и вставить его в начало вектора.
-
Удалить из множества минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов множества.
-
Выполнение заданий оформить в виде методов параметризованного класса.
Задача 4.
-
Создать адаптер контейнера – стек.
-
Заполнить его элементами типа Money, для которого перегрузить необходимые операции.
-
Найти в стеке максимальный элемент и вставить его в начало вектора.
-
Удалить из стека минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов стека.
-
Выполнение заданий оформить в виде глобальных функций.
Задача 5.
-
Создать параметризованный класс, используя в качестве контейнера адаптер контейнера – стек.
-
Найти в стеке максимальный элемент и вставить его в начало вектора.
-
Удалить из стека минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов стека.
-
Выполнение заданий оформить в виде методов параметризованного класса.
Задача 1.
2. Функции для выполнения заданий
typedef vector My_vector;
My_vector Create_vector(int n)
//создание списка, заполенного случайными данными
{
My_vector vector1;
for (int i=0;i
{
double a=(rand()%10000)/100.0-50.0;
vector1.push_back(a);
}
return vector1;
}
void print_vector(My_vector& vector1)
//вывод элементов вектора
{
My_vector::iterator it1,itend;
itend=vector1.end();
it1=vector1.begin();
while (it1!=itend)
cout<<*(it1++)<<" ";
cout<
}
double min_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmin,itend;
it1=itmin=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 <* itmin)
itmin=it1;
it1++;
}
return *itmin;
}
void ins(My_vector& vector1,double a,int n)
//добавление элемента a на позицию n
{
My_vector::iterator it1;
if (n>vector1.size()+1)
cout<<"No such position"<
else
{
it1=vector1.begin();
for (int i=0;i
it1++;
vector1.insert(it1,a);
}
}
double Avg(My_vector& vector1)
//нахождение среднего арифметического
{
My_vector::iterator it1,itend;
double a;
a=0;
it1=vector1.begin();
itend=vector1.end();
while (it1!=itend)
a+=*(it1++);
a/=vector1.size();
return a;
}
void Del_m(My_vector& vector1,double a)
//удаление элементов, равных a из вектора
{
My_vector::iterator it1;
it1=vector1.begin();
while (it1!=vector1.end())
{
if (*it1==a)
it1=vector1.erase(it1);
else
if (it1!=vector1.end())
it1++;
}
}
double max_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmax,itend;
it1=itmax=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 >* itmax)
itmax=it1;
it1++;
}
return *itmax;
}
void add(My_vector &vector1,double a)
//увеличение всех элементов вектора на число a
{
for (int i=0;i
vector1[i]+=a;
}
3. Функция main().
void main()
{
char ch;
try
{
vector vector1;
int n;
cout<<"Input the size of the vector"<
cin>>n;
vector1=Create_vector(n);
print_vector(vector1);
cout<<"After inserting max element"<
ins(vector1,max_el(vector1),1);
print_vector(vector1);
cout<<"After deleting min element"<
Del_m(vector1,min_el(vector1));
print_vector(vector1);
cout<<"With average added"<
add(vector1,Avg(vector1));
print_vector(vector1);
}
catch(int)
{
cout<<"Error";
}
cin>>ch;
}
4. Результаты работы программы:
Input the size of the vector
7
-49.59 34.67 13.34 15 41.69 7.24 -35.22
After inserting max element
41.69 -49.59 34.67 13.34 15 41.69 7.24 -35.22
After deleting min element
41.69 34.67 13.34 15 41.69 7.24 -35.22
With average added
58.6057 51.5857 30.2557 31.9157 58.6057 24.1557 -18.3043
Задача 2.
5. Описание класса
class Money
{
long rub;
int kop;
public:
Money() {rub=0L;kop=0;} //конструктор без параметров
Money(long a) {rub=a; kop=0;} //конструктор с одним параметром типа int
Money(long a,int b) {rub=a; kop=b;} //конструктор с двумя параметром типа long и типа int
Money (const Money& Money1) {rub=Money1.rub; kop=Money1.kop;} //конструктор с параметром типа Money
Money() {} //деструктор
int getrub() {return rub;} //получение количества рублей
int getkop() {return kop;} //получение количества копеек
void setrub(long a) {rub=a;} //установка количества рублей
void setkop(int a) {kop=a;} //установка количества копеек
Money& operator = (const Money& ); //перегрузка оператора присваивания
Money operator + (const Money& Money1) const; //перегрузка оператора "+"
Money operator - (const Money& Money1) const; //перегрузка оператора "-"
Money operator /(int k); //перегрузка оператора "/"
Money& operator +=(Money Money1); //перегрузка оператора "+="
Money& operator /=(int k); //перегрузка оператора "/="
bool operator ==(Money Money1) const; //перегрузка оператора "равно"
bool operator !=(Money Money1) const; //перегрузка оператора "не равно"
bool operator >(Money Money1) const; //перегрузка оператора "больше"
bool operator <(Money Money1) const; //перегрузка оператора "меньше"
friend istream& operator>>(istream& in, Money& Money1); //дружественный внешний оператор ввода
friend ostream& operator<<(ostream& out, Money Money1); //дружественный внешний оператор вывода
};
6. Определение компонентных функций и глобальных дружественных функций класса.
//Определение компонентных функций.
Money& Money::operator =(const Money& Money1)
{
rub=Money1.rub;
kop=Money1.kop;
return *this;
}
Money Money::operator + (const Money& Money1) const
{
Money Money2;
Money2.rub=rub+Money1.rub+(kop+Money1.kop)/100;
Money2.kop=(kop+Money1.kop)%100;
return Money2;
}
Money Money::operator - (const Money& Money1) const
{
Money Money2;
Money2.rub=rub-Money1.rub+(100+kop-Money1.kop)/100+1;
Money2.kop=(100+kop-Money1.kop)%100;
return Money2;
}
Money Money::operator / (int k)
{
Money time2;
long t=(100*rub+kop)/k;
time2.rub=t/100;
time2.kop=t%100;
return time2;
}
Money& Money::operator += (Money Money1)
{
long t;
t=100*(rub+Money1.rub)+kop+Money1.kop;
rub=t/100;
kop=t%100;
return *this;
}
Money& Money::operator /= (int k)
{
long t=(100*rub+kop)/k;
rub=t/100;
kop=t%100;
return *this;
}
bool Money::operator ==(Money Money1) const
{
if ((rub*100+kop)==(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
bool Money::operator !=(Money Money1) const
{
if ((rub*100+kop)!=(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
bool Money::operator >(Money Money1) const
{
if ((rub*100+kop)>(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
bool Money::operator <(Money Money1) const
{
if ((rub*100+kop)<(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
// Определение глобальных функций.
istream &operator >>(istream& in, Money& Money1)
{
cout<<"input rubli\n";
in>>Money1.rub;
cout<<"input kopejki\n";
in>>Money1.kop;
return in;
}
ostream &operator <<(ostream& out,Money Money1)
{
out<
return out;
}
7. Глобальные функции для выполнения заданий.
typedef vector My_vector;
My_vector Create_vector(int n)
//создание списка, заполенного случайными данными
{
My_vector vector1;
Money a;
long t;
for (int i=0;i
{
t=rand()%10000;
a.setrub(t/100);
a.setkop(t%100);
vector1.push_back(a);
}
return vector1;
}
void print_vector(My_vector& vector1)
//вывод элементов вектора
{
My_vector::iterator it1,itend;
itend=vector1.end();
it1=vector1.begin();
while (it1!=itend)
cout<<*(it1++)<<" ";
cout<
}
Money min_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmin,itend;
it1=itmin=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 <* itmin)
itmin=it1;
it1++;
}
return *itmin;
}
void ins(My_vector& vector1,Money a,int n)
//добавление элемента a на позицию n
{
My_vector::iterator it1;
if (n>vector1.size()+1)
cout<<"No such position"<
else
{
it1=vector1.begin();
for (int i=0;i
it1++;
vector1.insert(it1,a);
}
}
Money Avg(My_vector& vector1)
//нахождение среднего арифметического
{
My_vector::iterator it1,itend;
Money a;
a=0;
it1=vector1.begin();
itend=vector1.end();
while (it1!=itend)
a+=*(it1++);
a/=vector1.size();
return a;
}
void Del_m(My_vector& vector1,Money a)
//удаление элементов, равных a из вектора
{
My_vector::iterator it1;
it1=vector1.begin();
while (it1!=vector1.end())
{
if (*it1==a)
it1=vector1.erase(it1);
else
if (it1!=vector1.end())
it1++;
}
}
Money max_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmax,itend;
it1=itmax=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 >* itmax)
itmax=it1;
it1++;
}
return *itmax;
}
void add(My_vector &vector1,Money a)
//увеличение всех элементов вектора на число a
{
for (int i=0;i
vector1[i]+=a;
}
8. Функция main()
void main()
{
char ch;
try
{
vector vector1;
int n;
cout<<"Input the size of the vector"<
cin>>n;
vector1=Create_vector(n);
print_vector(vector1);
cout<<"After inserting max element"<
ins(vector1,max_el(vector1),1);
print_vector(vector1);
cout<<"After deleting min element"<
Del_m(vector1,min_el(vector1));
print_vector(vector1);
cout<<"With average added"<
add(vector1,Avg(vector1));
print_vector(vector1);
}
catch(int)
{
cout<<"Error";
}
cin>>ch;
}
9. Результаты работы программы
Input the size of the vector
10
0,41 84,67 63,34 65,00 91,69 57,24 14,78 93,58 69,62 44,64
After inserting max element
93,58 0,41 84,67 63,34 65,00 91,69 57,24 14,78 93,58 69,62 44,64
After deleting min element
93,58 84,67 63,34 65,00 91,69 57,24 14,78 93,58 69,62 44,64
With average added
161,39 152,48 131,15 132,81 159,50 125,05 82,59 161,39 137,43 112,45
Задача 3.
10. Описание параметризованного класса.
template
class My_Set
{
int len; //длина контейнера
set c_set; //контейнер элементов множества
public:
My_Set(); //Конструктор - пустое множество
My_Set(int n); //Конструктор с параметром типа int
My_Set(); //деструктор
void prn(); //печать элементов контейнера
T min_el(); //величина минимального элемента
T max_el(); //величина максимального элемента
T Avg(); //среднее арифметическое элементов контейнера
void Del_m(T a); //удаление элементов,равных a
void ins(T a); //вставка элемента a
void add(T a); //увеличение всех элементов контейнера на величину a
};
template
My_Set::My_Set() {len=0;}
template
My_Set::My_Set(int s)
{
T a;
len=s;
for(int i=0;i
{
cin>>a;
c_set.insert(a);
}
}
template
My_Set::
My_Set() //деструктор
Лабораторная работа №11
1. Постановка задачи.
Задача 1.
-
Создать последовательный контейнер – вектор.
-
Заполнить его элементами типа double.
-
Найти в векторе максимальный элемент и вставить его в начало вектора.
-
Удалить из вектора минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов вектора.
-
Выполнение заданий оформить в виде глобальных функций.
Задача 2.
-
Создать последовательный контейнер – вектор
-
Заполнить его элементами типа Money.
-
Найти в векторе максимальный элемент и вставить его в начало вектора.
-
Удалить из вектора минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов вектора.
-
Выполнение заданий оформить в виде глобальных функций.
Задача 3.
-
Создать параметризованный класс, используя в качестве контейнера множество
-
Заполнить его элементами типа Money.
-
Найти в множестве максимальный элемент и вставить его в начало вектора.
-
Удалить из множества минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов множества.
-
Выполнение заданий оформить в виде методов параметризованного класса.
Задача 4.
-
Создать адаптер контейнера – стек.
-
Заполнить его элементами типа Money, для которого перегрузить необходимые операции.
-
Найти в стеке максимальный элемент и вставить его в начало вектора.
-
Удалить из стека минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов стека.
-
Выполнение заданий оформить в виде глобальных функций.
Задача 5.
-
Создать параметризованный класс, используя в качестве контейнера адаптер контейнера – стек.
-
Найти в стеке максимальный элемент и вставить его в начало вектора.
-
Удалить из стека минимальный элемент.
-
Добавить к каждому элементу среднее арифметическое всех элементов стека.
-
Выполнение заданий оформить в виде методов параметризованного класса.
Задача 1.
2. Функции для выполнения заданий
typedef vector My_vector;
My_vector Create_vector(int n)
//создание списка, заполенного случайными данными
{
My_vector vector1;
for (int i=0;i
{
double a=(rand()%10000)/100.0-50.0;
vector1.push_back(a);
}
return vector1;
}
void print_vector(My_vector& vector1)
//вывод элементов вектора
{
My_vector::iterator it1,itend;
itend=vector1.end();
it1=vector1.begin();
while (it1!=itend)
cout<<*(it1++)<<" ";
cout<
}
double min_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmin,itend;
it1=itmin=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 <* itmin)
itmin=it1;
it1++;
}
return *itmin;
}
void ins(My_vector& vector1,double a,int n)
//добавление элемента a на позицию n
{
My_vector::iterator it1;
if (n>vector1.size()+1)
cout<<"No such position"<
else
{
it1=vector1.begin();
for (int i=0;i
it1++;
vector1.insert(it1,a);
}
}
double Avg(My_vector& vector1)
//нахождение среднего арифметического
{
My_vector::iterator it1,itend;
double a;
a=0;
it1=vector1.begin();
itend=vector1.end();
while (it1!=itend)
a+=*(it1++);
a/=vector1.size();
return a;
}
void Del_m(My_vector& vector1,double a)
//удаление элементов, равных a из вектора
{
My_vector::iterator it1;
it1=vector1.begin();
while (it1!=vector1.end())
{
if (*it1==a)
it1=vector1.erase(it1);
else
if (it1!=vector1.end())
it1++;
}
}
double max_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmax,itend;
it1=itmax=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 >* itmax)
itmax=it1;
it1++;
}
return *itmax;
}
void add(My_vector &vector1,double a)
//увеличение всех элементов вектора на число a
{
for (int i=0;i
vector1[i]+=a;
}
3. Функция main().
void main()
{
char ch;
try
{
vector vector1;
int n;
cout<<"Input the size of the vector"<
cin>>n;
vector1=Create_vector(n);
print_vector(vector1);
cout<<"After inserting max element"<
ins(vector1,max_el(vector1),1);
print_vector(vector1);
cout<<"After deleting min element"<
Del_m(vector1,min_el(vector1));
print_vector(vector1);
cout<<"With average added"<
add(vector1,Avg(vector1));
print_vector(vector1);
}
catch(int)
{
cout<<"Error";
}
cin>>ch;
}
4. Результаты работы программы:
Input the size of the vector
7
-49.59 34.67 13.34 15 41.69 7.24 -35.22
After inserting max element
41.69 -49.59 34.67 13.34 15 41.69 7.24 -35.22
After deleting min element
41.69 34.67 13.34 15 41.69 7.24 -35.22
With average added
58.6057 51.5857 30.2557 31.9157 58.6057 24.1557 -18.3043
Задача 2.
5. Описание класса
class Money
{
long rub;
int kop;
public:
Money() {rub=0L;kop=0;} //конструктор без параметров
Money(long a) {rub=a; kop=0;} //конструктор с одним параметром типа int
Money(long a,int b) {rub=a; kop=b;} //конструктор с двумя параметром типа long и типа int
Money (const Money& Money1) {rub=Money1.rub; kop=Money1.kop;} //конструктор с параметром типа Money
Money() {} //деструкторСоздать последовательный контейнер – вектор.
Заполнить его элементами типа double.
Найти в векторе максимальный элемент и вставить его в начало вектора.
Удалить из вектора минимальный элемент.
Добавить к каждому элементу среднее арифметическое всех элементов вектора.
Выполнение заданий оформить в виде глобальных функций.
Создать последовательный контейнер – вектор
Заполнить его элементами типа Money.
Найти в векторе максимальный элемент и вставить его в начало вектора.
Удалить из вектора минимальный элемент.
Добавить к каждому элементу среднее арифметическое всех элементов вектора.
Выполнение заданий оформить в виде глобальных функций.
Создать параметризованный класс, используя в качестве контейнера множество
Заполнить его элементами типа Money.
Найти в множестве максимальный элемент и вставить его в начало вектора.
Удалить из множества минимальный элемент.
Добавить к каждому элементу среднее арифметическое всех элементов множества.
Выполнение заданий оформить в виде методов параметризованного класса.
Создать адаптер контейнера – стек.
Заполнить его элементами типа Money, для которого перегрузить необходимые операции.
Найти в стеке максимальный элемент и вставить его в начало вектора.
Удалить из стека минимальный элемент.
Добавить к каждому элементу среднее арифметическое всех элементов стека.
Выполнение заданий оформить в виде глобальных функций.
Создать параметризованный класс, используя в качестве контейнера адаптер контейнера – стек.
Найти в стеке максимальный элемент и вставить его в начало вектора.
Удалить из стека минимальный элемент.
Добавить к каждому элементу среднее арифметическое всех элементов стека.
Выполнение заданий оформить в виде методов параметризованного класса.
My_vector Create_vector(int n)
//создание списка, заполенного случайными данными
{
My_vector vector1;
for (int i=0;i
{
double a=(rand()%10000)/100.0-50.0;
vector1.push_back(a);
}
return vector1;
}
void print_vector(My_vector& vector1)
//вывод элементов вектора
{
My_vector::iterator it1,itend;
itend=vector1.end();
it1=vector1.begin();
while (it1!=itend)
cout<<*(it1++)<<" ";
cout<
}
double min_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmin,itend;
it1=itmin=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 <* itmin)
itmin=it1;
it1++;
}
return *itmin;
}
void ins(My_vector& vector1,double a,int n)
//добавление элемента a на позицию n
{
My_vector::iterator it1;
if (n>vector1.size()+1)
cout<<"No such position"<
else
{
it1=vector1.begin();
for (int i=0;i
it1++;
vector1.insert(it1,a);
}
}
double Avg(My_vector& vector1)
//нахождение среднего арифметического
{
My_vector::iterator it1,itend;
double a;
a=0;
it1=vector1.begin();
itend=vector1.end();
while (it1!=itend)
a+=*(it1++);
a/=vector1.size();
return a;
}
void Del_m(My_vector& vector1,double a)
//удаление элементов, равных a из вектора
{
My_vector::iterator it1;
it1=vector1.begin();
while (it1!=vector1.end())
{
if (*it1==a)
it1=vector1.erase(it1);
else
if (it1!=vector1.end())
it1++;
}
}
double max_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmax,itend;
it1=itmax=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 >* itmax)
itmax=it1;
it1++;
}
return *itmax;
}
void add(My_vector &vector1,double a)
//увеличение всех элементов вектора на число a
{
for (int i=0;i
vector1[i]+=a;
}
3. Функция main().
void main()
{
char ch;
try
{
vector
int n;
cout<<"Input the size of the vector"<
cin>>n;
vector1=Create_vector(n);
print_vector(vector1);
cout<<"After inserting max element"<
ins(vector1,max_el(vector1),1);
print_vector(vector1);
cout<<"After deleting min element"<
Del_m(vector1,min_el(vector1));
print_vector(vector1);
cout<<"With average added"<
add(vector1,Avg(vector1));
print_vector(vector1);
}
catch(int)
{
cout<<"Error";
}
cin>>ch;
}
4. Результаты работы программы:
Input the size of the vector
7
-49.59 34.67 13.34 15 41.69 7.24 -35.22
After inserting max element
41.69 -49.59 34.67 13.34 15 41.69 7.24 -35.22
After deleting min element
41.69 34.67 13.34 15 41.69 7.24 -35.22
With average added
58.6057 51.5857 30.2557 31.9157 58.6057 24.1557 -18.3043
Задача 2.
5. Описание класса
class Money
{
long rub;
int kop;
public:
Money() {rub=0L;kop=0;} //конструктор без параметров
Money(long a) {rub=a; kop=0;} //конструктор с одним параметром типа int
Money(long a,int b) {rub=a; kop=b;} //конструктор с двумя параметром типа long и типа int
Money (const Money& Money1) {rub=Money1.rub; kop=Money1.kop;} //конструктор с параметром типа Money
int getrub() {return rub;} //получение количества рублей
int getkop() {return kop;} //получение количества копеек
void setrub(long a) {rub=a;} //установка количества рублей
void setkop(int a) {kop=a;} //установка количества копеек
Money& operator = (const Money& ); //перегрузка оператора присваивания
Money operator + (const Money& Money1) const; //перегрузка оператора "+"
Money operator - (const Money& Money1) const; //перегрузка оператора "-"
Money operator /(int k); //перегрузка оператора "/"
Money& operator +=(Money Money1); //перегрузка оператора "+="
Money& operator /=(int k); //перегрузка оператора "/="
bool operator ==(Money Money1) const; //перегрузка оператора "равно"
bool operator !=(Money Money1) const; //перегрузка оператора "не равно"
bool operator >(Money Money1) const; //перегрузка оператора "больше"
bool operator <(Money Money1) const; //перегрузка оператора "меньше"
friend istream& operator>>(istream& in, Money& Money1); //дружественный внешний оператор ввода
friend ostream& operator<<(ostream& out, Money Money1); //дружественный внешний оператор вывода
};
6. Определение компонентных функций и глобальных дружественных функций класса.
//Определение компонентных функций.
Money& Money::operator =(const Money& Money1)
{
rub=Money1.rub;
kop=Money1.kop;
return *this;
}
Money Money::operator + (const Money& Money1) const
{
Money Money2;
Money2.rub=rub+Money1.rub+(kop+Money1.kop)/100;
Money2.kop=(kop+Money1.kop)%100;
return Money2;
}
Money Money::operator - (const Money& Money1) const
{
Money Money2;
Money2.rub=rub-Money1.rub+(100+kop-Money1.kop)/100+1;
Money2.kop=(100+kop-Money1.kop)%100;
return Money2;
}
Money Money::operator / (int k)
{
Money time2;
long t=(100*rub+kop)/k;
time2.rub=t/100;
time2.kop=t%100;
return time2;
}
Money& Money::operator += (Money Money1)
{
long t;
t=100*(rub+Money1.rub)+kop+Money1.kop;
rub=t/100;
kop=t%100;
return *this;
}
Money& Money::operator /= (int k)
{
long t=(100*rub+kop)/k;
rub=t/100;
kop=t%100;
return *this;
}
bool Money::operator ==(Money Money1) const
{
if ((rub*100+kop)==(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
bool Money::operator !=(Money Money1) const
{
if ((rub*100+kop)!=(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
bool Money::operator >(Money Money1) const
{
if ((rub*100+kop)>(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
bool Money::operator <(Money Money1) const
{
if ((rub*100+kop)<(Money1.rub*100+Money1.kop))
return true;
else
return false;
}
// Определение глобальных функций.
istream &operator >>(istream& in, Money& Money1)
{
cout<<"input rubli\n";
in>>Money1.rub;
cout<<"input kopejki\n";
in>>Money1.kop;
return in;
}
ostream &operator <<(ostream& out,Money Money1)
{
out<
return out;
}
7. Глобальные функции для выполнения заданий.
typedef vector
My_vector Create_vector(int n)
//создание списка, заполенного случайными данными
{
My_vector vector1;
Money a;
long t;
for (int i=0;i
{
t=rand()%10000;
a.setrub(t/100);
a.setkop(t%100);
vector1.push_back(a);
}
return vector1;
}
void print_vector(My_vector& vector1)
//вывод элементов вектора
{
My_vector::iterator it1,itend;
itend=vector1.end();
it1=vector1.begin();
while (it1!=itend)
cout<<*(it1++)<<" ";
cout<
}
Money min_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmin,itend;
it1=itmin=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 <* itmin)
itmin=it1;
it1++;
}
return *itmin;
}
void ins(My_vector& vector1,Money a,int n)
//добавление элемента a на позицию n
{
My_vector::iterator it1;
if (n>vector1.size()+1)
cout<<"No such position"<
else
{
it1=vector1.begin();
for (int i=0;i
it1++;
vector1.insert(it1,a);
}
}
Money Avg(My_vector& vector1)
//нахождение среднего арифметического
{
My_vector::iterator it1,itend;
Money a;
a=0;
it1=vector1.begin();
itend=vector1.end();
while (it1!=itend)
a+=*(it1++);
a/=vector1.size();
return a;
}
void Del_m(My_vector& vector1,Money a)
//удаление элементов, равных a из вектора
{
My_vector::iterator it1;
it1=vector1.begin();
while (it1!=vector1.end())
{
if (*it1==a)
it1=vector1.erase(it1);
else
if (it1!=vector1.end())
it1++;
}
}
Money max_el(My_vector &vector1)
//поиск минимального элемента
{
My_vector::iterator it1,itmax,itend;
it1=itmax=vector1.begin();
itend=vector1.end();
while (it1!=itend)
{
if (*it1 >* itmax)
itmax=it1;
it1++;
}
return *itmax;
}
void add(My_vector &vector1,Money a)
//увеличение всех элементов вектора на число a
{
for (int i=0;i
vector1[i]+=a;
}
8. Функция main()
void main()
{
char ch;
try
{
vector
int n;
cout<<"Input the size of the vector"<
cin>>n;
vector1=Create_vector(n);
print_vector(vector1);
cout<<"After inserting max element"<
ins(vector1,max_el(vector1),1);
print_vector(vector1);
cout<<"After deleting min element"<
Del_m(vector1,min_el(vector1));
print_vector(vector1);
cout<<"With average added"<
add(vector1,Avg(vector1));
print_vector(vector1);
}
catch(int)
{
cout<<"Error";
}
cin>>ch;
}
9. Результаты работы программы
Input the size of the vector
10
0,41 84,67 63,34 65,00 91,69 57,24 14,78 93,58 69,62 44,64
After inserting max element
93,58 0,41 84,67 63,34 65,00 91,69 57,24 14,78 93,58 69,62 44,64
After deleting min element
93,58 84,67 63,34 65,00 91,69 57,24 14,78 93,58 69,62 44,64
With average added
161,39 152,48 131,15 132,81 159,50 125,05 82,59 161,39 137,43 112,45
Задача 3.
10. Описание параметризованного класса.
template
class My_Set
{
int len; //длина контейнера
set
public:
My_Set(); //Конструктор - пустое множество
My_Set(int n); //Конструктор с параметром типа int
My_Set
template
My_Set
{
T a;
len=s;
for(int i=0;i
{
cin>>a;
c_set.insert(a);
}
}
template
My_Set