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

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

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

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

30.08.2011, 21:57. Просмотров 2590. Ответов 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++
Помогите сделать программу которая пишет числа прописью от 1 до 1000000, через оператор switch

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

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

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

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...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
30.08.2011, 22:46     Число прописью, от 1 до 99 на русском #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
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
30.08.2011, 23:34     Число прописью, от 1 до 99 на русском #3
Macar, Советую воспользоваться поиском по форуму. Где-то я видел решение твоей задачи для чисел до квадриллиона. Если, конечно, тебе это интересно.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
30.08.2011, 23:45     Число прописью, от 1 до 99 на русском #4
Цитата Сообщение от Day Посмотреть сообщение
Где-то я видел решение твоей задачи для чисел до квадриллиона
может быть тут
Вывести число прописью
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
30.08.2011, 23:52     Число прописью, от 1 до 99 на русском #5
PointsEqual, Совершенно верно. Просто забыл - где, а искать было в лом.
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 00:13  [ТС]     Число прописью, от 1 до 99 на русском #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
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
31.08.2011, 00:41     Число прописью, от 1 до 99 на русском #7
Ну так ведь теперь строки изначально не инициализированы.
C++
1
char s[500] = "", s1[500] = "";
или
C++
1
2
strcpy(s, "");
strcpy(s1, "");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2011, 01:04     Число прописью, от 1 до 99 на русском
Еще ссылки по теме:

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

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

Функция, которая печатает число прописью. - C++
написать функцию,которая печатает число прописью.

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

Преобразовать число int в строку прописью char - C++
Например, вводим 40, 3 должно выдать sorok rubley tridcat kopeek. Пересмотрел много задач с похожей тематикой, но во-первых, ни одна не...


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

Или воспользуйтесь поиском по форуму:
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 01:04  [ТС]     Число прописью, от 1 до 99 на русском #8
Огромное спасибо!!!grizlik78
Yandex
Объявления
31.08.2011, 01:04     Число прописью, от 1 до 99 на русском
Ответ Создать тему
Опции темы

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