Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
1

Как вводить строки с пробелами?

23.07.2020, 15:53. Показов 2772. Ответов 18

Author24 — интернет-сервис помощи студентам
Почему не вводятся длинние имена книг со пробелами? в чем проблема? помогите решить проблему

Примеры
Входные данные
2
Mother
5000 4800
Oblomov
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

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
#include <iostream>
#include <string>
using namespace std;
 
class Book {
  public:
  string mbookName;
  
  public:
  Book() = default;
 
  Book(string& bookName) :
   mbookName(bookName)
   {
 
   }
};
 
class FictionBook : public Book {
  public:
  int mbookSoldCount;
  int mbookPrintCount;
 
  public:
  FictionBook() = default;
 
  FictionBook(string& bookName, int soldCount, int printCount) :
  Book(bookName), mbookSoldCount(soldCount), mbookPrintCount(printCount) 
            {
 
            }
 
friend std::istream& operator>>(std::istream& is, FictionBook& ficB);          
};
std::istream& operator>>(std::istream& is, FictionBook& ficB)
{
  is >> ficB.mbookName >> ficB.mbookSoldCount >>ficB.mbookPrintCount;
    return is;
}
 
class ScientificBook : public Book {
  public:
  int mbookPrice;
  int mbookPagesCount;
  int mbookCopiesCount;
 
  public:
  ScientificBook() = default;
 
  ScientificBook(string& bookName, int bookPrice, int pagesCount, int copiesCount) : Book(bookName), mbookPrice(bookPrice), mbookPagesCount(pagesCount), mbookCopiesCount(copiesCount)
  {
 
  }
  friend std::istream& operator>>(std::istream& is, ScientificBook& sciB);
};
std::istream& operator>>(std::istream& is, ScientificBook& sciB)
{
  is >> sciB.mbookName >> sciB.mbookPrice >> sciB.mbookPagesCount >> sciB.mbookCopiesCount;
  return is;
}
 
int main() {
  unsigned int n;
  cin >> n;
  FictionBook* fictBook = new FictionBook[n];
  for (int i = 0; i < n; ++i)
  {
       std::cin >> fictBook[i];
  }
  unsigned int m;
  cin >> m;
  ScientificBook* scientBook = new ScientificBook[m];
 for (int j = 0; j < m; ++j)
  {
      std::cin >> scientBook[j];
  }
 
delete [] scientBook;
delete [] fictBook;
 
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2020, 15:53
Ответы с готовыми решениями:

Как определить длину строки с пробелами?
Доброго времени суток! Я новичок в си++, есть такая задача: необходимо реализовать шифр Вернама....

Как вводить в строки двумерного массива фамилии
string familie = new string; должно через цикл быть введено пять фамилий мне нужно что бы в...

Как сделать ввод строки с пробелами в динамическом массиве структур?
Всем привет! У меня не получается ввести строку с пробелами. Ввожу, например: Audi TT, TT...

Как сделать чтоб вводить не с командной строки а собственно в самом окне
Есть програма но меняются значения токо с командной строки как сделать так чтоб менялись они в...

18
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.07.2020, 16:01 2
Потому что нужно getline.
0
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 16:19  [ТС] 3
Vourhey, как можно написать с getline???
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.07.2020, 16:23 4
Vardan, а документацию почитать, не?
В конце концов, на форуме есть поиск. У тебя есть имя метода. Сумеешь соединить?
0
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 16:27  [ТС] 5
Vourhey, посмотрел в форуме но не могу в моем коде использовать...
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 17:02 6
Лучший ответ Сообщение было отмечено Vardan как решение

Решение

Цитата Сообщение от Vardan Посмотреть сообщение
но не могу в моем коде использовать...
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
#include <iostream>
#include <string>
using namespace std;
 
#define DEBUGLOG(v)  std::cout << #v << " = " << v << "\n";
 
class Book
{
public:
    string mbookName;
 
public:
    Book() = default;
 
    Book(string& bookName) :
        mbookName(bookName)
    {
        
    }
};
 
class FictionBook : public Book
{
public:
    int mbookSoldCount;
    int mbookPrintCount;
 
    FictionBook() = default;
 
    FictionBook(string& bookName, int soldCount, int printCount) :
        Book(bookName), mbookSoldCount(soldCount), mbookPrintCount(printCount)
    {
 
    }
 
    friend std::istream& operator>>(std::istream& is, FictionBook& ficB);
    
    void show()
    {   DEBUGLOG(mbookName)
        DEBUGLOG(mbookSoldCount)
        DEBUGLOG(mbookPrintCount)
    }
};
 
std::istream& operator>>(std::istream& is, FictionBook& ficB)
{   std::cout << "mbookName = ";
    std::cin.ignore(32767, '\n');
    getline(std::cin, ficB.mbookName);
    
    is >> ficB.mbookSoldCount >> ficB.mbookPrintCount;
    return is;
}
 
class ScientificBook : public Book
{
public:
    int mbookPrice;
    int mbookPagesCount;
    int mbookCopiesCount;
 
public:
    ScientificBook() = default;
 
    ScientificBook(string& bookName, int bookPrice, int pagesCount,
                   int copiesCount) : Book(bookName), mbookPrice(bookPrice),
        mbookPagesCount(pagesCount), mbookCopiesCount(copiesCount)
    {
 
    }
    friend std::istream& operator>>(std::istream& is, ScientificBook& sciB);
    
    void show()
    {   DEBUGLOG(mbookName)
        DEBUGLOG(mbookPrice)
        DEBUGLOG(mbookPagesCount)
        DEBUGLOG(mbookCopiesCount)
    }
};
 
std::istream& operator>>(std::istream& is, ScientificBook& sciB)
{   std::cout << "mbookName = ";
    std::cin.ignore(32767, '\n');
    getline(std::cin, sciB.mbookName);
    
    is >> sciB.mbookPrice >> sciB.mbookPagesCount >>
       sciB.mbookCopiesCount;
    return is;
}
 
int main()
{   unsigned int n;std::cout << "\nN = "; cin >> n;
 
    FictionBook* fictBook = new FictionBook[n];
    for (int i = 0; i < n; ++i)
    {   std::cin >> fictBook[i];
    }
    
    std::cout << "\nshow---------------------------------------------------:\n";
    for (int i = 0; i < n; ++i)
    {   fictBook[i].show();
    }
    
    unsigned int m; std::cout << "\nN = "; cin >> m;
    
    ScientificBook* scientBook = new ScientificBook[m];
    for (int j = 0; j < m; ++j)
    {   std::cin >> scientBook[j];
    }
    
    std::cout << "\nshow---------------------------------------------------:\n";
    for (int i = 0; i < m; ++i)
    {   scientBook[i].show();
    }
    
    std::cout << "END\n";
 
    delete [] scientBook;
    delete [] fictBook;
 
    return 0;
}
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 18:41  [ТС] 7
XLAT, скажите пожалуйста как вызвать функцию из класса?
в моем задаче нужно вывести название художественной книги(class FictionBook) которое больше всего продался и название научной книги(class ScientificBook) которое больше всего отдано библиотекам и цена ниже среднего...

Примеры
Входные данные: (input)

2
Mother
5000 4800
Oblomov
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

Результат работы: (output)
Oblomov
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
#include <iostream>
#include <string>
using namespace std;
 
class Book {
  public:
  string mbookName;
  
  public:
  Book() = default;
 
  Book(string& bookName) :
   mbookName(bookName)
   {
 
   }
};
 
class FictionBook : public Book {
  public:
  int mbookSoldCount;
  int mbookPrintCount;
 
  public:
  FictionBook() = default;
 
  FictionBook(string& bookName, int soldCount, int printCount) :
  Book(bookName), mbookSoldCount(soldCount), mbookPrintCount(printCount) 
            {
 
            }
  float popularity(float s, float c) {
     mbookSoldCount = s;
     mbookPrintCount = c;
      return (s / c) * (s / 1000);
  }
          
 
friend std::istream& operator>>(std::istream& is, FictionBook& ficB);          
};
std::istream& operator>>(std::istream& is, FictionBook& ficB)
{
  std::cin.ignore(32767, '\n'); 
  getline(std::cin, ficB.mbookName);
  is >> ficB.mbookSoldCount >> ficB.mbookPrintCount;
    return is;
}
 
class ScientificBook : public Book {
  public:
  int mbookPrice;
  int mbookPagesCount;
  int mbookCopiesCount;
 
  public:
  ScientificBook() = default;
 
  ScientificBook(string& bookName, int bookPrice, int pagesCount, int copiesCount) : Book(bookName), mbookPrice(bookPrice), mbookPagesCount(pagesCount), mbookCopiesCount(copiesCount)
  {
 
  }
 
  float expensive(float price, float pages) {
    mbookPrice = price;
    mbookPagesCount = pages;
    return price/pages;
  }
 
  friend std::istream& operator>>(std::istream& is, ScientificBook& sciB);
};
std::istream& operator>>(std::istream& is, ScientificBook& sciB)
{
    std::cin.ignore(32767, '\n');  
    getline(std::cin, sciB.mbookName);
    is >> sciB.mbookPrice >> sciB.mbookPagesCount >> sciB.mbookCopiesCount;
    return is;
}
 
int main() {
  unsigned int n;
  cin >> n;
  FictionBook* fictBook = new FictionBook[n];
  for (int i = 0; i < n; ++i)
  {
       std::cin >> fictBook[i];
  }
  unsigned int m;
  cin >> m;
  ScientificBook* scientBook = new ScientificBook[m];
 for (int j = 0; j < m; ++j)
  {
      std::cin >> scientBook[j];
  }
   
delete [] scientBook;
 
delete [] fictBook;
 
return 0;
}
не представляю как решать задачу...
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 18:57 8
Лучший ответ Сообщение было отмечено Vardan как решение

Решение

Цитата Сообщение от Vardan Посмотреть сообщение
нужно вывести название художественной книги(class 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
#include <string>
using namespace std;
 
#define DEBUGLOG(v)  std::cout << #v << " = " << v << "\n";
 
class Book
{
public:
    string mbookName;
 
public:
    Book() = default;
 
    Book(string& bookName) :
        mbookName(bookName)
    {
        
    }
};
 
class FictionBook : public Book
{
public:
    int mbookSoldCount;
    int mbookPrintCount;
 
    FictionBook() = default;
 
    FictionBook(string& bookName, int soldCount, int printCount) :
        Book(bookName), mbookSoldCount(soldCount), mbookPrintCount(printCount)
    {
    }
 
    friend std::istream& operator>>(std::istream& is, FictionBook& ficB);
    
    void show()
    {   DEBUGLOG(mbookName)
        DEBUGLOG(mbookSoldCount)
        DEBUGLOG(mbookPrintCount)
    }
};
 
std::istream& operator>>(std::istream& is, FictionBook& ficB)
{   std::cout << "mbookName = ";
    std::cin.ignore(32767, '\n');
    getline(std::cin, ficB.mbookName);
    
    is >> ficB.mbookSoldCount >> ficB.mbookPrintCount;
    return is;
}
 
class ScientificBook : public Book
{
public:
    int mbookPrice;
    int mbookPagesCount;
    int mbookCopiesCount;
 
public:
    ScientificBook() = default;
 
    ScientificBook(string& bookName, int bookPrice, int pagesCount,
                   int copiesCount) : Book(bookName), mbookPrice(bookPrice),
        mbookPagesCount(pagesCount), mbookCopiesCount(copiesCount)
    {
    }
    friend std::istream& operator>>(std::istream& is, ScientificBook& sciB);
    
    void show()
    {   DEBUGLOG(mbookName)
        DEBUGLOG(mbookPrice)
        DEBUGLOG(mbookPagesCount)
        DEBUGLOG(mbookCopiesCount)
    }
};
 
std::istream& operator>>(std::istream& is, ScientificBook& sciB)
{   std::cout << "mbookName = ";
    std::cin.ignore(32767, '\n');
    getline(std::cin, sciB.mbookName);
    
    is >> sciB.mbookPrice >> sciB.mbookPagesCount >>
       sciB.mbookCopiesCount;
    return is;
}
 
///----------------------------------------------------------------------------|
/// вывести название художественной книги(class FictionBook) 
/// которое больше всего продался 
///----------------------------------------------------------------------------:
void show_max_sold(FictionBook* p, int n)
{   int t = p[0].mbookSoldCount;
    int j = 0;
    for (int i = 1; i < n; ++i)
    {   if(     p[i].mbookSoldCount > t)
        {   t = p[i].mbookSoldCount;
            j = i;
        }
    }
    std::cout << "\nshow_max_sold: " << p[j].mbookName << " -> " << t << "\n";
}
 
int main()
{   unsigned int n;std::cout << "\nN = "; cin >> n;
 
    FictionBook* fictBook = new FictionBook[n];
    for (int i = 0; i < n; ++i)
    {   std::cin >> fictBook[i];
    }
    
    std::cout << "\nshow---------------------------------------------------:\n";
    for (int i = 0; i < n; ++i)
    {   fictBook[i].show();
    }
    
    ///----------------------------------|
    /// которое больше всего продался.   |
    ///----------------------------------:
    show_max_sold(fictBook, n);
    
    unsigned int m; std::cout << "\nN = "; cin >> m;
    
    ScientificBook* scientBook = new ScientificBook[m];
    for (int j = 0; j < m; ++j)
    {   std::cin >> scientBook[j];
    }
    
    std::cout << "\nshow---------------------------------------------------:\n";
    for (int i = 0; i < n; ++i)
    {   scientBook[i].show();
    }
    
    std::cout << "END\n";
 
    delete [] scientBook;
    delete [] fictBook;
 
    return 0;
}
для
Цитата Сообщение от Vardan Посмотреть сообщение
название научной книги(class ScientificBook) которое больше всего отдано библиотекам и цена ниже среднего...
сделайте аналогично выше мною показанному.
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 20:54  [ТС] 9
XLAT, спасибо вам огромное! я написал и в первом тесте все работает как нужно но во втором тесте дает ошибку, там нужно вывести та которое больше всего отдано библиотекам и цена ниже среднего... и если нет такого печатать "Not found!"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void show_max_copies(ScientificBook* s, int m)
{
  int t = s[0].mbookCopiesCount;
  int j = 0;
  int midPrice = 5000;
  for(int i = 1; i < m; ++i)
  {
    if(s[i].mbookCopiesCount > t && s[i].mbookPrice < midPrice)
    {
      t = s[i].mbookCopiesCount;
      j = i;
    }
  }
    std::cout << s[j].mbookName << "\n";
}
====== Тест #1 =======
--- Входные данные:
2
Mother
5000 4800
Oblomov
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

--- Результат работы:
Oblomov
The Origin of Species

--- Правильный ответ:
Oblomov
The Origin of Species

--- Вывод проверяющей программы:
OK


====== Тест #2 =======
--- Входные данные:
2
Mother
5000 4800
Oblomov
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 180

--- Результат работы:
Oblomov
A Brief History of Time

--- Правильный ответ:
Oblomov
Not found!

--- Вывод проверяющей программы:
Неправильный ответ

Добавлено через 35 минут
XLAT,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void show_max_copies(ScientificBook* s, int m)
{
  int t = s[0].mbookCopiesCount;
  int p = s[0].mbookPrice; 
  int j = 0;
 
  for(int i = 1; i < m; ++i)
  {
    if(s[i].mbookCopiesCount > t || s[i].mbookPrice < p)
    {
      t = s[i].mbookCopiesCount;
      p = s[i].mbookPrice;
      j = i;
      //cout << s[j].mbookName << "\n";
    }
  }
    std::cout << s[j].mbookName << "\n";
}
здесь как добавить этот std::cout << "Not found!" << "\n" ; ???
1
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 20:58 10
Цитата Сообщение от Vardan Посмотреть сообщение
и цена ниже среднего
Цитата Сообщение от Vardan Посмотреть сообщение
--- Правильный ответ:
Oblomov
Not found!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void show_max_copies(ScientificBook* s, int m)
{   int t = s[0].mbookCopiesCount;
    int j = 0;
    int midPrice = 5000;
    for(int i = 1; i < m; ++i)
    {   if(s[i].mbookCopiesCount > t)
        {   t = s[i].mbookCopiesCount;
            j = i;
        }
    }
    if(s[j].mbookPrice < midPrice)
    {    std::cout << s[j].mbookName << "\n";
    }
    else std::cout << "Not found!\n";
    
}
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 21:04  [ТС] 11
XLAT, не работает не знаю почему
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 21:11 12
Лучший ответ Сообщение было отмечено Vardan как решение

Решение

Цитата Сообщение от Vardan Посмотреть сообщение
не работает не знаю почему
скопируйте и вставьте ещё один раз и будет вам щастье.
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 21:49  [ТС] 13
XLAT, спасибо Вам огромное!!!
это задания действует уже на мои нервы )) сейчас в третьем тесте дает ошибку(когда равные данные)

====== Тест #3 =======
--- Входные данные:
2
Mother
10000 8600
Oblomov
10000 8600
4
Cosmos
4000 400 500
Sapiens: A Brief History of Humankind
4000 400 500
A Brief History of Time
7500 460 200
The Origin of Species
10000 380 50

--- Результат работы:
Mother
Cosmos

--- Правильный ответ:
Mother
Oblomov
Cosmos
Sapiens: A Brief History of Humankind

--- Поток ошибок:
Неправильный ответ
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 22:29 14
Цитата Сообщение от Vardan Посмотреть сообщение
Mother
Oblomov
Cosmos
Sapiens: A Brief History of Humankind
вам нужно отсортировать ваши списки, например, по убыванию цены и во втором случае колву копий.
и тогда брать первые экземпляры, пока поля у них будут равны.

Добавлено через 5 минут
ну, или без сортировки для научных книг(второй пачки):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void show_max_copies(ScientificBook* s, int m)
{   int t = s[0].mbookCopiesCount;
    int j = 0;
    int midPrice = 5000;
    for(int i = 1; i < m; ++i)
    {   if(s[i].mbookCopiesCount > t)
        {   t = s[i].mbookCopiesCount;
            j = i;
        }
    }
    int i;
    for(i = 0; i < m; ++i)
    {   if((s[i].mbookCopiesCount == t) && (s[i].mbookPrice < midPrice))
        {   std::cout << s[i].mbookName << "\n";
        }
    }
    if(i == m)
    {    std::cout << "Not found!\n";
    }
}
Добавлено через 5 минут
подправил индексы:
пишу на коленке, поэтому могут быть очепятки.
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 22:30  [ТС] 15
XLAT, не дает правильный ответ не знаю что делать
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 22:31 16
Цитата Сообщение от Vardan Посмотреть сообщение
не знаю что делать
подправил.
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 22:40  [ТС] 17
XLAT, отправил весь код Вам в личное сообщение. результаты тест 3 не совпадают, может ошибка не в функции void show_max_copies
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,084
Записей в блоге: 2
23.07.2020, 23:01 18
Цитата Сообщение от Vardan Посмотреть сообщение
отправил весь код Вам
возвращаю:
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
#include <iostream>
#include <string>
using namespace std;
 
class Book
{
public:
    string mbookName;
 
public:
    Book() = default;
 
    Book(string& bookName) :
        mbookName(bookName)
    {
 
    }
};
 
class FictionBook : public Book
{
public:
    int mbookSoldCount;
    int mbookPrintCount;
 
public:
    FictionBook() = default;
 
    FictionBook(string bookName, int soldCount, int printCount) :
        Book(bookName), mbookSoldCount(soldCount), mbookPrintCount(printCount)
    {
    }
    
    float popularity(float s, float c)
    {   mbookSoldCount = s;
        mbookPrintCount = c;
        return (s / c) * (s / 1000);
    }
 
    friend std::istream& operator>>(std::istream& is, FictionBook& ficB);
};
std::istream& operator>>(std::istream& is, FictionBook& ficB)
{   std::cin.ignore(32767, '\n');
    getline(std::cin, ficB.mbookName);
    is >> ficB.mbookSoldCount >> ficB.mbookPrintCount;
    return is;
}
 
class ScientificBook : public Book
{
public:
    int mbookPrice;
    int mbookPagesCount;
    int mbookCopiesCount;
 
public:
    ScientificBook() = default;
 
    ScientificBook(string bookName, int bookPrice, int pagesCount,
                   int copiesCount) : Book(bookName), mbookPrice(bookPrice),
        mbookPagesCount(pagesCount), mbookCopiesCount(copiesCount)
    {
    }
 
    float expensive(float price, float pages)
    {   mbookPrice = price;
        mbookPagesCount = pages;
        return price/pages;
    }
 
    friend std::istream& operator>>(std::istream& is, ScientificBook& sciB);
};
 
std::istream& operator>>(std::istream& is, ScientificBook& sciB)
{   std::cin.ignore(32767, '\n');
    getline(std::cin, sciB.mbookName);
    is >> sciB.mbookPrice >> sciB.mbookPagesCount >> sciB.mbookCopiesCount;
    return is;
}
 
void show_max_sold(FictionBook* f, int n)
{   int t = f[0].mbookSoldCount;
    for (int i = 1; i < n; ++i)
    {   if( f[i].mbookSoldCount > t)
        {   t = f[i].mbookSoldCount;
        }
    }
    int i;
    for(i = 0; i < n; ++i)
    {   if( f[i].mbookSoldCount == t)
        {   std::cout << f[i].mbookName << "\n";
        }
    }
}
 
void show_max_copies(ScientificBook* s, int m)
{   int t = s[0].mbookCopiesCount;
    int j = 0;
    int midPrice = 5000;
    for(int i = 1; i < m; ++i)
    {   if(s[i].mbookCopiesCount > t)
        {   t = s[i].mbookCopiesCount;
            j = i;
        }
    }
    bool b = true;
    for(int i = 0; i < m; ++i)
    {   if((s[i].mbookCopiesCount == t) && (s[i].mbookPrice < midPrice))
        {   std::cout << s[i].mbookName << "\n"; b = false;
        }
    }
    if(b)
    {   std::cout << "Not found!\n";
    }
}
 
int main()
{   unsigned int n = 2;
    FictionBook fictBook[] =
    {   FictionBook("Mother", 10000, 8600),
        FictionBook("Oblomov", 10000, 8600)
    };
    
    unsigned int m = 4;
    ScientificBook scientBook[] =
    {   ScientificBook("Cosmos", 4000, 400, 500),
        ScientificBook("Sapiens: A Brief History of Humankind", 4000, 400, 500),
        ScientificBook("A Brief History of Time", 7500, 460, 200),
        ScientificBook("The Origin of Species", 10000, 380, 50)
    };
    
    show_max_sold  (fictBook,   n); cout << endl;
    show_max_copies(scientBook, m);
 
    return 0;
}
Как вводить строки с пробелами?

я вижу, что тест проходит.
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
23.07.2020, 23:21  [ТС] 19
XLAT, не представляйте как я Вам благодарен! спасибо Вам огромное!!!
1
23.07.2020, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2020, 23:21
Помогаю со студенческими работами здесь

Как из строки получить массив со всеми словами, разделяющими символами и пробелами?
Есть строка к примеру: &quot;Слово слово, слово-слово, слово слово!&quot;; Как из этой строки селать такой...

Нюансы ввода/вывода: как правильно организовать ввод строки с пробелами?
Доброе время суток. Такой вопрос: у меня есть структура, содержащая ФИО, адрес, телефон, возраст....

Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой...

Из строки символов, состоящей из цифр, разделенных пробелами вывести четные числа этой строки
В оконном приложении исходные данные вводить с компоненты Edit в ListBox (Заканчивать нажатием...

Дополнить строки их пробелами до размера самой длинной строки
В текстовом файле записаны строки произвольной длины. Переписать строки в новый файл, дополнив их...

Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к первой
Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru