Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рекурсивным способом получить все возможные траектории с 0-ой вершины до 6-ой вершины длиной не более 4 вершин https://www.cyberforum.ru/cpp-beginners/thread1401823.html
Как написать рекурсивную функцию по задаче: Задается например,такая верхняя треугольная матрица, на самом деле она достаточно большая float A={ { 1, 2, 1,-1,-1,-1}, {-1,...
C++ Файл с разнотипными данными
Подскажите, пожалуйста, есть файл с числовыми данными, хочу написать программу, которая посимвольно читает данные, пропускает то, что не нужно (текст), остальное записывает куда нужно. С последним...
Объясните что делает эта программа (do.while) C++
Объясните пожалуйста что делает эта программа. #include <stdio.h> #include <conio.h> #include <math.h> int main() { int i=1; float a,n; scanf("%f",&n);
C++ Стек в виде массива Помогите программку составить, выполнение арифметических действий записанных в инфиксной записи, стеков в виде массива. https://www.cyberforum.ru/cpp-beginners/thread1401747.html
C++ Аппроксимация. Квадратичная интерполяция https://www.cyberforum.ru/cpp-beginners/thread1401736.html
Нужен пример реализации квадратичной интерполяции на интервале с 11 точками. Исходные хi вычисляются по формуле xi=-2+7*(i-1)/10, i=1,11 и у по формуле y=x3-50*cos(x). Используя полученную таблицу...
Создание таблицы C++
Добрый день, задача заключается в том, чтобы считать данные и поместить их в таблицу.Задача состоит в том, чтобы создать таблицу. Прошу помочь обозначить в какую сторону копать, где можно почерпнуть...
Не срабатывает условие while (!file.eof() C++
Есть функция, которая считает из файла числа в динамический массив: int* ReadFile(string FileName) { ifstream file; file.open(FileName); int* mas=(int*)malloc(sizeof(int)*10); int Count =...
C++ Шаблонный оператор не шаблонного класса Пытаюсь создать альтернативный оператор выделения памяти для своей библиотеки. С целью получить возможность передавать дополнительную информацию о типах в свой диспетчер памяти. Сначала сделал... https://www.cyberforum.ru/cpp-beginners/thread1401683.html
C++ Задача с файлом https://www.cyberforum.ru/cpp-beginners/thread1401653.html
Дан файл определить сколько раз встречается в нем слово вывести на экран номер строк где это слово найдено(программа находит слово не зависимо от регистра) Я написал пррограмму но не знаю как...
C++ Конвертирование типов данных Нужно обработать данные. Пропустить их через кучу функций, каждая из них требует свой тип данных. Вовремя компиляции постоянно сталкиваюсь с тем что компилятор ругается "невозможно преобразовать... https://www.cyberforum.ru/cpp-beginners/thread1401649.html
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
23.03.2015, 16:16 0

Решение всех задач из учебника Стивена Прата

23.03.2015, 16:16. Просмотров 77984. Ответов 211
Метки (Все метки)

Ответ

Глава 5. Упражнение 8

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
//  sp_Ch5_Pg256_Ex08
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.)
/// Упражнения по программированию. Глава 5, страница 256, упражнение 8.
/*
Напишите программу, которая использует массив char и цикл для чтения по
одному слову за раз до тех пор, пока не будет введено слово done. Затем
программа должна сообщить количество введённых слов (исключая done).
Пример запуска должен быть таким:
Вводите слова (для завершения введите слово done):
anteater birthday category dumpsteг
envy finagle geometry done for sure
Вы ввели 7 слов .
Вы должны включить заголовочный файл cstring и применять функцию
strcmp() для выполнения проверки.
 
*/
 
#include <iostream>
#include <cstring>  // для функции сравнения строк strcmp()
#include <windows.h>
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int size = 20;
    char answer[size];
    int qty = 0;
    std::cout << "Вводите слова (для завершения введите слово done):\n";
    std::cin >> answer;
    while ( strcmp(answer, "done"))
    {
        std::cin >> answer;
        ++qty;
    }
 
    std::cout << "Вы ввели " << qty << " слов." << std::endl;
    std::cin.get();
    return 0;
}

Глава 5. Упражнение 9

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
//  sp_Ch5_Pg256_Ex09
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.)
/// Упражнения по программированию. Глава 5, страница 256, упражнение 9.
/*
Напишите программу, соответствующую описанию программы из упражнения 8,
но с использованием объекта string вместо символьного массива.
Включите заголовочный файл string и применяйте операции отношений для
выполнения проверки.
*/
 
#include <iostream>
#include <string>
#include <windows.h>
int main()
{
    using namespace std;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int qty = 0;
    string userword;
    string quitword = "exit";
    cout << "Вводите слова и нажимайте клавишу Enter. "
            "Для завершения введите слово exit:\n" << endl;
    getline(cin, userword);
 
    while (userword != quitword)
    {
        getline(cin, userword);
        ++qty;
    }
 
    cout << "\nВы ввели " << qty << " слов и слово-пароль"
            " exit для выхода." << endl;
    return 0;
}

Глава 5. Упражнение 10

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
//  sp_Ch5_Pg256_Ex10
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.)
/// Упражнения по программированию. Глава 5, страница 256, упражнение 10.
/*
Напишите программу, использующую вложенные циклы, которая запрашивает
у пользователя значение количества строк для отображения. Затем она должна
отобразить указанное число строк со звездочками, с одной звездочкой в первой
строке, двумя — во второй и т.д: В каждой строке звездочкам должны
предшествовать точки — в таком количестве, чтобы общее число символов в каждой
строке было равно количеству строк. Пример запуска программы должен
выглядеть следующим образом:
 
Введите количество строк: 5
....*
...**
..***
.****
*****
 
*/
 
// Функция isInteger() написана -=ЮрА=-:
// [url]https://www.cyberforum.ru/cpp-beginners/thread764125.html#post4014736[/url]
 
// Цикл while написан юзером gray_fox:
// [url]https://www.cyberforum.ru/cpp-beginners/thread1225226-page2.html#post6413181[/url]
 
#include <iostream>
#include <windows.h>
#include <limits>
#include <typeinfo>
 
template <class T>
bool isInteger(T val);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int qty=0;
 
    while(true)
    {
        std::cout << "Введите количество строк: ";
        std::cin >> qty;
        if ((isInteger(qty)))
        {
            if (qty>0)
                break;
            else
                std::cout << "Вы должны ввести целое "
                "число больше нуля." << std::endl;
        }
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
 
    for (int i=0; i<qty; ++i)
    {
 
        for (int j=0; j<qty; ++j)
        {
            std::cout << ".";
        }
 
        for (int j=0; j<i+1; ++j)
        {
            std::cout << "\b";
        }
        for (int j=0; j<i+1; ++j)
        {
            std::cout << "*";
        }
        std::cout << std::endl;
    }
 
    return 0;
}
 
template <class T>
bool isInteger(T val)
{
    return typeid(val) == typeid(int);
}


Глава 6.
Глава 6. Упражнение 1

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
//  sp_Ch6_Pg300_Ex01
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 300, упражнение 1.
/*
Напишите программу, которая читает клавиатурный ввод до символа @ и
повторяет его, за исключением десятичных цифр, преобразуя каждую букву
верхнего регистра в букву нижнего регистра и наоборот.
(Не забудьте о семействе функций cctype.)
*/
#include <iostream>
#include <windows.h>
#include <string>
#include <cctype>
 
int main()
{
    using std::string;
    using std::cout;
    using std::cin;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    string text;
    cout << "Привет! Это программа, которая читает клавиатурный "
    "ввод до символа @ и повторяет его, за исключением десятичных цифр, "
    "преобразуя каждую букву верхнего регистра в букву нижнего регистра "
    "и наоборот.\n\n" << "Введите Ваш текст и нажмите Enter: ";
    getline(cin, text);
    int strSize = text.size();
    char ch;
    for (int i=0; i<strSize; ++i)
    {
        ch = text[i];
        if (ch != '@')
        {
            if (isspace(ch) || ispunct(ch))
                cout << ch;
            else if (isdigit(ch))
                cout << "";
            else if (isalpha(ch))
                islower(ch) ? cout << (char)toupper(ch) : cout << (char)tolower(ch);
            else
                cout << ch;
        }
        else
        {
            cout << "";
            break;
        }
    }
    return 0;
}

Глава 6. Упражнение 2

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
//  sp_Ch6_Pg300_Ex02
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 300, упражнение 2.
/*
Напишите программу, читающую в массив double до 10 значений
пожертвований. (Или, если хотите, используйте шаблонный объект array.) Программа
должна прекращать ввод при получении нечисловой величины. Она должна
выдавать среднее значение полученных чисел, а также количество значений в
массиве, превышающих среднее.
*/
#include <iostream>
#include <windows.h>
#include <limits>
 
int main()
{
    using namespace std;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int arrSize = 10;
    double donation[arrSize];
    cout << "Введите сумму пожертвования в формате xx.yy\n"
            "(где xx - это рубли, а yy - копейки).\n\n";
    for (int i=0; i<arrSize; ++i)
    {
        cout << "Введите сумму " << i+1 << "-го пожертвования: ";
        while (!(cin >> donation[i]))
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "Некорректный ввод!" << endl;
            cout << "Введите сумму " << i+1 << "-го пожертвования: ";
        }
    }
 
    double sum = 0;
 
    for (int i=0; i<arrSize; ++i)
        sum += donation[i];
 
    double average = sum/arrSize;
 
    int greaterThanAverage = 0;
 
    for (int i=0; i<arrSize; ++i)
    {
        if (donation[i]<average)
            continue;
        else
            ++greaterThanAverage;
    }
 
    cout << endl << "Средняя сумма пожертвований: "
         << average << endl << endl;
 
    cout << endl << "Пожертвований превышающих среднюю сумму: "
         << greaterThanAverage << endl << endl;
 
    return 0;
}

Глава 6. Упражнение 3

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
//  sp_Ch6_Pg300_Ex03
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 300, упражнение 3.
/*
Напишите предшественник программы, управляемой меню. Она должна
отображать меню из четырех пунктов, каждый из них помечен буквой. Если
пользователь вводит букву, отличающуюся от четырех допустимых, программа
должна повторно приглашать его ввести правильное значение до тех пор, пока
он этого не сделает. Затем она должна выполнить некоторое простое действие
на основе пользовательского выбора. Работа программы должна выглядеть
примерно так:
Please enter one of the following choices:
c) carnivore p) pianist
t) tree g) game
f
Please enter a c, p, t, or g: q
Please enter a c, p, t, or g: t
A maple is a tree.
*/
#include <iostream>
#include <string>
 
int main()
{
    using std::endl;
    using std::cout;
    using std::cin;
    using std::string;
 
    const int arrSize = 5;
    int sz = arrSize-1;
    cout << "Please enter one of the following choices:\n"
            "c) carnivore\n"
            "p) pianist\n"
            "t) tree\n"
            "g) game\n\n";
 
    string phrase[] = {"\nTiger is a carnivore.\n", "\nChopin was a great pianist.\n", "\nMaple is a tree.\n", "\nDiablo is a revolutionary game\n"};
    char choice[arrSize] = {'c', 'p', 't', 'g', '0'};
    cin >> choice[sz];
    while(true)
    {
        for (int i=0; i<sz; ++i)
            if (choice[sz] == choice[i])
            {
                cout << phrase[i];
                return 0;
            }
        cout << "\nThis is not possible choice. Please, try again: ";
        cin.clear();
        while (cin.get() != '\n');
        cin >> choice[sz];
    }
}

Глава 6. Упражнение 4

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
//  sp_Ch6_Pg300_Ex04
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 300, упражнение 4.
/*
Когда вы вступите в Благотворительный Орден Программистов (БОП), к вам
могут обращаться на заседаниях БОП по вашему реальному имени, по
должности либо секретному имени БОП. Напишите программу, которая может
выводить списки членов по реальным именам, должностям, секретным именам либо
по предпочтению самого члена. В основу положите следующую структуру:
// Структура имен Благотворительного Ордена Программистов (БОП)
struct bop
{
    char fullname[strsize]; // реальное имя
    char title[strsize]; // должность
    char bopname[strsize]; // секретное имя БОП
    int preference; // 0 = полное имя, 1 = титул, 2 = имя БОП
};
В этой программе создайте небольшой массив таких структур и
инициализируйте его соответствующими значениями. Пусть программа запустит цикл,
который даст возможность пользователю выбирать разные альтернативы:
a. display by name b. display by title
c. display by bopname d. display by preference
q. quit
Обратите внимание, что "display by preference" (отображать по предпочтениям)
не означает, что нужно отобразить член preference; это значит, что
необходимо отобразить член структуры, который соответствует значению preference.
Например, если preference равно 1, то выбор d должен вызвать отображение
должности данного программиста. Пример запуска этой программы может
выглядеть следующим образом:
Benevolent Order of Programmers Report
a. display by name b. display by title
c. display by bopname d. display by preference
q. quit
Enter your choice: a
Wimp Macho
Raki Rhodes
Celia Laiter
Hoppy Hipman
Pat Hand
Next choice: d
Wimp Macho
Junior Programmer
MIPS
Analyst Trainee
LOOPY
Next choice: q
Bye!
*/
#include <iostream>
#include <string>
using namespace std;
 
struct bop
{
    string fullname;    // реальное имя
    string title;       // должность
    string bopname;     // секретное имя БОП
    int preference;     // 0 = полное имя, 1 = титул, 2 = имя БОП
};
 
int main()
{
    const int arrSize = 5;
 
    bop memberList[arrSize] =
    {
        {"John Goldfish", "system analyst", "FISHER"},
        {"Katherine Thomas", "junior programmer", "GREATKAT"},
        {"Dave Stone", "senior programmer", "SPARKY"},
        {"Brian Mill", "system administrator", "ROCKER"},
        {"Alice Crawford", "webmaster", "BEAUTY"}
    };
 
    cout << "Benevolent Order of Programmers Report\n"
            "a. display by name\n"
            "b. display by title\n"
            "c. display by bopname\n"
            "d. display by preference\n"
            "q. quit\n"
            "\nEnter your choice: ";
 
    char choice = ' ';
    cin >> choice;
 
    while (choice != 'q')
    {
        switch (choice)
        {
            case 'a':   for (int i=0; i<arrSize; ++i)
                            cout << memberList[i].fullname << endl;
                        break;
 
            case 'b':   for (int i=0; i<arrSize; ++i)
                            cout << memberList[i].title << endl;
                        break;
 
            case 'c':   for (int i=0; i<arrSize; ++i)
                            cout << memberList[i].bopname << endl;
                        break;
 
            case 'd':   cout << "\nPlease, set your preference:\n"
                            "0 = fullname\n"
                            "1 = title\n"
                            "2 = bopname\n";
                        for (int i=0; i<arrSize; ++i)
                        {
                            cout << "\nPlease, set your preference for "
                                 << i+1 << " memeber of BOP: ";
                            cin >> memberList[i].preference;
                        }
 
                        for (int i=0; i<arrSize; ++i)
                        {
                            if (memberList[i].preference == 0)
                                cout << memberList[i].fullname << endl;
                            else if (memberList[i].preference == 1)
                                cout << memberList[i].title << endl;
                            else if (memberList[i].preference == 2)
                                cout << memberList[i].bopname << endl;
                            else
                            {
                                cout << "\nThis is not possible choice.\n"
                                        "You should enter 0 or 1 or 2.\n"
                                        "Please, try type correct numbers next time.\n";
                                break;
                            }
 
                        }
                        break;
 
            default:    cout << "\nThis is not possible choice. Please, try again.\n";
        }
        cin.clear();
        while (cin.get() != '\n');
        cout << "\nEnter your next choice: ";
        cin >> choice;
    }
    cout << "\nBye!\n";
    return 0;
}


Вернуться к обсуждению:
Решение всех задач из учебника Стивена Прата
2
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2015, 16:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вклады, простые и сложные проценты (вопрос из учебника С. Прата)
Изучаю книгу С. Прата. В главе 5 у него присутствует такая задача: Дафна сделала вклад на сумму...

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива all-для вывода суммы...

Объясните решение задачи из учебника
Книга &quot;Курс теории вероятностей&quot; Б.В. Гнеденко, серия &quot;Классический университетский учебник&quot;, 2005...

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле...
...а реализует функции в другом - в том котором создаёт и ползуется объектом. у меня вопросс: а не...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.