Форум программистов, компьютерный форум CyberForum.ru

Задача из "ООП в C++" Р. Лафоре - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с ресурсами (создать файл ресурсов, загрузить туда изображения (png) и использовать их в проекте?) http://www.cyberforum.ru/cpp-beginners/thread937683.html
Как в Visual Studio Desktop создать файл ресурсов, загрузить туда изабражения (png) и использовать их в проэкте? В общем как интегрировать изображения в exe файл?
C++ Метод STL size и инициализация списка Всем доброго вечера! Вот код#include <fstream> // для потоковых файловых функций #include <typeinfo> // для typeid() using namespace std; #include <process.h> // для exit() #include <iostream> #include <string> #include <algorithm> #include <list> http://www.cyberforum.ru/cpp-beginners/thread937644.html
Как сделать так, чтобы элемент массива считывался и умножался. C++
Вновь добрый вечер! Есть массив... пкод Я ввёл значение "1" в массив. Теперь пкод = 1 Но... Мне теперь нужно например это число в пкод умножить на число 1. Т.е. как я писал res = пкод * 1 - не прокатило. Он считает Асци код (49 код это единица) и умножает это число на это... в общем, как быть? Как сделать так, чтобы элемент массива считывался и умножался. (Извиняюсь за такую тему, не...
Сортировка массива C++
Добрый вечер! Мне нужно отсортировать элементы массива по возрастанию. Проблема в том, что элементы состоят как из цифр, так и из символов. Вводим допустим "ff03" и должно получиться согласно возрастанию шестнадцатеричной системе счисления, т.е. "03ff". Есть идеи у кого, как это сделать? Буду благодарен. Заранее спасибо!
C++ Не пойму чего хочет компилятор http://www.cyberforum.ru/cpp-beginners/thread937573.html
Вот значит перепечатал буква в букву с книги Страуструпа такой код в main() . Этот кусок должен извлекать числа со строк, если это возможно. Но в одном месте пишет требуется точка с запятой и при компиляции куча ошибок. В чем дело здесь? П.С. VS2012 double str_to_double(string s)/*Вот тут красной волной выделяет и говорит о точке с запятой */ { istringstream is(s); double d; is>>d;...
C++ .h Невозможно открыть Помогите плз. Visual Studio стал выводить что невозможно открыть .h файл. Там у меня пол программы было. Кажется файл повреждён. Возможно ли как то его восстановить? подробнее

Показать сообщение отдельно
Purcell
 Аватар для Purcell
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
14.08.2013, 01:33     Задача из "ООП в C++" Р. Лафоре
Глава 3. Задача 11 (стр. 141 - 4-е издание, СПб, Питер, 2012).

Не слишком ли громоздкая конструкция у меня получилась для решения такой задачи? Есть ли ошибки? Как вам оформление и комментарии? Насколько полезны комментарии?

Автор учебника просил создать калькулятор, который умеет складывать и вычитать денежные суммы, выраженные в устаревшей денежной системе Великобритании, а также умножать такую сумму на вещественное число. Правда, я организовал другое взаимодействие с пользователем и добавил возможность чтения пользователем краткой инструкции. Автор просил подобную организацию:
Введите 1-й операнд, операцию и 2-й операнд: 20 + 4
Результат равен: 24
Продолжить вычисления (y/n) ? n

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
// 11.cpp
/* калькулятор, складывающий и вычитающий денежные суммы,
   выраженные в устаревшей денежной системе Великобритании,
   а также умножающий эти суммы на вещественные числа */
 
# include <iostream>
 
using namespace std;
 
int main()
{
    char ch;    // выбор пользователя продолжать работать с программой или выйти
    do          // цикл, пока пользователь не введёт 'n' (ch == 'n')
    {
        int first_pou, first_sch, first_pen;    // вводимые фунты, шиллинги и пенсы
        int second_pou, second_sch, second_pen;     // вводимые фунты, шиллинги и пенсы
        int last_pou, last_sch, last_pen;           // выводимые фунты, шиллинги и пенсы
        int temp;                                   // для временного хранения значений
        int choice;                       // для выбора пользователя одной из трёх функции программы
        float number;                           // число, на которое умножается сумма
        char point;                             // для "нейтрализации" вводимого символа точки
        cout << "Если нужно сложить две суммы, введите '1'. Если нужно вычесть ";
        cout << "одну сумму из другой, введите '2'. Если нужно умножить сумму ";
        cout << "на число, введите '3', для получения инструкции по использованию этой ";
        cout << "программы введите '4': ";
        cin >> choice;
        cout << endl;
        switch (choice)    // выбор функции программы
        {
            case (1):      // 1-я функция: сложение 2-х сумм
                cout << "Введите 1-ю сумму: ВЈ";
                cin >> first_pou >> point >> first_sch >> point >> first_pen;
                cout << "Введите 2-ю сумму: ВЈ";
                cin >> second_pou >> point >> second_sch >> point >> second_pen;
                last_pou = first_pou + second_pou;
                last_sch = first_sch + second_sch;
                last_pen = first_pen + second_pen;
                if (last_pen > 11)    // если пенсов больше, чем 1 шиллинг (1 шиллинг = 12 пенсов),
                {                     // то лишнее переводится в шиллинги
                    last_sch = last_sch + (last_pen / 12);
                    if (last_pen % 12 == 0)
                    {
                        last_pen = 0;
                    }
                    else
                    {
                        last_pen = last_pen - 12;
                    }
                }
                if (last_sch > 19)    // если шиллингов больше, чем 1 фунт (1 фунт = 20 шиллингам),
                {                     // то лишнее переводится в фунты
                    last_pou = last_pou + (last_sch / 20);
                    if (last_sch % 20 == 0)
                    {
                        last_sch = 0;
                    }
                    else
                    {
                        last_sch = last_sch - 20;
                    }
                }
                cout << "Всего: ВЈ" << last_pou << "."
                << last_sch << "." << last_pen << endl;
                break;
            case (2):    // 2-я функция: вычитание одной суммы из другой
                cout << "Введите 1-ю сумму: ВЈ";
                cin >> first_pou >> point >> first_sch >> point >> first_pen;
                cout << "Введите 2-ю сумму: ВЈ";
                cin >> second_pou >> point >> second_sch >> point >> second_pen;
                last_pen = first_pen - second_pen;
                if (last_pen > 11)    // если пенсов больше, чем 1 шиллинг (1 шиллинг = 12 пенсов),
                {                     // то лишнее переводится в шиллинги
                    temp = last_pen / 12;
            for (int i = 0; i < temp; i++)
                    {
                        last_pen = last_pen - 12;
                    }
                    last_sch = first_sch - second_sch + temp;
                }
                else if (last_pen < 0)    // если количество пенсов оказалось меньше нуля, то
                {                         // необходимо вычесть соответстующее количество шиллингов
                    last_pen = 0 - last_pen;
                    if (last_pen < 12)    // если пенсов от -11 до 0, то вычитается всего лишь
                    {                     // 1 шиллинг
                        temp = 1;
                    }
                    else                  // если пенсов от меньше -11, то вычисляется количество
                    {                     // шиллингов, которые необходимо вычесть
                        temp = last_pen / 12 + 1;
                        for (int i = 1; i < temp; i++)
                        {
                            last_pen = last_pen - 12;
                        }
                    }
                    if (last_pen == 0)                 // вычисление итогового количества пенсов
                    {
                        temp--;
                    }
                    else
                    {
                        last_pen = 12 - last_pen;
                    }
                    last_sch = first_sch - second_sch - temp; // и шиллингов
                }
                else                                      // если вышеперечисленные условия
                {                                         // не соблюдены, то вычисление количества
                    last_sch = first_sch - second_sch;    // шиллингов является простой задачей
                }
                if (last_sch > 19) // если шиллингов больше, чем 1 фунт, или равно 1 фунтy
                {                  // (1 фунт = 20 шиллингов), то лишнее переводится в фунты
                    temp = last_sch / 20;
                    for (int i = 0; i < temp; i++)
                    {
                        last_sch = last_sch - 20;
                    }
                    last_pou = first_pou - second_pou + temp;
                }
                else if (last_sch < 0)    // если количество шиллингов оказалось меньше нуля,
                {                         // то необходимо вычесть соответствующее количество фунтов
                    last_sch = 0 - last_sch;
                    if (last_sch < 19)    // если шиллингов от -19 до 0,
                    {                     // вычитается всего лишь 1 шиллинг
                        temp = 1;
                    }
                    else                  // если шиллингов меньше -19, то вычисляется количество
                    {                     // фунтов, которое необходимо вычесть
                        temp = last_sch / 20 + 1;
                        for (int i = 1; i < temp; i++)
                        {
                            last_sch = last_sch - 20;
                        }
                    }
                    if (last_sch == 0)             // вычисление итогового количества шиллингов
                    {
                        temp--;
                    }
                    else
                    {
                        last_sch = 20 - last_sch;
                    }
                    last_pou = first_pou - second_pou - temp; // и фунтов
                }
                else                                 // если вышеперечисленные условия не соблюдены,
                {                                     // то вычисление количества фунтов является
                    last_pou = first_pou - second_pou; // простой задачей
                }
                cout << "Всего: ВЈ" << last_pou << "."
                << last_sch << "." << last_pen << endl;
                break;
            case (3):    // 3-я функция: умножение суммы на вещественное число
                cout << "Введите сумму: ВЈ";
                cin >> first_pou >> point >> first_sch >> point >> first_pen;
                cout << "Введите число, на которое необходимо умножить сумму: ";
                cin >> number;
                last_pou = first_pou * number;
                last_sch = first_sch * number;
                last_pen = first_pen * number;    
                if (last_pen > 11) // если пенсов больше, чем 1 шиллинг (1 шиллинг = 12 пенсов),
                {                   // то лишнее переводится в шиллинги
                    temp = last_pen / 12;
                    last_sch = last_sch + temp;
                    for (int i = 0; i < temp; i++)
                    {
                        last_pen = last_pen - 12;
                    }
                }
                if (last_sch > 19)    // если шиллингов больше, чем фунтов (1 фунт = 20 шиллингам),
                {                     // то лишнее переводится в фунты
                    temp = last_sch / 20;
                    last_pou = last_pou + temp;
                    for (int i = 0; i < temp; i++)
                    {
                        last_sch = last_sch - 20;
                    }
                }
                cout << "Всего: ВЈ" << last_pou << "."
                << last_sch << "." << last_pen << endl;
                break;
            case (4):
                cout << "Устаревшая денежная система Великобритании выглядит следующим ";
                cout << "образом: 1 фунт = 20 шиллингов, 1 шиллинг = 12 пенсов. Вводите";
                cout << " сумму сразу после символа фунта и разделяйте фунты, шиллинги и ";
                cout << "пенсы точками без пробелов. Это должно выглядеть вот так: ";
                cout << "'ВЈ10.4.11' или 'ВЈ3.0.5'. Даже если какой-то элемент из данной ";
                cout << "денежной системы отсутствует, его отсутствие необходимо обозначить ";
                cout << " числом '0': 'ВЈ0.2.9' или 'ВЈ194.18.0'. При умножении суммы ";
                cout << "на число, вводите это число так, как если бы вы вводили его на ";
                cout << "обычном калькуляторе.\n";
                break;
            default:
                cout << "Ошибка! Вы ввели недопустимое значение\n";
        }
        cout << "\nЖелаете продолжить работу с программой (y/n)? ";
        cin >> ch;
        cout << endl;
    }
    while (ch != 'n');
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru