Loading...
Kuncavia avatar Kuncavia 1 Точки

Затруднение с задач "Number 0...9 to Text"

Здравейте,

Имам затруднение със задача "Number 0...9 to Text". Разгледах няколко варянта от подобни задачи и стигнах до следния код:

using System;

class NumberToText
{
    static void Main(string[] args)
    {
        string num = 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("number too big");
    }
}


Проблема е ясен "Operator '>' cannot be applied to operands of type 'string' and 'string'" (в края на кода). 

Въпроса е какво да променя? Пробвах и по-сложни кодове, но там още повече се овъртях. 

Поздрави,

 

Тагове:
1
Programming Basics
borislav9212 avatar borislav9212 745 Точки
Best Answer

Здравей,

В Задачата се изисква да се отпечатът числа, а ти си използвала string - за текст. Замени

string num = Console.ReadLine();-> int num = int.Parse(Console.ReadLine());

проверката на числата са до 9, талка че тази проверка за числото 10 е излишна. Ето фикс на кода ти -> http://pastebin.com/LUygR2T4

Ето едно решение и със switch - case -> http://pastebin.com/yJzQX9tj

 

0
Kuncavia avatar Kuncavia 1 Точки

Това бе най-удобния вариант за преправяне на кога, не зма защо се бях замотал с string. Сега ще пробвам и другите идеи за решения, малко практика определено няма да ми е излишна. Благодаря за бързите отговори :)

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки
string num = Console.ReadLine();

го смени с var num = int.Parse(Console.ReadLine());

и после проверявай за числа, а не за стрингове.

0
Pilgrimage avatar Pilgrimage 515 Точки

Най-просто е (макар и не дотам издържано) да се довериш на добронамереността на входните данни и да напишеш просто:

else  

Console.WriteLine("number too big");

0
YaneZ avatar YaneZ 33 Точки

Здравей! Решението на този проблем е много просто. Смени входните данни вместо string на int. И след това просто махни кавичките в условията на if и else if.
http://pastebin.com/BEdWLHgB - Решението ти поправено от мен.
Успех! Дано съм помогнал!

0
alienghost avatar alienghost 22 Точки
ето и моето решение 


http://pastebin.com/gg0QMrq6






0
14/09/2016 15:04:04
b.yordanov avatar b.yordanov 146 Точки

направи нещо от сорта (не съм го тествал)

IDictionary<int, string> numbers = new Dictionary<int, string>();

numbers[0] = "zero";

numbers[1] = "one";

и т.н. до колкото искаш...

 

и после с if проверяваш дали даденото число го има като ключ в numbers

ако го има, го отпечатваш. И така ще имаш само един/два Console.WriteLine() вместо досегашните 12

0
mirchev1977 avatar mirchev1977 6 Точки

Кодът ти е следният:

if (num == "0")
            Console.WriteLine("zero");
        else if (num == "1")
            Console.WriteLine("one");
        else if (num == "2")
...

 

казвайки: 

ако входът от конзолата е "0", направи това и това. Иначе, ако е е "1" - направи това и това.

Да, така е. Входът от конзолата, в случая "n" e string. По този начин ако входът ти е "1", то ти можеш да напишеш: 

if(num == "1){
 Console.WriteLine("one");
}

и т.н.

Обаче, не можеш да използваш операторите > или <, защото когато имаш стринг можеш да сравниш само дали "1" == "1", т.е за еднаквост, но не и за по-голямо - по-малко.

 

За да можеш да сравняваш с операторите > или <, трябва да парснеш входа към int и след това да сравняваш с integers

int num = int.Parse(Console.ReadLine());

if(num == 1){
  Console.WriteLine("One");
}

и т.н.

 

0
Leprikona avatar Leprikona 108 Точки

Най-лесният, според мен, начин е да направиш един string масив, в който да съхраняваш всички числа като думи.

След това да завъртиш един цикъл от първото число до последното (в случая от 0 до 9) и да кажеш на програмата да ти отпечата името на това число от масива, който си създал.

Или смени string num с int num и махни кавичките от if-else-a и ще сработи.

0
18/09/2016 13:57:23
AndreyBozhkov avatar AndreyBozhkov 1 Точки

Здравейте,

Съгласен, най-добре чрез масив(и).

Решение чрез масиви: https://gist.github.com/andreybozhkov/ebaa26d7e8e4b261c1b3e32cd199269b (Забележка: сбърках името в проекта - трябва да е 0 to 9, а не 0 to 10.)

Само масивите и популация на масива с числа за мързеливите:

string[] numbersinwords = new string[] {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int[] numbers = new int[10];
for (int i = 0; i <= 9; i++)
{
    numbers[i] = i;
}

 

1
19/09/2016 00:10:02
Leprikona avatar Leprikona 108 Точки

Най-важното в програмирането е да напишеш кода по възможно най-краткия начин, за да проследяваш по-бързо какво се случва в програмата.

Едно е да четеш 1 000 реда код, друго е тия 1000 редове да са 100 примерно. :)

0
19/09/2016 21:09:17
Leprikona avatar Leprikona 108 Точки

Ето така трябва да изглежда горното обяснение:

string[] numbersinwords = new string[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

        for (int i = 0; i <= 9; i++)
        {
            Console.WriteLine(numbersinwords[i]);
        }

това второто bold-нато се чете примерно така: "изпиши ми стойността на string[] numbersinwords на позиция i от for цикъла".

0
19/09/2016 21:26:23
Kristianchooy avatar Kristianchooy 59 Точки
 else if (num >= "11")
            Console.WriteLine("number too big");

го правиш на :

 else 
            Console.WriteLine("number too big");

 

0
Kristianchooy avatar Kristianchooy 59 Точки

ето ти фикс  http://pastebin.com/kaK6Du0k :) 

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