Loading...
rolendimion avatar rolendimion 33 Точки

[Homework] Programming Basics - Conditional Statements - Problem {8} - Digit as Word

Не мога да разбера какъв тип променлива да въведа за да  може switch/case да ми я приеме и в същото време да не ми дава грешки при дроби и текст?

Ето опита ми за решение:

http://pastebin.com/uLwT6pe7

 

Тагове:
0
Programming Basics 02/04/2015 13:00:23
dim.dim avatar dim.dim 1 Точки

е да ето и моя код с tryparse и всичко работи НО

както и вие така и аз съм дал променлива от тип целочислени и като въведа -0,1 мии изписва зиру:), странно че не гърми-може би защото не го приема за число, но не изписва и нот  а дигит

като се опитам с флотинг променлива "switch(digit)" не ми приема digit

как да станеза да приеме числото -0,1 не за 0:)

 

Mod Edit: Нарушена т. 12 от правилата на форума!

 

 да може и без инт всичко да е стринг и с кавички по кейсовете, но ми стана странно по този начин защо не може с дробни

1
02/04/2015 12:58:14
crazy7 avatar crazy7 177 Точки

При TryParse, когато не успея да парсне чилсото към int връща default value, а именно 0.

Може да си решиш проблема с една проверка например:

if(digit.ToString() != value){
    Console.WriteLine("Not a Digit");
}
else{

    stwitch...

}

Може проверката да е по доста различни начини сещам се още и за:

if(value.Length != 1)

EDIT: Също така TryParse връща и стойност дали е успял да парсне и можеш да проверяваш нея, което може би е най-правилния начин, нещо такова:

bool hasConverted = int.TryParse(value, out digit);

if(hasConverted )

3
01/04/2015 23:09:13
DHristoskov avatar DHristoskov 211 Точки

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

string [] toNinе = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}

правиш проверка дали числото е между 0 и 9 и ако е, печаташ toNine[num],където num е въведеното число.

и по този начин може да направиш редицата не до 9 а до 19 на пример

string [] toNineteen = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen","seventeen", "eighteen", "nineteen" };
              

2
01/04/2015 22:50:39
crazy7 avatar crazy7 177 Точки

По този начин няма да си реши проблема с 0.1 защото при парсване към инт пак ще стани 0 и ще му изведе нулевия елемнт от масива, а и отговаря на условието между 0 и 9.

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Ето и вариант да се превръща в думи многоцифрено число.

В превръщането на 0.1 в думи има два проблема:

първият е, че алгоритъма на dim.dim е за цифри (digits), и не може да работи с многоцифрени числа, а 0.1 е многоцифрено число, има повече от една цифра.

Но и задачата е Digit аs Word, едва ли се очаква инпут от дробни числа.

Вторият проблем е именуването и на десетичния знак.

Всъщност идеята на dim.dim да се приемат като инпут и floating point numbers между 0 и 9 е страшно интересна.

Може и самият алгоритъм на dim.dim да се продължи, за да приема и floating point numbers между 0 и 9, и с една цифра след десетичния знак:

    // logic        
        // rounding number to 1 digit after the decimal point
        // so that we can work with digits only on both sides of the decimal point
        number = Math.Round(number, 1, MidpointRounding.AwayFromZero);

        // now we are positive that we have exactly 3 symbols:
        // one digit before the decimal point, one decimal point, one digit after the decimal point
        string temp = input.ToString(); // converting back to string, so that we can name the decimal point as well

        Console.WriteLine();

        // applying the DigitName() method to the first digit (index 0 in the string)
        DigitName(temp[0] - '0'); // char - '0' converts the respective char to int (digit)
        Console.Write("point "); // naming the decimal point
        DigitName(temp[2] - '0');

code: http://pastebin.com/Xp27HULf

output:

This program asks for a number (0-9),
including 2.8 (rounded to one digit after the decimal point)
and depending on the input, shows the digits as a words.

Please, enter a number (0-9): 2.123456789

two point one

Press any key to continue . . .

 

3
02/04/2015 10:15:48
iliyanlishkov avatar iliyanlishkov 0 Точки

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

            int a;
            bool check = int.TryParse(Console.ReadLine(), out a);
            if ((check == true) && (a >= 0 && a <= 9))
            {
                switch (a)
                {
                    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;
                }
            }
            else
            {
                Console.WriteLine("not a digit");
            }

0
25/09/2015 16:56:26
DHristoskov avatar DHristoskov 211 Точки

Да няма да му реши проблема, аз разсъждавам ако въведеното число е integer а не string.Но всъщност в конкретната задача спокойно входа може да бъде integer.Защо трябва да е string?

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