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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
#1

Число прописью, от 1 до 99 на русском - C++

30.08.2011, 21:57. Просмотров 2604. Ответов 7
Метки нет (Все метки)

Программа работает, но не совсем правильно, отлично выводит числа от 1 до 20 потом при вводе
21 - выводит один один;
47 - выводит семь семь;
83 - выводит три три.
Помогите исправить ошибку.
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
#include <iostream>
#include <windows.h>
using namespace std;
 char*Rus(const char* text);
 int main()
{
        int k;
        char *s,*s1;
        cin>>k;
        s1="";
        s="";
    if ((k>=10) && (k<20))
    {
        switch(k)
        {
         case 10: s=Rus("десять");break;
         case 11: s=Rus("одиннадцать");break;
         case 12: s=Rus("двенадцать");break;
         case 13: s=Rus("тринадцать");break;
         case 14: s=Rus("четырнадцать");break;
         case 15: s=Rus("пятнадцать");break;
         case 16: s=Rus("шестнадцать");break;
         case 17: s=Rus("семнадцать");break;
         case 18: s=Rus("восемнадцать");break;
         case 19: s=Rus("девятнадцать");break;
        }
    }
    else
    {
     switch(k/10)
     {
        case 2: s=Rus("двадцать");break;
        case 3: s=Rus("тридцать");break;
        case 4: s=Rus("сорок");break;
        case 5: s=Rus("пятьдесят");break;
        case 6: s=Rus("шестьдесят");break;
        case 7: s=Rus("семьдесят");break;
        case 8: s=Rus("восемьдесят");break;
        case 9: s=Rus("девяносто");break;
       
     };
     switch(k%10)
     {
        case 1: s1=Rus("один");break;
        case 2: s1=Rus("два");break;
        case 3: s1=Rus("три");break;
        case 4: s1=Rus("четыре");break;
        case 5: s1=Rus("пять");break;
        case 6: s1=Rus("шесть");break;
        case 7: s1=Rus("семь");break;
        case 8: s1=Rus("восемь");break;
        case 9: s1=Rus("девять");break;   
        };
    };
    cout<<s<<" "<<s1<<endl;
    return 0;
}
char bufRus[500];
char* Rus(const char* text) {
    CharToOemA(  text, bufRus);
    return bufRus;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2011, 21:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Число прописью, от 1 до 99 на русском (C++):

Число прописью - C++
Дано двухзначное число.Вывести его прописью. с помошью switch... бес понятия!помогите по быстрому,пожалуйста!

Число прописью - C++
Помогите сделать программу которая пишет числа прописью от 1 до 1000000, через оператор switch

Вывести число прописью - C++
Я бы тоже внес свою лепту в форумский FAQ. Есть у меня программа которая конвертирует число от 1 до 999 в прописную строку.. Не раз...

Вывести число прописью - C++
С клавиатуры вводится натуральное число, не превосходящее 1000. Представить его в виде соответствующей словесной записи

Вывести трехзначное число прописью - C++
Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть», 814 — «восемьсот...

Sentence. Записать число прописью - C++
Once upon a time in a land far far away, inhabited only by math students, Iva and Vedran were discussing self-explanatory sentences. A part...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
30.08.2011, 22:46 #2
Функция Rus использует буфер bufRus для преобразования и возвращает указатель на этот буфер. Следующий вызов Rus изменяет значение в буфере, но возвращает тот же самый указатель. Поэтому предыдущий указатель указывает теперь уже на новое содержимое того же самого буфера. То есть результат, полученный вызовом Rus можно использовать лишь до следующего вызова этой функции, иначе же полученную строку придётся скопировать.

Добавлено через 3 минуты
Можно, к примеру, s и s1 сделать массивами
C++
1
char s[500], s1[500];
А вместо присваивания использовать функцию strcpy()
C++
1
case 2: strcpy(s, Rus("двадцать")); break;
Добавлено через 1 минуту
Или же вместо строк в C-стиле использовать std::string
Day
1155 / 960 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
30.08.2011, 23:34 #3
Macar, Советую воспользоваться поиском по форуму. Где-то я видел решение твоей задачи для чисел до квадриллиона. Если, конечно, тебе это интересно.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
30.08.2011, 23:45 #4
Цитата Сообщение от Day Посмотреть сообщение
Где-то я видел решение твоей задачи для чисел до квадриллиона
может быть тут
Вывести число прописью
Day
1155 / 960 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
30.08.2011, 23:52 #5
PointsEqual, Совершенно верно. Просто забыл - где, а искать было в лом.
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 00:13  [ТС] #6
grizlik78 Ваш вариант мне больше понятен, только теперь проблема в том что при вводе цифр от 1 до 20 и 30, 40, 50... выводит лишние символы. Прошу прощения может я что то не так сделал, я пока в программировании не силен
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
#include <iostream>
#include <windows.h>
using namespace std;
 char*Rus(const char* text);
 
int main()
{
        int k;
        char s[500], s1[500];
        cin>>k;
      //  s1="";
       // s="";
    if ((k>=10) && (k<20))
    {
        switch(k)
        {
         case 10: strcpy (s, Rus("десять"));break;
         case 11: strcpy (s, Rus("одиннадцать"));break;
         case 12: strcpy (s, Rus("двенадцать"));break;
         case 13: strcpy (s, Rus("тринадцать"));break;
         case 14: strcpy (s, Rus("четырнадцать"));break;
         case 15: strcpy (s, Rus("пятнадцать"));break;
         case 16: strcpy (s, Rus("шестнадцать"));break;
         case 17: strcpy (s, Rus("семнадцать"));break;
         case 18: strcpy (s, Rus("восемнадцать"));break;
         case 19: strcpy (s, Rus("девятнадцать"));break;
        }
    }
    else
    {
     switch(k/10)
     {
            
 
        case 2: strcpy (s, Rus("двадцать")); break;
        case 3: strcpy (s, Rus("тридцать"));break;
        case 4: strcpy (s, Rus("сорок"));break;
        case 5: strcpy (s, Rus("пятьдесят"));break;
        case 6: strcpy (s, Rus("шестьдесят"));break;
        case 7: strcpy (s, Rus("семьдесят"));break;
        case 8: strcpy (s, Rus("восемьдесят"));break;
        case 9: strcpy (s, Rus("девяносто"));break;
       
     };
     switch(k%10)
     {
        case 1: strcpy (s1 , Rus("один"));break;
        case 2: strcpy (s1 , Rus("два"));break;
        case 3: strcpy (s1 , Rus("три"));break;
        case 4: strcpy (s1 , Rus("четыре"));break;
        case 5: strcpy (s1 , Rus("пять"));break;
        case 6: strcpy (s1 , Rus("шесть"));break;
        case 7: strcpy (s1 , Rus("семь"));break;
        case 8: strcpy (s1 , Rus("восемь"));break;
        case 9: strcpy (s1 , Rus("девять"));break;
       
        };
    };
    
    cout<<s<<" "<<s1<<endl;
    return 0;
}
char bufRus[500];
char* Rus(const char* text) {
    CharToOemA(  text, bufRus);
    return bufRus;
}
Миниатюры
Число прописью, от 1 до 99 на русском  
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
31.08.2011, 00:41 #7
Ну так ведь теперь строки изначально не инициализированы.
C++
1
char s[500] = "", s1[500] = "";
или
C++
1
2
strcpy(s, "");
strcpy(s1, "");
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 01:04  [ТС] #8
Огромное спасибо!!!grizlik78
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2011, 01:04
Привет! Вот еще темы с ответами:

Найти сумму двух денежных сумм заданных прописью, ответ вывести прописью - C++
Приветствую форумчан, прошу момочь с задачей : Сложить две денежные суммы в рублях и копейках, заданные прописью. Результат вывести также...

Вывести прописью введенное пользователем число - C++
Код на С++ , который должен выводить введенное пользователем число прописью. #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include...

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

Вывести число прописью с использование функции - C++
Нуждаюсь в помощи... Вот задание: Заданное натурально число n, не превосходящее 1000, записать прописью, т.е. вывести соответствующее...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.08.2011, 01:04
Ответ Создать тему
Опции темы

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