Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
feniks-igor@mai
#1

Как данную программу реализовать при помощи классов - C++

18.05.2012, 19:33. Просмотров 379. Ответов 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
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
~cpp
 
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
// класс для вывода кириллицы в консоль
class Rus 
{
public:
Rus(const char* msg): data(new char [lstrlen(msg)+1]) {CharToOemA(msg, data);}
~Rus() {delete [] data;};
operator const char* () const {return data;}
private:
    char* data;
};
int DigitsCount(double num, int* out)
{
 if (num == 0.0f) return 0;
 *out = (int)((num * 100) + 0.5);
return 2;
}
int DigitsCount(long num)
{
 int count = 0;
 while (num)
 {
 num /= 10;
 ++count;
 }
 return count;
}
void IntToWords(long num, int cnt, char* result)
{
  //массив, для определения разряда, в котором находимся(сотни,десятки,еденицы...)   
 int osn[11]={0,1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
 
  //массив оснований
    char *basis[11][10]={
{"","","","","","","","","",""},{"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},{"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},{"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},{"","одна","две","три","четыре","пять","шесть","семь","восемь","девять"},{"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},{"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},{"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},{"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},    {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},  {"","один","два","три ","четыре","пять","шесть","семь","восемь","девять"}}; 
    
//массив окончаний
char *termination[10][10]={
 {"","","","тысяч","","","миллионов","","","миллиардов"}, {"","","","тысяча","","","миллион","","","миллиард"},
 {"","","","тысячи","","","миллиона","","","миллиарда"}, {"","","","тысячи","","","миллиона","","","миллиарда"},
 {"","","","тысячи","","","миллиона","","","миллиарда"}, {"","","","тысяч","","","миллионов","","","миллиардов"},
 {"","","","тысяч","","","миллионов","","","миллиардов"}, {"","","","тысяч","","","миллионов","","","миллиардов"},
 {"","","","тысяч","","","миллионов","","","миллиардов"}, {"","","","тысяч","","","миллионов","","","миллиардов"}};
 
char *dec[10]={"десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать",  "шестнадцать","семнадцать","восемнадцать","девятнадцать"};
 
 int celoe;
 
 while (num > 0)
 {
 // обрабатываем числа 10-19
 if ((cnt % 3) == 2 && ((num/osn[cnt]) == 1))
 {
 // отсекаем цифру 1, т.к. определили ее предыдущим условием
 num %= osn[cnt];
 --cnt;
 // число в текущем разряде (т.е. после 1)
 celoe = num/osn[cnt];
 // оставшееся число
 num %= osn[cnt];
 --cnt;
 // пополнение результата строковым представлением числа 10-19
 strcat(result, dec[celoe]);
 // пополнение результата классом чисел (тысячи, миллионы, ...)
 strcat(result, termination[0][cnt]);
 if (strcmp(termination[0][cnt], "") != 0)
 strcat(result, " ");
  }
  // иначе обрабатываем единицы или сотни
 else
 {
 // отсекаем следующую цифру
 celoe = num / osn[cnt];
 num %= osn[cnt];
 // пополняем результат строковым выражением этой цифры в зависимости от ее разряда
 strcat(result, basis[cnt][celoe]);
 --cnt;
 strcat(result, " ");
 // если осталось целое количество классов чисел, то...
 if ((cnt % 3) == 0)
 {
 // пополняем результат классом чисел (тысячи, миллионы, ...)
 strcat(result, termination[celoe][cnt]);
 if (strcmp(termination[celoe][cnt], "") != 0)
strcat(result, " ");
}
}
}
}
 
char *towords(double numb)
{
    char *dollars[10]={"долларов","доллар","доллара","доллара","доллара","долларов","долларов",  "долларов","долларов", "долларов"};
 
 char *cents[10]={"центов","цент","цента","цента","цента","центов","центов","центов","центов","центов"};
 
 // выделение целой и дробной части
 long    n1 = numb;
 double  n2 = numb - n1;
 
    // подсчет количества цифр...
    int     cntDollars = DigitsCount(n1);
    int     lastDigitDollar = n1 % 10;
 
    // ... и преобразование дробной части к целому числу центов
    int     cent;
    int     cntCents = DigitsCount(n2, &cent);
    int     lastDigitCent = cent % 10;
 
    if (cntDollars == 0 && cntCents == 0) return "ноль долларов ноль центов";
 
    char    result[512] = "";
    bool    dollarsExist = false;
 
    // конвертируем доллары (n1)
    if (cntDollars > 0)
    {
    dollarsExist = true;
 
    IntToWords(n1, cntDollars, result);
    strcat(result, dollars[lastDigitDollar]);
    }
 
    // конвертируем центы (n2)
    if (cntCents > 0)
    {
    if (dollarsExist)
    strcat(result, " ");
 
    IntToWords(cent, cntCents, result);
    strcat(result, cents[lastDigitCent]);
    }
 
    return result;
    }
 
    int main(int argc, char* argv[])
    {             
    char    str[100];
    char    ch;
    double  inputNumber;
 
    do
    {
    cout << Rus("Введите число") << endl;
    cin.getline(str, 128);
 
    inputNumber = atof(str);
 
    if (inputNumber < 0)
    cout << Rus("Вы ввели отрицательное число") << endl;
    else if (inputNumber > std::numeric_limits<long>::max())
    cout << Rus("Вы ввели число более максимального предела - ") << std::numeric_limits<long>::max() << endl;
    else
     {
    cout << Rus("Вы ввели: ") << Rus(towords(inputNumber)) << endl;
     }
 
     cout << Rus("Хотите продолжить? (Y = да)") << endl;
     ch = cin.get();
     cin.get();
     }
     while ((ch == 'y') || (ch == 'Y'));
 
    return 0;
    }
   /
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 19:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как данную программу реализовать при помощи классов (C++):

Реализовать калькулятор, при помощи пользовательских классов - C++
Мне нужно сделать калькулятор, при помощи классов. Учитывая скобки( например: 3-2*(3+5)) Классы начали изучать буквально недавно. Поэтому...

Создание неоднородного списка при помощи абстрактных классов - C++
Здравствуйте, столкнулся с проблемой при создании неоднородного списка при помощи абстрактных классов, помогите)

Как реализовать данную формулу в коде? - C++
Вычислить значение выражения, содержащего сумму и произведение p.s. я может и сам решу её,просто я не могу с формулой...

Как ускорить данную программу - C++
И опять магические квадраты...Пытаюсь вычислить все магические квадраты 4-ого порядка, но программа работает слишком медленно...Странно, но...

Как скомпилировать данную программу? - C++
есть программа не знаю как компилировать #include&lt;iostream&gt; using namespace std; int mai() { count&lt;&lt;&quot;the first programm &quot;; ...

Как написать данную программу на c++? - C++
Сколько не пытался, ничего не выходит.

1
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.05.2012, 09:49 #2
feniks-igor@mai, она и так реализована при помощи классов. Задача решена!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 09:49
Привет! Вот еще темы с ответами:

как написать данную программу через функцию? - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; main() { int i,a=0; float k=0,M; ...

Как реализовать наследование классов - C++
Здравствуйте, уважаемые форумчане. Помогите с решением проблемной ситуации, связанной скорее всего с аргументами в коде. Я определяю...

Как реализовать взаимодействие классов? - C++
Создаю новую тему ибо новая проблема. Дело в том, что BaseLcd - абстрактная прослойка между устройством и кодом, я отправляю ссылку на...

Как правильно переделать данную программу используя указатели? - C++
Как правильно переделать данную программу используя указатели? Вот у меня начальный код и переделанный. Вроде всё нормально, но мне кажется...


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

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

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