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

Лабораторная работа №13

1. Постановка задачи. Задача 1.

  1. Создать последовательный контейнер – вектор.

  2. Заполнить его элементами типа Money, для которого перегрузить необходимые операции.

  3. Найти в векторе максимальный элемент и вставить его в начало вектора.

  4. Удалить из вектора минимальный элемент.

  5. Отсортировать вектор по убыванию и по возрастанию.

  6. Найти в векторе элемент с заданным количеством рублей.

  7. Добавить к каждому элементу среднее арифметическое всех элементов вектора.

  8. Для выполнения всех заданий использовать стандартные алгоритмы библиотеки STL.

Задача 2.

  1. Создать адаптер контейнера – стек.

  2. Заполнить его элементами типа Money, для которого перегрузить необходимые операции.

  3. Найти в стеке максимальный элемент и вставить его в начало вектора.

  4. Удалить из стека минимальный элемент.

  5. Отсортировать стек по убыванию и по возрастанию.

  6. Найти в стеке элемент с заданным количеством рублей.

  7. Добавить к каждому элементу среднее арифметическое всех элементов вектора.

  8. Для выполнения всех заданий использовать стандартные алгоритмы библиотеки STL.

Задача 3.

  1. Создать ассоциативный контейнер – множество с дубликатами.

  2. Заполнить его элементами типа Money, для которого перегрузить необходимые операции.

  3. Найти во множестве максимальный элемент и вставить его в начало множества.

  4. Удалить из множества минимальный элемент.

  5. Отсортировать множество по убыванию и по возрастанию.

  6. Найти в списке элемент с заданным количеством рублей.

  7. Добавить к каждому элементу среднее арифметическое всех элементов вектора.

  8. Для выполнения всех заданий использовать стандартные алгоритмы библиотеки STL.

2. Описание класса

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); //дружественный внешний оператор вывода

};

3. Определение компонентных функций и глобальных дружественных функций класса.

//Определение компонентных функций.

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

long t=(100*rub+kop)/k;

Money2.rub=t/100;

Money2.kop=t%100;

return Money2;

}

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<<Money1.rub<<","<<(Money1.kop)/10<<(Money1.kop)%10;

return out;

}