Как в моём коде можно реализовать сортировку и поиск по “степени риска”? Пишу небольшую программку с ооп и наследованием. Есть базовый класс и от него наследуются пять классов - видов страхование. Через меню необходимо вывести 3 пункта. 1 - Посмотреть виды страховок, 2 - Отсортировать по уменьшению степени риска, 3 - Найти по степени риска. Не получается сделать сортировку по степени риска и поиск. Подскажите, пожалуйста, как можно реализовать данные пункты?Файл Derivativ.h#pragma once
#include
#include
#include
class Derivativ
{
public:
Derivativ();
Derivativ(const char* n, int t, const char* o, const char* v, int s);
Derivativ(const Derivativ& t);
const char* getname() const;
int getterm()const;
const char* getoblig() const;
const char* getvariety() const;
int getstep()const;
virtual void Show();
virtual double Summa();
virtual ~Derivativ();
protected:
char* name;
int term;
char* oblig;
char* variety;
int step;
};
class Live : public Derivativ
{
public:
Live();
Live(const char* n, int t, const char* o, const char* v, int s);
Live(const Derivativ& t);
void Show() override;
double Summa() override;
virtual ~Live();
};
class Medicine : public Derivativ
{
public:
Medicine();
Medicine(const char* n, int t, const char* o, const char* v, int s);
Medicine(const Derivativ& t);
void Show() override;
double Summa() override;
virtual ~Medicine();
};
class Ncase : public Derivativ
{
public:
Ncase();
Ncase(const char* n, int t, const char* o, const char* v, int s);
Ncase(const Derivativ& t);
void Show() override;
double Summa() override;
virtual ~Ncase();
};
class Property : public Derivativ
{
public:
Property();
Property(const char* n, int t, const char* o, const char* v, int s);
Property(const Derivativ& t);
void Show() override;
double Summa() override;
virtual ~Property();
};
class CivilLiab : public Derivativ
{
public:
CivilLiab();
CivilLiab(const char* n, int t, const char* o, const char* v, int s);
CivilLiab(const Derivativ& t);
void Show() override;
double Summa() override;
virtual ~CivilLiab();
};Файл Derivativ.cpp#define _CRT_SECURE_NO_WARNINGS
#include "Derivativ.h"
#include
#include
#include
using namespace std;
Derivativ::Derivativ()
{
name = 0;
term = 0;
oblig = 0;
variety = 0;
step = 0;
}
Derivativ::Derivativ(const char* n, int t, const char* o, const char* v, int s)
: name(new char[strlen(n) + 1]), term(t), oblig(new char[strlen(o) + 1]), variety(new char[strlen(v) + 1]), step(s)
{
strcpy(name, n);
strcpy(oblig, o);
strcpy(variety, v);
}
Derivativ::Derivativ(const Derivativ& t)
: name(new char[strlen(t.name) + 1]), term(t.term), oblig(new char[strlen(t.oblig) + 1]), variety(new char[strlen(t.variety) + 1]), step(t.step)
{
strcpy(name, t.name);
strcpy(oblig, t.oblig);
strcpy(variety, t.variety);
}
void Derivativ::Show()
{ }
double Derivativ::Summa()
{
return 0;
}
Derivativ::~Derivativ()
{
delete[] name;
delete[] oblig;
delete[] variety;
}
const char* Derivativ::getname() const
{
return name;
}
int Derivativ::getterm() const
{
return term;
}
const char* Derivativ::getoblig() const
{
return oblig;
}
const char* Derivativ::getvariety() const
{
return variety;
}
int Derivativ::getstep() const
{
return step;
}
Live::Live() :Derivativ()
{ }
Live::Live(const char* n, int t, const char* o, const char* v, int s) : Derivativ(n, t, o, v, s)
{ }
Live::Live(const Derivativ& t) : Derivativ(t)
{ }
void Live::Show()
{
cout << "Страхование жизни";
}
double Live::Summa()
{
return 10000 * term + 518;
}
Live::~Live()
{ }
Medicine::Medicine() :Derivativ()
{ }
Medicine::Medicine(const char* n, int t, const char* o, const char* v, int s) : Derivativ(n, t, o, v, s)
{ }
Medicine::Medicine(const Derivativ& t) : Derivativ(t)
{ }
void Medicine::Show()
{
cout << "Медицинское страхование";
}
double Medicine::Summa()
{
return 5000 * term + 482;
}
Medicine::~Medicine()
{ }
Ncase::Ncase() :Derivativ()
{ }
Ncase::Ncase(const char* n, int t, const char* o, const char* v, int s) : Derivativ(n, t, o, v, s)
{ }
Ncase::Ncase(const Derivativ& t) : Derivativ(t)
{ }
void Ncase::Show()
{
cout << "Страхование от несчастных случаев";
}
double Ncase::Summa()
{
return 6500 * term + 491;
}
Ncase::~Ncase()
{ }
Property::Property() :Derivativ()
{ }
Property::Property(const char* n, int t, const char* o, const char* v, int s) : Derivativ(n, t, o, v, s)
{ }
Property::Property(const Derivativ& t) : Derivativ(t)
{ }
void Property::Show()
{
cout << "Страхование имущества";
}
double Property::Summa()
{
return 7400 * term + 504;
}
Property::~Property()
{ }
CivilLiab::CivilLiab() :Derivativ()
{ }
CivilLiab::CivilLiab(const char* n, int t, const char* o, const char* v, int s) : Derivativ(n, t, o, v, s)
{ }
CivilLiab::CivilLiab(const Derivativ& t) : Derivativ(t)
{ }
void CivilLiab::Show()
{
cout << "Страхование гражданской ответственности";
}
double CivilLiab::Summa()
{
return 6900 * term + 498;
}
CivilLiab ::~CivilLiab()
{ }Файл main.cpp#include
#include
#include "Derivativ.h"
#include
using namespace std;

void Menu() {
cout << "1 - Посмотреть виды страховок" << endl;
cout << "2 - Отсортировать по уменьшению степени риска" << endl;
cout << "3 - Найти по степени риска" << endl;
cout << "0 - Выход" << endl;
}

int main()
{
setlocale(LC_ALL, "Russian");

int c;

do {
Menu();
cout <> c;
switch (c) {
case 1:
system("cls");

Derivativ *ex[5];
ex[0] = new Live("Страхование жизни", 3, "Добровальное", "Личное", 5);
ex[1] = new Medicine("Медицинское страхование", 5, "Добровальное", "Личное", 3);
ex[2] = new Ncase("Страхование от несчастных случаев", 5, "Добровальное", "Личное", 4);
ex[3] = new Property("Страхование имущества", 1, "Добровальное", "Имущественное", 2);
ex[4] = new CivilLiab("Страхование гражданской ответственности", 1, "Добровальное", "Имущественное", 1);

for (int i = 0; i < 5; i++)
{
cout << "Номер: " << (i + 1) << endl;
//cout <Show();
cout << endl;
cout << "Название: " <getname() << endl;
cout << "Срок действия (в годах): " <getterm() << endl;
cout << "Добровалиное/обязательное:" <getoblig() << endl;
cout << "Разновидность: " <getvariety() << endl;
cout << "Степень риска: " <getstep() << endl;
cout << "Стоимость страховки: " <Summa() << endl;
cout << endl << endl;

}

for (int i = 0; i < 5; ++i)
delete ex[i];

break;
case 2:
system("cls");

break;
case 3:
system("cls");

break;
case 0:
break;
default: cout << "Некорректный вариант выбора!" <

21 Авг 2019 в 06:58
199 +1
0
Ответы
1

Для реализации сортировки по степени риска и поиска по степени риска вам нужно использовать стандартные функции сортировки и поиска в массиве объектов классов.

Для сортировки классов по уменьшению степени риска, можно воспользоваться стандартной функцией сортировки std::sort из библиотеки <algorithm>. Для этого объявите собственный компаратор, который будет сравнивать объекты по степени риска, и передайте его в функцию сортировки. Пример:

bool compareRisks(Derivativ* a, Derivativ* b) {
return a->getstep() < b->getstep();
}
// Внутри блока case 2 в функции main()
std::sort(ex, ex+5, compareRisks);

Для поиска по степени риска можно использовать стандартную функцию поиска std::find_if из библиотеки <algorithm>. Объявите собственный предикат, который будет проверять степень риска объекта, и передайте его в функцию поиска. Пример:

int searchRisk;
cout << "Введите степень риска для поиска: ";
cin >> searchRisk;
// Внутри блока case 3 в функции main()
auto it = std::find_if(ex, ex+5, [searchRisk](Derivativ* obj) {
return obj->getstep() == searchRisk;
});
if (it != ex+5) {
cout << "Найден объект с указанной степенью риска:" << endl;
cout << "Название: " << (*it)->getname() << endl;
// Вывод остальных параметров объекта
} else {
cout << "Объект с указанной степенью риска не найден." << endl;
}

Поместите данные коды в блоки case 2 и case 3 в функции main() соответственно.

Надеюсь, это поможет вам реализовать необходимые операции сортировки и поиска по степени риска в вашей программе.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир