Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
1

Стивен Прата (гл. 6, упр. 6) - массив структур

10.02.2015, 19:43. Показов 1906. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Что-то упускаю, не могу понять, что именно. Не выводит список имён. Кто подскажет, почему?
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
//  sp_Ch6_Pg301_Ex06
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 301, упражнение 6.
/*
Постройте программу, которая отслеживает пожертвования в Общество
Защиты Влиятельных Лиц. Она должна запрашивать у пользователя
количество меценатов, а затем приглашать вводить их имена и суммы пожертвований
от каждого. Информация должна сохраняться в динамически выделяемом массиве
структур. Каждая структура должна иметь два члена: символьный массив (или
объект string) для хранения имени и переменную-член типа double — для
хранения суммы пожертвования. После чтения всех данных программа должна
отображать имена и суммы пожертвований тех, кто не пожалел $10 000 и
более. Этот список должен быть озаглавлен меткой "Grand Patrons". После этого
программа должна выдать список остальных жертвователей. Он должен быть
озаглавлен "Patrons". Если в одной из двух категорий не окажется никого,
программа должна напечатать "none". Помимо отображения двух категорий,
никакой другой сортировки делать не нужно.
*/
#include <iostream>
#include <string>
 
using namespace std;
 
struct Contributor  // меценат
{
    string name;    // имя
    double amount;  // сумма
};
 
int main()
{
    cout << "Enter the number of contributors: ";
    int num;
    cin >> num;
 
    Contributor * memberlist = new Contributor[num];
 
    for (int i=0; i<num; ++i)
    {
        cout << "\nEnter the name of " << i+1 << " contributor: ";
        getline (cin, memberlist[i].name);
        while (cin.get() != '\n'); // освобождаемся от мусора в потоке
        cout << "Enter the amount of the " << i+1 << " contribution: ";
        cin >> memberlist[i].amount;
    }
 
    string grandPatrons = "";
    string patrons = "";
 
    for (int i=0; i<num; ++i)
        if (memberlist[i].amount >= 10000)
            grandPatrons = grandPatrons + memberlist[i].name + "\n";
        else
            patrons = patrons + memberlist[i].name + "\n";
 
    cout << "\nGrand Patrons:" << endl;
    if (grandPatrons.size())
        cout << grandPatrons;
    else
        cout << "none" << endl;
 
    cout << "\nPatrons:" << endl;
    if (patrons.size())
        cout << patrons;
    else
        cout << "none" << endl;
 
    delete [] memberlist;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2015, 19:43
Ответы с готовыми решениями:

Стивен Прата (гл. 8, упр. 4) - структура с методами и использование new
Вопрос. Имеется упражнение. Собственно, вот оно: Начал делать. То есть, сделал: #include...

9 Задача 4 главы Стивен Прата
Выполните упражнение 6, но вместо объявления массива из трех структур CandyBar используйте операцию...

Стивен прата, задание с очередью
Привет. Хотелось бы немного помощи по листингу. Вообще сам листинг очень сложный для меня, я уже и...

Стивен Прата - про decltype (гл. 8, стр. 422)
Прочитал раз десять. Сверился с оригиналом: Я что-то упустил или тип функции long?...

3
31 / 31 / 6
Регистрация: 23.10.2014
Сообщений: 107
10.02.2015, 19:55 2
Освобождаться от мусора в потоке нужно перед getline.
1
31 / 31 / 6
Регистрация: 23.10.2014
Сообщений: 107
10.02.2015, 20:08 3
gru74ik, да
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
10.02.2015, 21:31  [ТС] 4
NotNot, благодарю. Ты прав оказался.

Добавлено через 56 минут
Условие неверно прочитал... Там надо выводить не просто списки имён, а списки с суммами. Так что, пришлось изменить подход. Если кому надо, вот:
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
//  sp_Ch6_Pg301_Ex06
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 301, упражнение 6.
/*
Постройте программу, которая отслеживает пожертвования в Общество
Защиты Влиятельных Лиц. Она должна запрашивать у пользователя
количество меценатов, а затем приглашать вводить их имена и суммы пожертвований
от каждого. Информация должна сохраняться в динамически выделяемом массиве
структур. Каждая структура должна иметь два члена: символьный массив (или
объект string) для хранения имени и переменную-член типа double — для
хранения суммы пожертвования. После чтения всех данных программа должна
отображать имена и суммы пожертвований тех, кто не пожалел $10 000 и
более. Этот список должен быть озаглавлен меткой "Grand Patrons". После этого
программа должна выдать список остальных жертвователей. Он должен быть
озаглавлен "Patrons". Если в одной из двух категорий не окажется никого,
программа должна напечатать "none". Помимо отображения двух категорий,
никакой другой сортировки делать не нужно.
*/
#include <iostream>
#include <string>
 
using namespace std;
 
struct Contributor  // меценат
{
    string name;    // имя
    double amount;  // сумма
};
 
int main()
{
    cout << "Enter the number of contributors: ";
    int num;
    cin >> num;
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
 
    Contributor * memberlist = new Contributor[num];
    Contributor * sortedlist = new Contributor[num];
 
    int greatPatrons = 0;
    int patrons = num-1;
 
    for (int i=0; i<num; ++i)
    {
        cout << "\nEnter the name of " << i+1 << " contributor: ";
        getline (cin, memberlist[i].name);
        cout << "Enter the amount of the " << i+1 << " contribution: ";
        cin >> memberlist[i].amount;
        while (cin.get() != '\n'); // освобождаемся от мусора в потоке
        if (memberlist[i].amount >= 10000)
        {
            sortedlist[greatPatrons] = memberlist[i];
            ++greatPatrons;
        }
        else
        {
            sortedlist[patrons] = memberlist[i];
            --patrons;
        }
    }
 
    cout << "\nGreat Patrons:" << endl;
    if (greatPatrons != 0)
        for (int i=0; i<greatPatrons; ++i)
            cout << sortedlist[i].name << "\t" << sortedlist[i].amount << endl;
    else
        cout << "none" << endl;
 
    cout << "\nPatrons:" << endl;
    if (patrons < num-1)
        for (int i=num-1; i>greatPatrons-1; --i)
            cout << sortedlist[i].name << "\t" << sortedlist[i].amount << endl;
    else
        cout << "none" << endl;
 
    delete [] memberlist;
    delete [] sortedlist;
 
    return 0;
}
Добавлено через 5 минут
Чёрт, намудрил... Там ещё и без всяких сортировок надо...

Добавлено через 13 минут
Во:

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
//  sp_Ch6_Pg301_Ex06
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 301, упражнение 6.
/*
Постройте программу, которая отслеживает пожертвования в Общество
Защиты Влиятельных Лиц. Она должна запрашивать у пользователя
количество меценатов, а затем приглашать вводить их имена и суммы пожертвований
от каждого. Информация должна сохраняться в динамически выделяемом массиве
структур. Каждая структура должна иметь два члена: символьный массив (или
объект string) для хранения имени и переменную-член типа double — для
хранения суммы пожертвования. После чтения всех данных программа должна
отображать имена и суммы пожертвований тех, кто не пожалел $10 000 и
более. Этот список должен быть озаглавлен меткой "Grand Patrons". После этого
программа должна выдать список остальных жертвователей. Он должен быть
озаглавлен "Patrons". Если в одной из двух категорий не окажется никого,
программа должна напечатать "none". Помимо отображения двух категорий,
никакой другой сортировки делать не нужно.
*/
#include <iostream>
#include <string>
 
using namespace std;
 
struct Contributor  // меценат
{
    string name;    // имя
    double amount;  // сумма
};
 
int main()
{
    cout << "Enter the number of contributors: ";
    int num;
    cin >> num;
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
 
    Contributor * memberlist = new Contributor[num];
 
    int greatPatrons = 0;
    int patrons = 0;
 
    for (int i=0; i<num; ++i)
    {
        cout << "\nEnter the name of " << i+1 << " contributor: ";
        getline (cin, memberlist[i].name);
        cout << "Enter the amount of the " << i+1 << " contribution: ";
        cin >> memberlist[i].amount;
        while (cin.get() != '\n'); // освобождаемся от мусора в потоке
        if (memberlist[i].amount >= 10000)
            ++greatPatrons;
        else
            ++patrons;
    }
 
    cout << "\nGreat Patrons:" << endl;
    if (greatPatrons > 0)
    {
        for (int i=0; i<num; ++i)
            if (memberlist[i].amount >= 10000)
                cout << memberlist[i].name << "\t" << memberlist[i].amount << endl;
    }
    else
    {
        cout << "none" << endl;
    }
 
    cout << "\nPatrons:" << endl;
    if (patrons > 0)
    {
        for (int i=0; i<num; ++i)
            if (memberlist[i].amount < 10000)
                cout << memberlist[i].name << "\t" << memberlist[i].amount << endl;
    }
    else
    {
        cout << "none" << endl;
    }
 
    delete [] memberlist;
 
    return 0;
}
0
10.02.2015, 21:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2015, 21:31
Помогаю со студенческими работами здесь

Шилдт или Стивен Прата: что выбрать?
Недавно закончил вводный курс от Яндекс по C++. Хотел бы дальше продолжить изучать язык. В...

Листинг 4.13 Прата, массив структур
// arrstruc.cpp -- an array of structures #include &lt;iostream&gt; struct inflatable { char...

Стивен Прата Кто Читал его ? - Нужен Совет
Нужна книжка по изучению C++ ,так сказать &quot;С НУЛЯ&quot;,чтоб всё разжевывалось. Остановился На авторе...

С. Прата Самоучитель, динамический массив структур
#include &lt;iostream&gt; #include &lt;cctype&gt; using namespace std; const int Size=100; struct SPM {...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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