Малък проблем :) със задача "Изписване на число до 100 с думи" от Курса Programming Bassics, лекция Логически проверки
Здравейте, ще съм благодарен за някакви идеи как да си довърша задачата. Това ми е кода: http://pastebin.com/ebnMpKR5
Здравейте, ще съм благодарен за някакви идеи как да си довърша задачата. Това ми е кода: http://pastebin.com/ebnMpKR5
Mоже ли да дадеш цялото условие и линк към задачата в jude?
Това е моят код: http://pastebin.com/qC2D3s3B
Доста е дълъг, но аз (като начинаещ) се справих лесно по този начин и смятам, че не е труден за разчитане.
Първо си прочитам входа от конзолата (цяло число intNumber) и го превръщам в string number, за да мога да прочета дължината му в последствие. Създавам си също и string numberText, който ще съдържа крайния резултат (! Важно е да му се определи стойност, зашото иначе дава грешка по-надолу).
Използвам if statement, за да проверя дали числото ми е "валидно", т.е. между 0 и 100, както и опция за изписване на "one hundred", ако числото е 100.
Ако числото ми е "валидно" и не е 100, продължавам нататък като прочитам дължината му (1 или 2 цифри), за да мога да разработя поотделно десетици и единици и да ги обединя в отговора. Не съм сигурен колко оптимално съм използвал switch-ове и if statements, но оставям кода така за момента. Ако числото ми е 2-цифрено, разглеждам първата цифра number[0] (character на място 0 в string number). Ако е 1-ца, още тук прочитам и втората цифра, защото вариантите са особени (eleven, а не ten one) и записвам резултата в string numberText. Ако цифрата на десетиците не е 1-ца, продължавам надолу по switcha и добавям към numberText думата за десетици, която ми е нужна.
Следва if statement, който проверява дали цифрата на десетиците е 1-ца отново, за да не добавям към резултата излишен текст ("eleven one", "twelve two", etc.). Ако не е, със switcha под него се прочита цифрата на единиците number[1] (character на място 1 в string number) и добавям към резултата numberText дума за единиците с разстояние пред нея (" one", " two", etc.).
Това извежда резултат при двуцифрени числа. Отдолу имам else, който се включва, ако числото НЕ е двуцифрено и в него, със switch, съм си извел възможните 10 резултата - от 0 до 9.
Завършвам с извеждане на резултата в конзолата - Console.WriteLine(numberText);
Когато решавах задачата, това ми се стори най-добрият начин да я "автоматизирам". Надявам се да ти помогне поне малко. Ако не ми се разбира нищо, мога евентуално да кача кода с обясненията написани в него.
Edit: viktorlazarov ме подсеща, че може да се направи подобно нещо с деление на 10, вместо четенето на string, което не е включено в курса, но на мен, лично, ми е по-лесно да го направя по този начин.
понякога не е важно как е решено, а резултата. Успял си да решиш задачата значи вс. ОК, после ако не ти хареса може да го оптимизираш и т.н. . Виждам че кода ти е 160 реда, можеше да направиш switch и за всяко число Console.WriteLinе, така кода ще е 40-50 реда по малко :)
Моите суичове са форматирани с кейсове от по 3 реда, така че кодът ми реално е по-кратък от 100 реда Console.WriteLine(). Като цяло идеята ми беше да го направя автоматично и лесно за разширяване. Предполагам, че ще се върна към задачата и може би ще си направя отделни методи (за единици, десетици, стотици, etc.) и ще мога да я разширявам до безкрайност с лекота.
Опитвам се да търся не просто решение на задачата, а практичен, код, който има приложение извън рамките ѝ. Кодът ми не е идеален, но нямах възможност да го пренапиша/редактирам и реших да го използвам като пример, за да обясня процеса си на мислене/работа.
Благодаря много за изчерпателния отговор! Поздрави!
ето решение от мен : ЛИНК
Благодаря за решението! Ще се помъча още и сам да измисля вариант за решение. Поздрави!
Ето и едно решение и от мен - http://pastebin.com/1sZAcR3P
Благодаря за решението, но ще се мъча още сам да я реша. Въпроса ми беше за нчкакви насоки към моето решение. Поздрави!
Преводачески задачи не се решават с иф елс или суич кейс. Решават се с речници, хеш таблици или обикновени масиви, както е в случая, понеже ключове са естествените числа от нула до девет.
Правят се три масива с по 10 елемента от тип стринг. Думата нула, стои на индекс нула, думата 1 на индекс едно и така нататък до 9. Още един масив с думите от 10 до 19 и още един от 20 до 90, всъщност пак от нула до девет, само че се получават в контекст за десетици.
Ако числото е по малко от десет, отговора се извлича директно от масива за единиците. Ако е от 10 до 19, отговора се получава като се извлече директно думата от съответния масив. От 20 до 100 се извличат от двата масива, за единици и за десетици и се долепват думите с един интервал между тях.
Ако са изключени невалидните числа, числото 100 може да се напише на индекс на десетиците - нула. А може и като специален случай.
Благодаря за информацията, но в курса Programming Bassics не се учат все още масиви. Поздрави!
Не си разгледал случаите когато числата са между 10 и 20, 20 и 30 и т.н. Например, ако в конзолата се напише 55 няма да излезе нищо.
Това е проблема, че не мога да измисля как да ги разгледам.
Ще ти стане много дълъг кода. Не можах да се сетя за за някакъв по-елегантен начин, защото съм начинаещ програмист, но ще получиш 100 точки. Можеш да използваш if else или switch. Ето едно решение:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication51
{
class Program
{
static void Main(string[] args)
{
var num = int.Parse(Console.ReadLine());
if (num == 0)
{
Console.WriteLine("zero");
}
else if (num == 1)
{
Console.WriteLine("one");
}
else if (num == 2)
{
Console.WriteLine("two");
}
else if (num == 3)
{
Console.WriteLine("three");
}
else if (num == 4)
{
Console.WriteLine("four");
}
else if (num == 5)
{
Console.WriteLine("five");
}
else if (num == 6)
{
Console.WriteLine("six");
}
else if (num == 7)
{
Console.WriteLine("seven");
}
else if (num == 8)
{
Console.WriteLine("eight");
}
else if (num == 9)
{
Console.WriteLine("nine");
}
else if (num==10)
{
Console.WriteLine("ten");
}
else if (num == 11)
{
Console.WriteLine("eleven");
}
else if (num == 12)
{
Console.WriteLine("twelve");
}
else if (num == 13)
{
Console.WriteLine("thirteen");
}
else if (num == 14)
{
Console.WriteLine("fourteen");
}
else if (num == 15)
{
Console.WriteLine("fifteen");
}
else if (num == 16)
{
Console.WriteLine("sixteen");
}
else if (num == 17)
{
Console.WriteLine("seventeen");
}
else if (num == 18)
{
Console.WriteLine("eighteen");
}
else if (num == 19)
{
Console.WriteLine("nineteen");
}
else if (num==20)
{
Console.WriteLine("twenty");
}
else if (num == 21)
{
Console.WriteLine("twenty one");
}
else if (num == 22)
{
Console.WriteLine("twenty two");
}
else if (num == 23)
{
Console.WriteLine("twenty three");
}
else if (num == 24)
{
Console.WriteLine("twenty four");
}
else if (num == 25)
{
Console.WriteLine("twenty five");
}
else if (num == 26)
{
Console.WriteLine("twenty six");
}
else if (num == 27)
{
Console.WriteLine("twenty seven");
}
else if (num == 28)
{
Console.WriteLine("twenty eight");
}
else if (num == 29)
{
Console.WriteLine("twenty nine");
}
else if (num == 30)
{
Console.WriteLine("thirty");
}
else if (num == 31)
{
Console.WriteLine("thirty one");
}
else if (num == 32)
{
Console.WriteLine("thirty two");
}
else if (num == 33)
{
Console.WriteLine("thirty three");
}
else if (num == 34)
{
Console.WriteLine("thirty four");
}
else if (num == 35)
{
Console.WriteLine("thirty five");
}
else if (num == 36)
{
Console.WriteLine("thirty six");
}
else if (num == 37)
{
Console.WriteLine("thirty seven");
}
else if (num == 38)
{
Console.WriteLine("thirty eight");
}
else if (num == 39)
{
Console.WriteLine("thirty nine");
}
else if (num == 40)
{
Console.WriteLine("fourty");
}
else if (num == 41)
{
Console.WriteLine("fourty one");
}
else if (num == 42)
{
Console.WriteLine("fourty two");
}
else if (num == 43)
{
Console.WriteLine("fourty three");
}
else if (num == 44)
{
Console.WriteLine("fourty four");
}
else if (num == 45)
{
Console.WriteLine("fourty five");
}
else if (num == 46)
{
Console.WriteLine("fourty six");
}
else if (num == 47)
{
Console.WriteLine("fourty seven");
}
else if (num == 48)
{
Console.WriteLine("fourty eight");
}
else if (num == 49)
{
Console.WriteLine("fourty nine");
}
else if (num == 50)
{
Console.WriteLine("fifty");
}
else if (num == 51)
{
Console.WriteLine("fifty one");
}
else if (num == 52)
{
Console.WriteLine("fifty two");
}
else if (num == 53)
Console.WriteLine("fifty three");
}
else if (num == 54)
{
Console.WriteLine("fifty four");
}
else if (num == 55)
{
Console.WriteLine("fifty five");
}
else if (num == 56)
{
Console.WriteLine("fifty six");
}
else if (num == 57)
{
Console.WriteLine("fifty seven");
}
else if (num == 58)
{
Console.WriteLine("fifty eight");
}
else if (num == 59)
{
Console.WriteLine("fifty nine");
}
else if (num == 60)
{
Console.WriteLine("sixty");
}
else if (num == 61)
{
Console.WriteLine("sixty one");
}
else if (num == 62)
{
Console.WriteLine("sixty two");
}
else if (num == 63)
{
Console.WriteLine("sixty three");
}
else if (num == 64)
{
Console.WriteLine("sixty four");
}
else if (num == 65)
{
Console.WriteLine("sixty five");
}
else if (num == 66)
{
Console.WriteLine("sixty six");
}
else if (num == 67)
{
Console.WriteLine("sixty seven");
}
else if (num == 68)
{
Console.WriteLine("sixty eight");
}
else if (num == 69)
{
Console.WriteLine("sixty nine");
}
else if (num == 70)
{
Console.WriteLine("seventy");
}
else if (num == 71)
{
Console.WriteLine("seventy one");
}
else if (num == 72)
{
Console.WriteLine("seventy two");
}
else if (num == 73)
{
Console.WriteLine("seventy three");
}
else if (num == 74)
{
Console.WriteLine("seventy four");
}
else if (num == 75)
{
Console.WriteLine("seventy five");
}
else if (num == 76)
{
Console.WriteLine("seventy six");
}
else if (num == 77)
{
Console.WriteLine("seventy seven");
}
else if (num == 78)
{
Console.WriteLine("seventy eight");
}
else if (num == 79)
{
Console.WriteLine("seventy nine");
}
else if (num == 80)
{
Console.WriteLine("eighty");
}
else if (num == 81)
{
Console.WriteLine("eighty one");
}
else if (num == 82)
{
Console.WriteLine("eighty two");
}
else if (num == 83)
{
Console.WriteLine("eighty three");
}
else if (num == 84)
{
Console.WriteLine("eighty four");
}
else if (num == 85)
{
Console.WriteLine("eighty five");
}
else if (num == 86)
{
Console.WriteLine("eighty six");
}
else if (num == 87)
{
Console.WriteLine("eighty seven");
}
else if (num == 88)
{
Console.WriteLine("eighty eight");
}
else if (num == 89)
{
Console.WriteLine("eighty nine");
}
else if (num == 90)
{
Console.WriteLine("ninety");
}
else if (num == 91)
{
Console.WriteLine("ninety one");
}
else if (num == 92)
{
Console.WriteLine("ninety two");
}
else if (num == 93)
{
Console.WriteLine("ninety three");
}
else if (num == 94)
{
Console.WriteLine("ninety four");
}
else if (num == 95)
{
Console.WriteLine("ninety five");
}
else if (num == 96)
{
Console.WriteLine("ninety six");
}
else if (num == 97)
{
Console.WriteLine("ninety seven");
}
else if (num == 98)
{
Console.WriteLine("ninety eight");
}
else if (num == 99)
{
Console.WriteLine("ninety nine");
}
else if (num == 100)
{
Console.WriteLine("one hundred");
}
else
{
Console.WriteLine("invalid number");
}
}
}
}
{
Този код е мазохизъм :)
Така е, обаче дава 100 точки.
това е код легенда .... :)
https://softuni.bg/trainings/resources/officedocument/11645/exercise-csharp-programming-basics-december-2016
Това е линка към условието на задачата, последната задача от упражнението.
https://judge.softuni.bg/Contests/Practice/Index/152#15
А това е линка към judge.
Благодаря за вниманието!
Трябва да напишеш и един if ,в който ако числото е 32 примерно, да изпише thirty + two , тоест thirty two.
Трябва да вземеш колко са десетиците и колко единиците.Можеш да го направвиш като създадеш две променливи,в които да държиш остатъка от деление на 10 и деление без остатък също на 10.Ако остатъка с деление на 10 е 3 ,пишеш "three".Aко делението без остатък е равно на 5 ,пишеш "fifty" и след това ги съединяваш в конзолата.