Loading...
kirchev95 avatar kirchev95 12 Точки

[Homework] C# Basics - Conditional Statements - Problem {11*} - Number as Words

Ето какво успях да измисля днеска докато бях на лекцията. Задачата работи идеално, но е доста обемиста. Ако някой може да даде съвет, чрез който да съкратя малко кода ще съм му много благодарен smile

using System;
class NumberАsWords
{
static void Main()
{
int number = int.Parse(Console.ReadLine());
int firstDigit = number / 100; //extract first digit
int secondDigit = number / 10 % 10; //extract second digit
int thirdDigit = number % 100 % 10; //extract third digit
if (number == 0)
{ Console.WriteLine("zero"); }

if (number % 100 == 0)
{
switch (firstDigit)
{
case 1: Console.Write("One hundred "); break;
case 2: Console.Write("Two hundred "); break;
case 3: Console.Write("Three hundred "); break;
case 4: Console.Write("Four hundred "); break;
case 5: Console.Write("Five hundred "); break;
case 6: Console.Write("Six hundred "); break;
case 7: Console.Write("Seven hundred "); break;
case 8: Console.Write("Eight hundred "); break;
case 9: Console.Write("Nine hundred "); break;
}
}

else
{
switch (firstDigit)
{
case 1: Console.Write("One hundred and "); break;
case 2: Console.Write("Two hundred and "); break;
case 3: Console.Write("Three hundred and "); break;
case 4: Console.Write("Four hundred and "); break;
case 5: Console.Write("Five hundred and "); break;
case 6: Console.Write("Six hundred and "); break;
case 7: Console.Write("Seven hundred and "); break;
case 8: Console.Write("Eight hundred and "); break;
case 9: Console.Write("Nine hundred and "); break;
}

switch (secondDigit)
{
case 1:
{
switch (thirdDigit)
{
case 1: Console.Write("eleven "); break;
case 2: Console.Write("twelve "); break;
case 3: Console.Write("thirteen "); break;
case 4: Console.Write("fourteen "); break;
case 5: Console.Write("fifteen "); break;
case 6: Console.Write("sixteen "); break;
case 7: Console.Write("seventeen "); break;
case 8: Console.Write("eighteen "); break;
case 9: Console.Write("nineteen "); break;
default: Console.WriteLine("ten"); break;
}
} break;
case 2: Console.Write("twenty "); break;
case 3: Console.Write("thirty "); break;
case 4: Console.Write("forty "); break;
case 5: Console.Write("fifty "); break;
case 6: Console.Write("sixty "); break;
case 7: Console.Write("seventy "); break;
case 8: Console.Write("eighty "); break;
case 9: Console.Write("ninety "); break;
default: Console.WriteLine(); break;
}


switch (thirdDigit)
{
case 1: Console.Write("one "); break;
case 2: Console.Write("two "); break;
case 3: Console.Write("three "); break;
case 4: Console.Write("four "); break;
case 5: Console.Write("five "); break;
case 6: Console.Write("six "); break;
case 7: Console.Write("seven "); break;
case 8: Console.Write("eight "); break;
case 9: Console.Write("nine "); break;
}
}
}
}

Тагове:
5
Programming Basics 20/08/2014 14:17:50
Anonymous:
Има вече отворена тема за домашно Conditional Statements: https://softuni.bg/forum/questions/details/321
Постът нарушава т.12 от Правилата на форума.
HPetrov avatar HPetrov 822 Точки

За напред ти препоръчвам да си качваш кога в GitHub или Pastebin и да даваш само линк към него тук. Някои задачи не са големи и лесно се следят като се копират директно тук но някоя като тази даже не мога да е проследя ;) След малко ще ти тествам кода и ще ти дам някакъв feedback.

 

Edit: Така тествах ти кода и работи добре за повечето случай, но не адресира правилно специалните случаи от 11 до 19. Например при 111 вади "one hunder and eleven one", и така нататък до 19. От 1 до 9 пък когато са само едноцифрени числата айде може нали да си затворим очите за допълнителния празен ред, но когато е 101-109 последната цифра е вади на нов ред. Поиграй си малко повече с тези специални случай, общо взето задачата се върти предимно около тях. Успех! И другия път да не забравиш къде да си качиш кода :P

3
kirchev95 avatar kirchev95 12 Точки

Колега благодаря за отговора. Днеска ще си поиграя да доизчистя грешките, иначе и аз се опасявах от специалните случаи и явно опасенията са ми били правилни. А колкото за кода, за напред ще го качвам в GitHub smile

0
GoShow avatar GoShow 595 Точки

И аз бях започнал по същия начин със switch-case и се оказа,че не е необходимо.Аз обаче използвам масив.Ето моето решение, мисля че е по-кратко, но може и да не е.В обши линии е различно.Не съм правил много коментари, а май е необходимо, ако нещо не ти е ясно питай. решение

0
deliivanov avatar deliivanov 1 Точки

Понеже не сме взимали още масиви и предвид темата, в която е задачата, мисля, че начина на колегата kirchev95 е адекватен за момента. И аз съм го решил по този начин, но с някои допълнения, които елиминират неточностите в решението на колегата. Доста дългичко става и сигурно има и по-кратки начини, но важното е, че работи. laughing Решение!

1
topalovr avatar topalovr 16 Точки

Едно решение и от мен Цък

Признавам си доста ме затрудни, но си струваше :)

0
StanDimitroff avatar StanDimitroff 90 Точки

Това е което аз можах да измъдря, мисля че работи правилно, но е доста разпънато, уви за по-умен начин не се сетих :)

1
Ludmil.D avatar Ludmil.D 41 Точки

Решение 

Като допълнение, особеното на задачата е и кода се казва "and" при числата много е любопитнонапример 101 hundred and one ; 220 two hundredS twenty , като разбира се всеки сам може да си суложнява живота колкото иска, като това първата бъква да е с главна буква и т.н. и т.н. :)
keep calm and learn 2 <code> 

0
beBoss avatar beBoss 507 Точки

Е чак усложняване. В другата тема(главната за всичките задачи) бях дал решение, дето е на няколко реда и точно тези неща са ок, главни букви андовете и дрън дрън ;)

0
Nukem avatar Nukem 6 Точки

Аз я направих така, приемам идеи да я оптимизирам, че е доста обемиста найстина:

http://pastebin.com/raw.php?i=hLWB9DVc

0
ScreeM avatar ScreeM 19 Точки

Здравей,

 

Много добро решение на задачата. Само бих те поправил за някои неща:

int thirdDigit = number % 100 % 10; //extract third digit

Може да е без %100, същото е.. и

default: Console.WriteLine(); break;

По-добре ще изглежда, ако е :

default: Console.Write(""); break;

За да е на 1 ред изписано числото..

Успех! ++

 

0
kirchev95 avatar kirchev95 12 Точки

Ето я и крайната програма, без грешки и проблеми http://pastebin.com/XacDx0tz

Благодаря на всички, които ми помогнаха и ми дадоха съвети.

2
orlinov avatar orlinov 11 Точки

Ето още един вариант на решение :):

 

http://pastebin.com/WadGiEp4

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