С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43

Найти самые популярные художественные книги и научные книги средней стоимостью

18.08.2020, 18:20. Показов 1890. Ответов 17

Студворк — интернет-сервис помощи студентам
Привет всем!

Если есть возможность и время, прошу помочь с задачей.

Заданы классы Book, FictionBook, ScientificBook. В классе Book задано название книги. Класс FictionBook наследуется от Book и в нем есть информация о проданных экземплярах и тираже. Класс ScientificBook наследуется от Book и в нем есть информация о цене, количестве страниц и количестве экземпляров, отданных в библиотеки.

Нужно написать функцию popularity, которая считает популярность художественных книг (по формуле (s/e)*(s/1000), где s- количество проданных экземпляров, e - тираж).
Нужно написать функцию expensive, которая считает степень дороговизны научных книг (по формуле цена/количество_страниц).

На входе программа получает число N - количество художественных книг, затем информацию о каждой книге
Пример:
2
Mumu
5000 4800
Samuel
10000 8600

Затем вводим число M - количество научных книг, затем информацию о каждой книге
Пример:
4
Cosmos
4000 1000 100
Sapiens: A Brief History of Humankind
10000 380 50
A Brief History of Time
7500 460 200
The Origin of Species
4000 400 500

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

То есть при данном примере выводиться:

Samuel
The Origin of Species




C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <string>
 
 
class Book 
{
 public:
  Book(): title() {}
  Book(std::string t);
  ~Book();
 protected:
  std::string title;
};
 
Book::Book(std::string t) : title(t) {}
 
Book::~Book() {}
 
 
 
class FictionBook : public Book 
{
 public:
  FictionBook():Book(""), selledCount(0), edition(0) {}
  FictionBook(std::string t, int sc, int e);
  ~FictionBook();
  std::string getTitle() {return title;}
  int getSelledCount() {return selledCount;}
  int getEdition() {return edition;}
  float popularity(FictionBook *FB, int N);
  float maxpopularity(FictionBook *FB, int N);
 protected:
  int selledCount;
  int edition;
};
 
FictionBook::FictionBook(std::string t, int sc, int e) :
  Book(t), selledCount(sc), edition(e) {}
 
FictionBook::~FictionBook() {}
 
 
 
 
class ScientificBook : public Book 
{
 public:
  ScientificBook():Book(""), price(0), pageCount(0), givenToLib(0) {}
  ScientificBook(std::string t, int p, int page, int g);
  ~ScientificBook();
  std::string getTitle() {return title;}
  int getPageCount() {return pageCount;}
  int getGivenToLib() {return givenToLib;}
  int getPrice() {return price;}
  double expensive(ScientificBook* SB, int M);
 protected:
  int price;
  int pageCount;
  int givenToLib;
};
 
ScientificBook::ScientificBook(std::string t, int p, int page, int g) :
  Book(t), price(p), pageCount(page), givenToLib(g) {}
 
ScientificBook::~ScientificBook() {}
 
 
 
 
int main() 
{
  int N, M;
  
  std::cin>>N;
  FictionBook* FB = new FictionBook[N];
  for(int i=0; i<N; i++)
  {
    std::string Title;
    int Selled;
    int Edition;
    std::cin>>Title>>Selled>>Edition;
    FB[i]=FictionBook(Title, Selled, Edition);
  }
 
  std::cin>>M;
  ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::cin>>Title>>Price>>PageCount>>GivenToLib;
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
  
 
  
    
 
  delete [] SB;
  delete [] FB; 
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2020, 18:20
Ответы с готовыми решениями:

Интересные книги: научные и художественные
Выкладываем здесь ссылочки на ваши любимые книги, описания их и т. д.. Тематика книг - любая. (Vourhey) Реальная Книжка!!! Советую...

Сравнить ФИО из книги 1 и книги 2, и если совпадают, то в столбец А книги 1, подставить данные из столбца В книги 2
Добрый день! Подскажите, как сделать-есть 2 книги. Нужно сравнить фамилии из книги 1 и книги 2 и если ФИО совпадает, то в столбец А книги...

Посоветуйте хорошие художественные книги и фильмы о программистах
Посоветуйте хорошие художественные книги и фильмы о программистах.

17
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
19.08.2020, 09:56  [ТС]
Ребят, ни у кого нет идей как реализовать функции? Помогите, пожалуйста
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
19.08.2020, 11:05
Написал только функцию для FictionBook, дальше ты можешь сам справится.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <string>
#include <vector>
 
 
 
class Book {
 
public:
    Book() :
        title_("N/A") { }
 
    Book(const std::string& title) :
        title_(title) { }
 
    const std::string& getTitle() const {
 
        return title_;
 
    }
 
    void setTitle(const std::string& title) {
 
        title_ = title;
 
    }
 
private:
    std::string title_;
 
};
 
class FictionBook : public Book {
 
public:
    FictionBook() :
        Book(), soldAmount_(0), edition_(0), popularity_(0) { }
 
    FictionBook(const std::string title, std::size_t amount, std::size_t edition) :
        Book(title), soldAmount_(amount), edition_(edition) {
    
        calculatePopularity();
 
    }
 
    std::size_t getSoldAmount() const {
 
        return soldAmount_;
 
    }
 
    std::size_t getEdition() const {
 
        return edition_;
 
    }
 
    void setSoldAmount(std::size_t soldAmount) {
 
        soldAmount_ = soldAmount;
 
        calculatePopularity();
 
    }
 
    void setEdition(std::size_t edition) {
 
        edition_ = edition;
 
        calculatePopularity();
 
    }
 
    double getPopularity() const {
 
        return popularity_;
 
    }
 
private:
    void calculatePopularity() {
 
        popularity_ = (double)soldAmount_ / double(edition_);
        popularity_ *= (double)soldAmount_ / 1000;
 
    }
 
private:
    std::size_t soldAmount_;
    std::size_t edition_;
    double popularity_;
 
};
 
FictionBook getMaxPopulationBook(const std::vector<FictionBook>& books) {
 
    double maxPopulation = 0.0;
    FictionBook result;
 
    for (const auto& book : books)
        if (maxPopulation < book.getPopularity())
            result = book;
 
    return result;
 
}
 
 
int main() {
 
    std::vector<FictionBook> books;
 
    books.emplace_back("Mumu", 4800, 5800);
    books.emplace_back("Samuel", 8600, 10000);
 
    
 
    std::cout << getMaxPopulationBook(books).getTitle() << '\n';
 
    return 0;
 
}
Добавлено через 9 минут
Обрати внимание, что и у тебя, и у меня в классе FictionBook первым полем идет количество проданных экземпляров, а вторым - тираж. Соответственно и в конструкторам мы инициализируем эти поля в таком же порядке. Но в приведенном тобой примере эти цифры идут в другом порядке.
Цитата Сообщение от Simonaakk Посмотреть сообщение
Mumu
5000 4800
Samuel
10000 8600
Логично, что количество проданных не может быть больше тиража.
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
19.08.2020, 20:06  [ТС]
Получился следующий код. Он вроде бы работает правильно, если ввожу только одно слово, или все слова без пробелов для научных книг.
То есть, если ввожу
2
Qaos
5000 4800
Samvel
10000 8600
4
Cosmos
4000 1000 100
Sapiens:
10000 380 50
Brief
7500 460 200
TheOrigin
4000 400 500
программа работает. А с пробелами работает неправильно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>
#include <string>
 
 
class Book 
{
 public:
  Book(): title() {}
  Book(std::string t);
  ~Book();
 protected:
  std::string title;
};
 
Book::Book(std::string t) : title(t) {}
 
Book::~Book() {}
 
 
 
class FictionBook : public Book 
{
 public:
  FictionBook():Book(""), edition(0), selledCount(0) {}
  FictionBook(std::string t, int e, int s);
  ~FictionBook();
  std::string getTitle() {return title;}
  int getSelledCount() {return selledCount;}
  int getEdition() {return edition;}
  
 
  double calculatePopularity() 
  {
 
        double popularity_ = (double)selledCount / double(edition);
        popularity_ *= (double)selledCount / 1000;
        return popularity_;
 
  }
 
 protected:
  int selledCount;
  int edition;
    
};
 
 
 
FictionBook::FictionBook(std::string t, int e, int sc) :
  Book(t), edition(e), selledCount(sc) {}
 
FictionBook::~FictionBook() {}
 
 
 
 
class ScientificBook : public Book 
{
 public:
  ScientificBook():Book(""), price(0), pageCount(0), givenToLib(0) {}
  ScientificBook(std::string t, int p, int page, int g);
  ~ScientificBook();
  std::string getTitle() {return title;}
  int getPageCount() {return pageCount;}
  int getGivenToLib() {return givenToLib;}
  int getPrice() {return price;}
  double expensive()
{
  double expens = (double) price/ double (pageCount);
  return expens;
}
 protected:
  int price;
  int pageCount;
  int givenToLib;
};
 
ScientificBook::ScientificBook(std::string t, int p, int page, int g) :
  Book(t), price(p), pageCount(page), givenToLib(g) {}
 
ScientificBook::~ScientificBook() {}
 
 
 
 
int main() 
{
  int N, M;
  
  std::cin>>N;
  FictionBook* FB = new FictionBook[N];
  for(int i=0; i<N; i++)
  {
    std::string Title;
    int Selled;
    int Edition;
    std::cin>>Title>>Edition>>Selled;
    FB[i]=FictionBook(Title, Edition,Selled);
  }
 
  std::cin>>M;
  ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::cin>>Title>>Price>>PageCount>>GivenToLib;
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
  std::cout<<"\n";
  double max=0;
  int maxI=0;
  
 
  for(int i=0; i<N; i++)
  {
    if(max<FB[i].calculatePopularity())
    {
      max=FB[i].calculatePopularity();
      maxI=i;
    }
  }
  std::cout<<FB[maxI].getTitle()<<"\n";
 
  double sred=0, sum=0;
  for(int i=0; i<M; i++)
  {
    sum+=SB[i].expensive();
    sred=sum/M;
  }
  
  int maxGiven=0;
  for(int i=0; i<M; i++)
  {
    if(SB[i].getGivenToLib()>maxGiven)
    maxGiven=SB[i].getGivenToLib();
  }
 
  for(int i=0; i<M; i++)
  {
    if(SB[i].expensive()<sred&&SB[i].getGivenToLib()==maxGiven)
    {
      std::cout<<SB[i].getTitle()<<"\n";
    }
  }
    
 
  delete [] SB;
  delete [] FB; 
}
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
19.08.2020, 21:21
Когда тебе нужно ввести строку с пробелами - используй функцию std::getline, вместо std::cin.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
int main() {
 
    std::string name;
 
    std::getline(std::cin, name, '\n');
    std::cout << name << '\n';
 
    return 0;
 
}
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
19.08.2020, 23:48  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cin>>M;
  ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::getline(std::cin, Title, '\n');
    std::cin>>Price>>PageCount>>GivenToLib;
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
Так не работает. Или я делаю что-то не так?
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
20.08.2020, 07:55
Цитата Сообщение от Simonaakk Посмотреть сообщение
Так не работает.
И что это значит?
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
20.08.2020, 09:49  [ТС]
У меня уже в голове нет идей, как можно исправить данную ошибку. Может кто-нибудь помочь?
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
20.08.2020, 09:55
Цитата Сообщение от Simonaakk Посмотреть сообщение
как можно исправить данную ошибку.
Какую данную? Как именно не работает?!
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
20.08.2020, 10:06  [ТС]
2
Qaos
5000 4800
Samvel
10000 8600
4
Cosmos
4000 1000 100
Sapiens: A Brief History of Humankind
10000 380 50
A Brief History of Time
7500 460 200
The Origin of Species
4000 400 500

Ввожу эти данные построчно. После ввода Cosmos, программа завершает работу и я не могу уже ввести остальные строчки.
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
20.08.2020, 10:17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string>
 
class ScientificBook {
 
public:
    ScientificBook() :
        title_("N/A"), price_(0.0), pageNumber_(0), lib_(0) { }
 
    ScientificBook(const std::string& title, double price, std::size_t pageNumber,
        std::size_t lib) :
        title_(title), price_(price), pageNumber_(pageNumber), lib_(lib) { }
 
public:
    std::string title_;
    double price_;
    std::size_t pageNumber_;
    std::size_t lib_;
 
};
 
 
int main() {
 
    std::size_t number = 0;
    std::cin >> number;
 
    ScientificBook* books = new ScientificBook[number];
 
    std::string title;
    double price;
    std::size_t pageNumber;
    std::size_t lib;
 
    for (int i = 0; i < number; i++) {
 
        
        std::getline(std::cin, title, '\n');
        while (std::cin.get() != '\n');
        std::cin >> price >> pageNumber >> lib;
        books[i] = ScientificBook(title, price, pageNumber, lib);
 
    }
 
    delete[] books;
 
}
Добавлено через 10 секунд
C++
1
while (std::cin.get() != '\n');
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,682
20.08.2020, 10:24
Simonaakk,
C++
1
(std::cin >> Price >> PageCount >> GivenToLib).get();
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
20.08.2020, 10:35
Дело ведь не в этой строчке.

Добавлено через 2 минуты
Хотя согласен, тут тоже нужно '\n' отбрасывать, иначе следующая книга будет выводиться с переносом строки.
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
20.08.2020, 15:41  [ТС]
Спасибо за помощь, но все равно не работает программа. Сейчас она выводит первое название.
Попробовал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cin>>M;
  ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::getline(std::cin, Title);
    (std::cin>>Title>>Price>>PageCount>>GivenToLib).get();
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
Так выводит только первое название.
Также написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::getline(std::cin, Title);
    while (std::cin.get() != '\n');
    std::cin>>Title>>Price>>PageCount>>GivenToLib;
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
Так в бесконечный цикл превращается и просит вводить что-то без конца.

Добавлено через 15 минут
Извиняюсь, наверху неправильный код прислал.

C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cin>>M;
  ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::getline(std::cin, Title);
    (std::cin>>Price>>PageCount>>GivenToLib).get();
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }

C++
1
2
3
4
5
6
7
8
9
10
11
12
ScientificBook* SB = new ScientificBook[M];
  for(int i=0; i<M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::getline(std::cin, Title);
    while (std::cin.get() != '\n');
    std::cin>>Price>>PageCount>>GivenToLib;
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,682
20.08.2020, 16:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <string>
 
class Book
{
public:
    Book(const std::string &title_ = "") : mTitle(title_) {}
    virtual ~Book(void) = default;
 
    std::string title(void) const { return mTitle; }
    void setTitle(const std::string &title) { mTitle = title; }
 
protected:
    std::string mTitle;
    virtual double weight(void) const = 0;
};
 
class FictionBook : public Book
{
    int mTirage, mSolded;
public:
    FictionBook(const std::string &title = "") : Book(title) {}
    double popularity(void) const { return weight(); }
 
protected:
    virtual double weight(void) const override { return mSolded * mSolded / double(mTirage * 1000); }
 
    friend std::istream & operator>>(std::istream &in, FictionBook &book)
    {
        in.ignore();
        std::cout << "Title? ";
        std::getline(in, book.mTitle);
        std::cout << "Tirage? ";
        in >> book.mTirage;
        std::cout << "Exemplars solded? ";
        in >> book.mSolded;
        return in;
    }
 
    friend std::ostream & operator<<(std::ostream &out, const FictionBook &book)
    {
        out << book.mTitle << std::endl
            << book.mTirage << "  " << book.mSolded
            << std::endl;
        return out;
    }
};
 
bool operator>(const FictionBook &b1, const FictionBook &b2)
{
    return b1.popularity() > b2.popularity();
}
 
template<class T>
void bookSort(T *books, size_t n)
{
    for (size_t i = 0; i < n; ++i)
    {
        for (size_t j = n - 1; j > i; --j)
        {
            if (books[j] > books[j - 1])
            {
                FictionBook tmp = books[j - 1];
                books[j - 1] = books[j];
                books[j] = tmp;
            }
        }
    }
}
 
int main()
{
    size_t n;
    std::cin >> n;
    FictionBook *fb = new FictionBook[n];
    for (size_t i = 0; i < n; ++i)
        std::cin >> fb[i];
 
    bookSort(fb, n);
 
    size_t k;
    std::cout << "How many the most popular fiction books print in output? ";
    std::cin >> k;
 
    for (size_t i = 0; i < 0; ++i)
        std::cout << fb[i];
 
    delete[] fb;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
20.08.2020, 17:12  [ТС]
Спасибо за ваш код, но к сожалению не смогу его использовать, так как мы не проходили еще дружественных классов.

Мой многострадальный код нельзя как-то скорректировать, чтобы он правильно работал?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <string>
 
 
class Book 
{
 public:
  Book(): title() {}
  Book(std::string t);
  ~Book();
 protected:
  std::string title;
};
 
Book::Book(std::string t) : title(t) {}
 
Book::~Book() {}
 
 
 
class FictionBook : public Book 
{
 public:
  FictionBook():Book(""), edition(0), selledCount(0) {}
  FictionBook(std::string t, int e, int s);
  ~FictionBook();
  std::string getTitle() {return title;}
  int getSelledCount() {return selledCount;}
  int getEdition() {return edition;}
  
 
  double calculatePopularity() 
  {
 
        double popularity_ = (double)selledCount / double(edition);
        popularity_ *= (double)selledCount / 1000;
        return popularity_;
 
  }
 
 protected:
  int selledCount;
  int edition;
    
};
 
 
 
FictionBook::FictionBook(std::string t, int e, int sc) :
  Book(t), edition(e), selledCount(sc) {}
 
FictionBook::~FictionBook() {}
 
 
 
 
class ScientificBook : public Book 
{
 public:
  ScientificBook():Book(""), price(0), pageCount(0), givenToLib(0) {}
  ScientificBook(std::string t, int p, int page, int g);
  ~ScientificBook();
  std::string getTitle() {return title;}
  int getPageCount() {return pageCount;}
  int getGivenToLib() {return givenToLib;}
  int getPrice() {return price;}
  double expensive()
{
  double expens = (double) price/ double (pageCount);
  return expens;
}
 protected:
  int price;
  int pageCount;
  int givenToLib;
};
 
ScientificBook::ScientificBook(std::string t, int p, int page, int g) :
  Book(t), price(p), pageCount(page), givenToLib(g) {}
 
ScientificBook::~ScientificBook() {}
 
 
 
 
int main() 
{
  int N, M;
  
  std::cin >> N;
  FictionBook* FB = new FictionBook[N];
  for(int i = 0; i < N; i++)
  {
    std::string Title;
    int Selled;
    int Edition;
    std::cin >> Title >> Edition >> Selled;
    FB[i]=FictionBook(Title, Edition, Selled);
  }
 
  std::cin>>M;
  ScientificBook* SB = new ScientificBook[M];
  for(int i = 0; i < M; i++)
  {
    std::string Title;
    int Price;
    int PageCount;
    int GivenToLib;
    std::getline(std::cin, Title);
    (std::cin >> Price >> PageCount >> GivenToLib).get();
    SB[i]=ScientificBook(Title, Price, PageCount, GivenToLib);
  }
  std::cout<<"\n";
  double max = 0;
  int maxI = 0;
  
 
  for(int i = 0; i < N; i++)
  {
    if(max<FB[i].calculatePopularity())
    {
      max = FB[i].calculatePopularity();
      maxI = i;
    }
  }
  std::cout << FB[maxI].getTitle() << "\n";
 
  double sred = 0, sum = 0;
  for(int i = 0; i < M; i++)
  {
    sum += SB[i].expensive();
    sred = sum/M;
  }
  
  int maxGiven = 0;
  for(int i = 0; i < M; i++)
  {
    if(SB[i].getGivenToLib() > maxGiven)
    maxGiven = SB[i].getGivenToLib();
  }
 
  for(int i = 0; i < M; i++)
  {
    if(SB[i].expensive() < sred&&SB[i].getGivenToLib() == maxGiven)
    {
      std::cout << SB[i].getTitle() << "\n";
    }
  }
    
 
  delete [] SB;
  delete [] FB; 
}
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,682
20.08.2020, 17:29
Лучший ответ Сообщение было отмечено Simonaakk как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
 std::cin >> N;
  FictionBook* FB = new FictionBook[N];
  for(int i = 0; i < N; i++)
  {
    std::cin.ignore();
    std::string Title;
    int Selled;
    int Edition;
    std::getline(std::cin, Title);
    std::cin >> Edition >> Selled;
    FB[i]=FictionBook(Title, Edition, Selled);
  }
1
0 / 0 / 0
Регистрация: 23.07.2020
Сообщений: 43
20.08.2020, 19:12  [ТС]
Annemesski огромнейшее спасибо!!! Допилил программу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.08.2020, 19:12
Помогаю со студенческими работами здесь

Интересные Научные книги
Старая книга времен СССР в мягкой обложке Смотри в корень - Маковецкий П.В прямая рабочая ссылка на djvu файл книги. djvu открывает вот эта...

Какие художественные книги про хакеров, программеров (вообще на компьютерную тематику) вы знаете?
От себя могу посоветовать Сергея Лукьяненко - &quot;Лабиринт отражений&quot;, &quot;Фальшивые зеркала&quot;, &quot;Прозрачные виражи&quot;. Ваще книги...

Описать структуру Bibliotec, содержащую следующие поля: автор книги, инвентарный номер книги, название книги
Описать структуру BIBLIOTEC содержащий следующие поля: автор книги , инвентарный номер книги , название книги. Подсчитать , книги скольких...

Самые лучшие книги joomla
Я понимаю что есть руководство по joomla но может есть супер киниги где все просто и понятно описывается как собственно создать сайт, может...

Вывести все сведения о поставке, а также название книги с минимальной общей стоимостью
Вывести все сведения о поставке(все поля таблицы Purchases),а также название книги(поле Title_book) с минимальной общей стоимостью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru