Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразования числа в текстовую форму 
V
    Опции темы
Metalex
Дата 16.3.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Всем привет!!
У меня в textBox1 вводится число (до 1000), а в textBox2 мы должны вывести, например, "пять", "сто пятьдесят три" и т.д.
Помогите, пожалуйста - я сделал пока только для двузначных чисел, до 21 все корректно, 30, 40 и т.д. тоже. А вот 41, например - вместо "сорок один" выводит "один". Почему?
Код кнопки и функций перед ней:
Код

private string one(int k)
        {
            string inported="";
            switch (k)
            {
                case 0:
                    inported = "Нуль";
                    break;
                case 1:
                    inported = "Один";
                    break;
                case 2:
                    inported = "Два";
                    break;
                case 3:
                    inported = "Три";
                    break;
                case 4:
                    inported = "Чотири";
                    break;
                case 5:
                    inported = "П'ять";
                    break;
                case 6:
                    inported = "Шість";
                    break;
                case 7:
                    inported = "Сім";
                    break;
                case 8:
                    inported = "Вісім";
                    break;
                case 9:
                    inported = "Дев'ять";
                    break;
            }
            return (inported);
        }

        private string two(int k)
        {
            string imp = "";
            switch (k)
            {
                case 10:
                    imp = "Десять";
                    break;
                case 11:
                    imp = "Одинадцять";
                    break;
                case 12:
                    imp = "Дванадцять";
                    break;
                case 13:
                    imp = "Тринадцять";
                    break;
                case 14:
                    imp = "Чотирнадцять";
                    break;
                case 15:
                    imp = "П'ятнадцять";
                    break;
                case 16:
                    imp = "Шістнадцять";
                    break;
                case 17:
                    imp = "Сімнадцять";
                    break;
                case 18:
                    imp = "Вісімнадцять";
                    break;
                case 19:
                    imp = "Дев'ятнадцять";
                    break;
                case 20:
                    imp = "Двадцять";
                    break;
                case 30:
                    imp = "Тридцять";
                    break;
                case 40:
                    imp = "Сорок";
                    break;
                case 50:
                    imp = "П'ятдесят";
                    break;
                case 60:
                    imp = "Шістдесят";
                    break;
                case 70:
                    imp = "Сімдесят";
                    break;
                case 80:
                    imp = "Вісімдесят";
                    break;
                case 90:
                    imp = "Дев'яносто";
                    break;
            }
            return (imp);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int k, m, p;
            string inp = textBox1.Text;
            string output1 = "";
            string output2 = "";
            if (inp.Length == 1)
            {
                k = Convert.ToInt16(Convert.ToString(inp[0]));
                textBox2.Text = one (k);
            }
            if (inp.Length == 2)
            {
                m = Convert.ToInt16(inp);
                output1 = two(m);
                k = Convert.ToInt16(Convert.ToString(inp[0]));
                p = Convert.ToInt16(Convert.ToString(inp[1]));
                if ((k>1)&&(p != 0))
                {
                    output2 = one(p);
                }
                textBox2.Text = output1+output2;
            }
        }



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Dims
Дата 16.3.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 0
Всего: 11



Цитата(Metalex @  16.3.2010,  22:00 Найти цитируемый пост)
А вот 41, например - вместо "сорок один" выводит "один". Почему?

А ты в отладчике-то посмотри! У тебя switch внутри two() не содержит реакции на 41, поэтому two() возвращает "", остаётся только то, что возвращает one().
PM MAIL   Вверх
Metalex
Дата 17.3.2010, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Dims, вы абсолютно неправы. Ошибка была здесь, точнее недочет:
Код

if (inp.Length == 2)
            {
                m = Convert.ToInt16(inp);
                output1 = two(m);
                k = Convert.ToInt16(Convert.ToString(inp[0]));
                p = Convert.ToInt16(Convert.ToString(inp[1]));
                if ((k>1)&&(p != 0))
                {
                    output2 = one(p);
                }
                textBox2.Text = output1+output2;
            }

нужно:
Код

if (inp.Length == 2)
            {
                m = Convert.ToInt16(inp);
                output1 = two(m);
                k = Convert.ToInt16(Convert.ToString(inp[0]));
                p = Convert.ToInt16(Convert.ToString(inp[1]));
                if ((k>1)&&(p != 0))
                {
                    k *= 10;
                    output1 = two(k);
                    output2 = one(p);
                }
                textBox2.Text = output1+output2;
            }



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.