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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
george32451
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 3
#1

Простой консольный конвертер валют - проверить корректность реализации - C++

30.07.2014, 16:53. Просмотров 1086. Ответов 14
Метки нет (Все метки)

Всем привет! Я новичок на вашем форуме, как и в C++. Изучаю его третий день. Вот решил подкрепить свои знания и написать простенький конвертер валют. Думаю, что я его еще буду усовершенствовать, а пока гляньте на мой код. (Наверно, я совсем быдлокодер) Код получился через чур длинным, как по мне. Вот и решил спросить совета у знающих людей.
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
#include <iostream>
using namespace std;
 
void usd_rub();
void usd_eur();
void rub_usd();
void rub_eur();
void eur_usd();
void eur_rub();
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int choice; 
    //Выбираем валюту
    do{
        cout << "1. USD -> RUB\n";
        cout << "2. USD -> EUR\n";
        cout << "3. RUB -> USD \n";
        cout << "4. RUB -> EUR\n";
        cout << "5. EUR -> USD\n";
        cout << "6. EUR -> RUB\n" << "\n";
        cout << "7. Выйти из программы.\n\n";
        do {
            cout << "Выберите, что делать: \n\n";
            cin >> choice;
            //Проверяем, не ввел ли пользователь не верные значения. 
            if (choice<1 || choice>7) cout << "Вы ввели не верное значение. Пожалуйства, введите верное значение (от 1 до 6)\n\n";
        } while (choice<1 || choice >7); //Выполняется эта часть кода, пока пользователь не введет верное значение
        //Инструкция выбора
        switch (choice){
        case 1:
            usd_rub();
            break;
        case 2:
            usd_eur();
            break;
        case 3:
            rub_usd();
            break;
        case 4:
            rub_eur();
            break;
        case 5:
            eur_usd();
            break;
        case 6:
            eur_rub();
            break;
        case 7:
            cout << "До свиданья!";
            break;
        }
        //Выполнять программу, пока пользователь не введет число 7 с клавиатуры
    } while (choice != 7);
    return 0;
}
//Функция перевода долларов в рубли
void usd_rub(){
    double rub, usd;
    int choice;
 
    cout << "\nВведите количество долларов: \n\n";
    cin >> usd;
        
    rub = usd * 35.6339;
    cout << "\n" << usd << " доллара это " << rub << " рублей\n\n";
    //Проверка, хочет ли пользователь продолжить работу программы или нет
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        //Другого способа выхода из программы не нашел:)
        exit(0);
    case 1:
        cout << "\n";
    }
 
}
//Функция перевода долларов в евро
void usd_eur(){
    double eur, usd;
    int choice;
    cout << "\nВведите количество долларов: \n\n";
    cin >> usd;
 
    eur = usd / 1.3402;
    cout << "\n" << usd << " доллара это " << eur << " евро\n\n";
 
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        exit(0);
    case 1:
        cout << "\n";
    }
}
//Функция перевода рублей в доллары
void rub_usd(){
    double rub, usd;
    int choice;
 
    cout << "\nВведите количество рублей: \n\n";
    cin >> rub;
 
    usd = rub / 35.6339;
    cout << "\n" << rub << " рубль это " << usd << " доллара\n\n";
 
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        exit(0);
    case 1:
        cout << "\n";
    }
}
//Функция перевода рублей в евро
void rub_eur(){
    double rub, eur;
    int choice;
 
    cout << "\nВведите количество рублей: \n\n";
    cin >> rub;
 
    eur = rub / 47.8635;
    cout << "\n" << rub << " рубль это " << eur << " евро\n\n";
 
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        exit(0);
    case 1:
        cout << "\n";
    }
}
//Функция перевода евро в доллары
void eur_usd(){
    double eur, usd;
    int choice;
 
    cout << "\nВведите количество евро: \n\n";
    cin >> eur;
 
    usd = eur * 1.3402;
    cout << "\n" << eur << " евро это " << usd << " доллара\n\n";
 
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        exit(0);
    case 1:
        cout << "\n";
    }
}
//Функция перевода евро в рубли
void eur_rub(){
    double rub, eur;
    int choice;
 
    cout << "\nВведите количество евро: \n\n";
    cin >> eur;
 
    rub = eur * 47.8635;
    cout << "\n" << eur << " евро это " << rub << " рубля\n";
 
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        exit(0);
    case 1:
        cout << "\n";
    }
}
Добавлено через 31 минуту
UPD: Не много сократил код созданием функции exit(). Как-то сразу не додумался.
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
#include <iostream>
using namespace std;
 
void exit();
void usd_rub();
void usd_eur();
void rub_usd();
void rub_eur();
void eur_usd();
void eur_rub();
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int choice; 
    //Выбираем валюту
    do{
        cout << "1. USD -> RUB\n";
        cout << "2. USD -> EUR\n";
        cout << "3. RUB -> USD \n";
        cout << "4. RUB -> EUR\n";
        cout << "5. EUR -> USD\n";
        cout << "6. EUR -> RUB\n" << "\n";
        cout << "7. Выйти из программы.\n\n";
        do {
            cout << "Выберите, что делать: \n\n";
            cin >> choice;
            //Проверяем, не ввел ли пользователь не верные значения. 
            if (choice<1 || choice>7) cout << "Вы ввели не верное значение. Пожалуйства, введите верное значение (от 1 до 6)\n\n";
        } while (choice<1 || choice >7); //Выполняется эта часть кода, пока пользователь не введет верное значение
        //Инструкция выбора
        switch (choice){
        case 1:
            usd_rub();
            break;
        case 2:
            usd_eur();
            break;
        case 3:
            rub_usd();
            break;
        case 4:
            rub_eur();
            break;
        case 5:
            eur_usd();
            break;
        case 6:
            eur_rub();
            break;
        case 7:
            cout << "До свиданья!";
            break;
        }
        //Выполнять программу, пока пользователь не введет число 7 с клавиатуры
    } while (choice != 7);
    return 0;
}
// Функция выхода из функций конвертирования. Тавтология, простите))
void exit(){
    int choice;
 
    //Проверка, хочет ли пользователь продолжить работу программы или нет
    cout << "Хотите ли вы выйти из программы? \n";
    cout << "0. Да \n";
    cout << "1. Нет \n";
    cin >> choice;
    switch (choice){
    case 0:
        cout << "До свиданья!\n";
        //Другого способа выхода из программы не нашел:)
        exit(0);
    case 1:
        cout << "\n";
    }
 
}
 
//Функция перевода долларов в рубли
void usd_rub(){
    double rub, usd;
 
    cout << "\nВведите количество долларов: \n\n";
    cin >> usd;
        
    rub = usd * 35.6339;
    cout << "\n" << usd << " доллара это " << rub << " рублей\n\n";
    
    exit();
}
 
 
//Функция перевода долларов в евро
void usd_eur(){
    double eur, usd;
 
    cout << "\nВведите количество долларов: \n\n";
    cin >> usd;
 
    eur = usd / 1.3402;
    cout << "\n" << usd << " доллара это " << eur << " евро\n\n";
 
    exit();
    
}
//Функция перевода рублей в доллары
void rub_usd(){
    double rub, usd;
 
    cout << "\nВведите количество рублей: \n\n";
    cin >> rub;
 
    usd = rub / 35.6339;
    cout << "\n" << rub << " рубль это " << usd << " доллара\n\n";
 
    exit();
 
}
//Функция перевода рублей в евро
void rub_eur(){
    double rub, eur;
 
    cout << "\nВведите количество рублей: \n\n";
    cin >> rub;
 
    eur = rub / 47.8635;
    cout << "\n" << rub << " рубль это " << eur << " евро\n\n";
 
    exit();
}
//Функция перевода евро в доллары
void eur_usd(){
    double eur, usd;
 
    cout << "\nВведите количество евро: \n\n";
    cin >> eur;
 
    usd = eur * 1.3402;
    cout << "\n" << eur << " евро это " << usd << " доллара\n\n";
 
    exit();
}
//Функция перевода евро в рубли
void eur_rub(){
    double rub, eur;
 
    cout << "\nВведите количество евро: \n\n";
    cin >> eur;
 
    rub = eur * 47.8635;
    cout << "\n" << eur << " евро это " << rub << " рубля\n";
 
    exit();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2014, 16:53     Простой консольный конвертер валют - проверить корректность реализации
Посмотрите здесь:
C++ Проверить корректность реализации нескольких задач
C++ Метод хорд - проверить корректность реализации кода
Конвертер валют C++
C++ Конвертер валют. Не выводится ответ
C++ Простой консольный калькулятор
C++ Написаить простой консольный редактор текстовых файлов
C++ Простой консольный калькулятор - не пойму, где ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
krv
72 / 52 / 11
Регистрация: 10.07.2014
Сообщений: 328
30.07.2014, 17:15     Простой консольный конвертер валют - проверить корректность реализации #2
1. магические цифры - плохо. Надо хотя бы константы, а лучше читать откудато курсы валют. для простоты - из файла.
2. заставлять вводить человека цифры - плохо. А вдруг он введет букву? лучше самому контроль сделать.

3. Для обучения рассмотри еще параметры функции main и обработку строк в числа, что позволит сделать поддержку командной строки.

Это для начала.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
30.07.2014, 17:41     Простой консольный конвертер валют - проверить корректность реализации #3
Много дублирования кода.
Функции перевода валют написаны по одному шаблону - следовательно, можно обобщить. Перевод есть функция от двух аргументов - значение в исходной валюте и коэффициент перевода в целевую.
george32451
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 3
30.07.2014, 17:48  [ТС]     Простой консольный конвертер валют - проверить корректность реализации #4
krv, 0x10, спасибо за советы. На счет последнего не много не догоняю. Как обобщить функции перевода валют? И, если можно, приведите пример кода, пожалуйста
Справлюсь
23 / 23 / 5
Регистрация: 24.07.2014
Сообщений: 203
30.07.2014, 18:23     Простой консольный конвертер валют - проверить корректность реализации #5
george32451, вы массивы уже изучали?
george32451
0 / 0 / 0
Регистрация: 30.07.2014
Сообщений: 3
04.08.2014, 14:45  [ТС]     Простой консольный конвертер валют - проверить корректность реализации #6
Справлюсь, к сожалению, нет. В общем все заключается в изучении массивов, понял.
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
04.08.2014, 20:26     Простой консольный конвертер валют - проверить корректность реализации #7
C++
1
2
3
4
5
6
7
cout << "1. USD -> RUB\n";
        cout << "2. USD -> EUR\n";
        cout << "3. RUB -> USD \n";
        cout << "4. RUB -> EUR\n";
        cout << "5. EUR -> USD\n";
        cout << "6. EUR -> RUB\n" << "\n";
        cout << "7. Выйти из программы.\n\n";
Можно не писать cout постоянно:

C++
1
2
3
4
5
6
7
cout << "1. USD -> RUB\n"
        << "2. USD -> EUR\n"
        << "3. RUB -> USD \n"
        << "4. RUB -> EUR\n"
        << "5. EUR -> USD\n"
        << "6. EUR -> RUB\n" << "\n"
        << "7. Выйти из программы.\n\n"
gru74ik
Модератор
Эксперт CЭксперт С++
3979 / 1726 / 193
Регистрация: 20.02.2013
Сообщений: 4,828
Записей в блоге: 21
04.08.2014, 22:30     Простой консольный конвертер валют - проверить корректность реализации #8
Цитата Сообщение от orange_fox Посмотреть сообщение
Можно не писать cout постоянно
Более того, можно и оператор << не писать постоянно
C++
1
2
3
4
5
6
7
cout << "1. USD -> RUB\n"
        "2. USD -> EUR\n"
        "3. RUB -> USD\n"
        "4. RUB -> EUR\n"
        "5. EUR -> USD\n"
        "6. EUR -> RUB\n\n"
        "7. Выйти из программы.\n\n";
rikimaru2013
C++ Game Dev
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
04.08.2014, 22:53     Простой консольный конвертер валют - проверить корректность реализации #9
george32451, если еще актуально скажу где как оптимизировать еще код.
gru74ik
Модератор
Эксперт CЭксперт С++
3979 / 1726 / 193
Регистрация: 20.02.2013
Сообщений: 4,828
Записей в блоге: 21
05.08.2014, 14:08     Простой консольный конвертер валют - проверить корректность реализации #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
/// Разъяснение терминов и сокращений:
    //  EUR - евро
    //  GBP - британские фунты
    //  JPY - японские йены
    //  RUB - российский рубль
    //  USD - американский доллар
    //  forex (foreign exchange) - иностранная валюта
    //  qty (quantity) - количество
    //  row - строка
    //  col (column) - колонка (столбец)
    //  index - порядковый номер
 
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int qty=5;  // количество валют
 
    string forex[qty]={"EUR", "GBP", "JPY", "RUB", "USD"};
    int index=1;
    for (int i=0; i<qty; ++i)
        for (int j=0; j<qty; ++j)
        {
            if (forex[i].compare(forex[j]))
            {
                if (index<10)
                {
                    cout << " " << index << ". " << forex[i]
                         << " -> " << forex[j] << endl;
                    ++index;
                }
                else
                {
                    cout << " " << index << ". " << forex[i]
                         << " -> " << forex[j] << endl;
                    ++index;
                }
            }
        }
                
    return 0;
}
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
05.08.2014, 14:10     Простой консольный конвертер валют - проверить корректность реализации #11
gru74ik, Не проще-ли?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
 
int main()
{
   const std::vector<std::string> forex = {"EUR", "GPB", "JPY", "RUB", "USD"};
   int index = 1;
   for (const auto& s : forex)
   {
      for (const auto& e : forex)
      {
         if (e == s) continue;
         std::cout << (index < 10 ? " " : "") << index << ". " << s << " -> " << e << std::endl;
         ++index;
      }
   }
}
gru74ik
Модератор
Эксперт CЭксперт С++
3979 / 1726 / 193
Регистрация: 20.02.2013
Сообщений: 4,828
Записей в блоге: 21
05.08.2014, 14:13     Простой консольный конвертер валют - проверить корректность реализации #12
Цитата Сообщение от ForEveR Посмотреть сообщение
Не проще-ли?
Очень красиво у Вас получилось
Благодарю!
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
05.08.2014, 15:51     Простой консольный конвертер валют - проверить корректность реализации #13
ForEveR, Забыли
C++
1
#include <string>
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
05.08.2014, 16:07     Простой консольный конвертер валют - проверить корректность реализации #14
orange_fox, Не то, чтобы забыл. У меня скомпилировалось. Но вцелом да, спасибо за замечание.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2014, 23:32     Простой консольный конвертер валют - проверить корректность реализации
Еще ссылки по теме:
C++ Проверить корректность ввода
C++ Проверить код на корректность
C++ Проверить корректность расположения скобок
C++ Проверить корректность заданной даты
C++ Решение уравнения - проверить код на корректность

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

Или воспользуйтесь поиском по форуму:
Справлюсь
23 / 23 / 5
Регистрация: 24.07.2014
Сообщений: 203
05.08.2014, 23:32     Простой консольный конвертер валют - проверить корректность реализации #15
george32451, когда изучите массивы вот что бы я вам посоветовал:
1.запрос про перевод из одной валюты в другую осуществлять двумя числами(первая из какой,вторая в какую)
2.создать массив кофициентов перевода из рублей в другие валюты так чтобы индекс элемента соответствовал номеру валюты
3.расчёт результата осуществлять можно так tsena/k[valuta1]*k[valuta2]
хотя тут можно по разному решить
Yandex
Объявления
05.08.2014, 23:32     Простой консольный конвертер валют - проверить корректность реализации
Ответ Создать тему
Опции темы

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