Loading...
aslv1 avatar aslv1 304 Точки

[Homework] C# Basics - Lecture 5 - Problem 11. * Number as Words

Task: Write a program that converts a number in the range [0…999] to words, corresponding to the English pronunciation.

Някой има ли идея как може да се реши задачата освен със много много if-ове и switch-ове? Все пак не е толкова засукана, колкото задачата за римските числа, но има ли някакъв хитър начин?

Поздрави и благодаря!

1
Programming Basics
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Когато се качва код в pastebin е силно препоръчително да се избира и за syntax съответния език, на който е писан кода. Без него много по-трудно се чете кода, защото няма оцветяване на ключови думи.

2
usmiwka80 avatar usmiwka80 10 Точки

Здравейте! Това е моето решение на задачата. Очаквам вашите мнения и препоръки.

Problem 11.*Number As Words 

0
yankozlatanov avatar yankozlatanov 10 Точки

Ето и моето разчекнато решение http://pastebin.com/SJsmtFhj скълъпено за около 1 час.

Ще си поиграя ако мога да намаля някои и друг ред.

0
23/11/2014 18:06:31
tilchev92 avatar tilchev92 Trainer 128 Точки

Мисля, че скалъпих сравнително елегантно решение, като вместо switch-ове реших да използвам масиви.

0
22/06/2015 20:39:41
Petar_Netev avatar Petar_Netev 1 Точки

Ето и моето решение:

Console.Write("Enter a whole number between 0 and 999: ");
            int number = Convert.ToInt32(Console.ReadLine());
            while (number < 0 || number > 999)
            {
                Console.WriteLine("Invalid input: ");
                number = Convert.ToInt32(Console.ReadLine());
            }

            if (number / 10 == 0)
            {
                switch (number)
                {
                    case 0:
                        Console.WriteLine("zero");
                        break;
                    case 1:
                        Console.WriteLine("one");
                        break;
                    case 2:
                        Console.WriteLine("two");
                        break;
                    case 3:
                        Console.WriteLine("three");
                        break;
                    case 4:
                        Console.WriteLine("four");
                        break;
                    case 5:
                        Console.WriteLine("five");
                        break;
                    case 6:
                        Console.WriteLine("six");
                        break;
                    case 7:
                        Console.WriteLine("seven");
                        break;
                    case 8:
                        Console.WriteLine("eight");
                        break;
                    case 9:
                        Console.WriteLine("nine");
                        break;
                    default:
                        Console.WriteLine("Shouldn't be activated.");
                        break;
                }
            }
            else if (number / 10 > 0 && number / 10 <= 9)
            {
                if (number / 10 == 1)
                {
                    switch (number % 10)
                    {
                        case 0:
                            Console.WriteLine("ten");
                            break;
                        case 1:
                            Console.WriteLine("eleven");
                            break;
                        case 2:
                            Console.WriteLine("twelve");
                            break;
                        case 3:
                            Console.WriteLine("thirteen");
                            break;
                        case 4:
                            Console.WriteLine("fourteen");
                            break;
                        case 5:
                            Console.WriteLine("fifthteen");
                            break;
                        case 6:
                            Console.WriteLine("sixtenn");
                            break;
                        case 7:
                            Console.WriteLine("seventeen");
                            break;
                        case 8:
                            Console.WriteLine("eightteen");
                            break;
                        case 9:
                            Console.WriteLine("nineteen");
                            break;

                    }
                }
                else
                {
                    string[] dec = { "twenty", "thirty", "fourty", "fifthy", "sixty", "seventy", "eighty", "ninthy" };
                    string[] rem = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

                    int deca = number / 10;
                    int rema = number % 10;

                    Console.WriteLine(dec[deca - 2] + rem[rema - 1]);
                }
            }
            else if (number / 10 > 9 && number / 10 <= 99)
            {
                int hun = number/100;

                int decs = (number / 10) % 10;
                int last = (number % 10) % 10;

 


                string[] huns = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
                string[] decas = {"ten","twenty", "thirty", "fourty", "fifthy", "sixty", "seventy", "eighty", "ninthy"};

                

                if (decs == 0 & last == 0)
                {
                    Console.WriteLine(huns[hun - 1] + "hundred");
                }
                else if (last == 0 & decs > 0)
                {
                    Console.WriteLine(hun);
                    Console.WriteLine(decs);
                    Console.WriteLine(last);
                    Console.WriteLine(huns[hun - 1] + " hundred and " + decas[decs - 1]);
                }
                else if (decs == 0 && last > 0)
                {
                    Console.WriteLine(huns[hun - 1] + " hundred and " + huns[last - 1]);
                }
                else if (decs == 1)
                {
                    switch (last)
                    {
                        case 0:
                            Console.WriteLine(huns[hun - 1] + " hundred and ten");
                            break;
                        case 1:
                            Console.WriteLine(huns[hun - 1] + " hundred and eleven");
                            break;
                        case 2:
                            Console.WriteLine(huns[hun - 1] + " hundred and twelve");
                            break;
                        case 3:
                            Console.WriteLine(huns[hun - 1] + " hundred and thirteen");
                            break;
                        case 4:
                            Console.WriteLine(huns[hun - 1] + " hundred and fourteen");
                            break;
                        case 5:
                            Console.WriteLine(huns[hun - 1] + " hundred and fifthteen");
                            break;
                        case 6:
                            Console.WriteLine(huns[hun - 1] + " hundred and sixteen");
                            break;
                        case 7:
                            Console.WriteLine(huns[hun - 1] + " hundred and seventen");
                            break;
                        case 8:
                            Console.WriteLine(huns[hun - 1] + " hundred and eightteen");
                            break;
                        case 9:
                            Console.WriteLine(huns[hun - 1] + " hundred and nineteen");
                            break;
                    }
                }
                else
                {

                    Console.WriteLine(decas[decs - 1]);
                    Console.WriteLine(huns[last - 1]);
                    Console.WriteLine(huns[hun - 1] + " hundred and " + decas[decs - 1] + huns[last - 1]);
                }
            }

0
miroLLL avatar miroLLL 95 Точки

Божичко, използвай Code snippet-а или друг инструмент. Повече от 15 реда написан код в рамките на 1 пост, се считат за повече от нормалното, а ти буквално си изкъртил поста.. :D

0
01/10/2015 15:31:10
miroLLL avatar miroLLL 95 Точки

Здравейте,

възникна ми една въпросителна в главата, на която не мога да намеря отговор. Като цяло, доста си играх за да реша задачата, но нарая успях. Грозно или не, качествено или напротив програмата работи коректно (ако някой при неволен опит да я пробва открие обратното нека да сподели). След като я написах и пробвах забеязах странно поведение. То се забелязва, само когато се въведе трицифрено число, без нула в съдържанието му.

Ето кода - NumberAsWords - Решение.

Забелязвате ли, че при въвеждане на числo различно от (трицифрено число без 0 в него) се показва съобщението "Press any key to continue. . . ." И след натискане на което и да е копче, програмата се затваря.

- Снимка

А когато въведете трицифреното число (без съдържание на 0 в него), съобщението - "Press any key to continue. . . ." липсва, и колкото и каквито копчета да се натиснат, програмата не се затваря и курсорът мига...?

- Снимка

Да не би, самият код да влияе? Защото точно в тази ситуация се събраха 3,4 If-a и още толкова for-цикъла? Размера на програмката е около - 9.14 KB. Да не би да се получава, някакъв вид препълване? Прегледах програмата, за Console.ReadLine-и и не открих, но и при тях след 2 key-а програмата се затваря. Моето обяснение е може би, че числото претърпява доста операции накуп и след като изплюе крайния резултат замръзва... Не знам нямам представа, ситуацията се случва само при въвеждане на трицифрено число, при което втората и третата цифра са различни от 0, вие сами ще видите. Явно проблема е именно в този If, но не знам къде и защо се случва.

Досега не ми се беше случвало подобно нещо и именно за това реших да попитам.

Благодаря!

- Миро.

0
01/10/2015 16:05:24
valiobar avatar valiobar 29 Точки

Ето и моят вариант .http://pastebin.com/CTMQyYD6

Мисля че е сравнително простичка идеята но съм ползвал масиви.

0
miroLLL avatar miroLLL 95 Точки

А някаква идея, какво се случва с моята програма?

0
Blagoy_Blagoev avatar Blagoy_Blagoev 3 Точки

 

На 181 и 187ми ред имаш грешки в цикълите и се получават безкрайни цикли

181

for (int numberValue2 = iBasicNumbers[1]; numberValue <= iBasicNumbers[9]; numberValue2++)

 

for (int numberValue3 = iBasicNumbers[1]; numberValue2 <= iBasicNumbers[9]; numberValue3++)

 

Проверката трябва да е

За 181ви ред           numberValue2 <= iBasicNumbers[9];
За 187ми ред           numberValue3 <= iBasicNumbers[9];

Вместо

За 181ви ред       numberValue <= iBasicNumbers[9];

За 187ми ред       numberValue2 <= iBasicNumbers[9];

1
01/10/2015 22:47:18
miroLLL avatar miroLLL 95 Точки

Прав си, благодаря ти!

Получило се е така, защото писах кода до едно време и след това на места съм копирал и явно не съм сменил името на променливите... Оправих го  и вече работи, но забелязах друг проблем.

Когато въведа трицифрено число, при което десетицата е 1, програмата влиза в правилния if, върти цикъла, принтира очаквания резултат и продължава да върти докато не стигне крайната стойност на масива. След това излиза от цикъла и влиза в този преди него, върти и него докато не стигне максималната стойност и след това отива в съвсем друг If.  И накрая плюе и Console.WriteLine-а на "catch-a"...

Проседих процеса, чрез дебъгера и не мога да си го обясня. Гледах за грешно именовани променливи и не мога да открия грешка, някакви идеи?

Ето го и кода

 

0
01/10/2015 23:56:21
GeorgiSotirov avatar GeorgiSotirov 16 Точки

Let me join the fun :) 

Видях доста интересни решения. 

Явно задачката ви е била толкова интересна колкото и на мен :) 

Аз реших да си поиграя с масиви и да я разделя на методи, щото е по-чистичко. 

Ето моето творение:

http://pastebin.com/FqcSjEvc

Ако имате забележки... Запазете си ги за вас :D (шегувам се всякаква градивна критика е добре дошла) 

Cheers :) 

0
PavelManahilov avatar PavelManahilov 216 Точки

Здравей , когато въведеш двуцифрено или трицифрено число с единици 0 , примерно 50 ти изкарва за отговор Fifty zero , това zero не трябва да го има

0
GeorgiSotirov avatar GeorgiSotirov 16 Точки

Леле вярно как съм се объркал, оправих го, но съм го събмитнал така :( 

Нищо де здраве да е :)

Благодаря за забележката :)

Cheers.

0
fbinnzhivko avatar fbinnzhivko 1586 Точки

100/100 https://judge.softuni.bg/Contests/Practice/Index/152#15

http://pastebin.com/hLqhjWwh

 

using System;
class Program
{
    static void Main()
    {
        var number = int.Parse(Console.ReadLine());

        if (number >= 0 && number <= 19)
        {
            if (number == 0) { Console.WriteLine("zero"); }
            else if (number == 1) { Console.WriteLine("one"); }
            else if (number == 2) { Console.WriteLine("two"); }
            else if (number == 3) { Console.WriteLine("three"); }
            else if (number == 4) { Console.WriteLine("four"); }
            else if (number == 5) { Console.WriteLine("five"); }
            else if (number == 6) { Console.WriteLine("six"); }
            else if (number == 7) { Console.WriteLine("seven"); }
            else if (number == 8) { Console.WriteLine("eight"); }
            else if (number == 9) { Console.WriteLine("nine"); }
            else if (number == 10) { Console.WriteLine("ten"); }
            else if (number == 11) { Console.WriteLine("eleven"); }
            else if (number == 12) { Console.WriteLine("twelve"); }
            else if (number == 13) { Console.WriteLine("thirteen"); }
            else if (number == 14) { Console.WriteLine("fourteen"); }
            else if (number == 15) { Console.WriteLine("fifteen"); }
            else if (number == 16) { Console.WriteLine("sixteen"); }
            else if (number == 17) { Console.WriteLine("seventeen"); }
            else if (number == 18) { Console.WriteLine("eightteen"); }
            else if (number == 19) { Console.WriteLine("nineteen"); }
        }
        else if (number >= 20 && number <= 99)
        {
            string[] zeroNine = new string[10] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
            string[] lastZero = new string[10] { "zero", "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };

            if (number % 10 == 0) { Console.WriteLine(lastZero[number / 10]); }
            else { Console.WriteLine(lastZero[number / 10] + " " + zeroNine[number % 10]);}

        }
        else if (number == 100) { Console.WriteLine("one hundred"); }
        else { Console.WriteLine("invalid number");}
    }
}

0
05/03/2016 21:00:50
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.