Loading...
danila.vanila.3 avatar danila.vanila.3 9 Точки

[Homework] C# Basics - Operators Expressions and Statements - {1} - Odd or Even Integers

Здравейте, рещих задачата и на пръв поглед работи правилно, но забелязах, че като въведа което и да било което е било число от 10 нагоре включително ми изписва "odd" независимо дали е четно или нечетно..Ето моят код и ще се радвам ако някой ми обясни откъде идва грешката. :)

using System;

        class OddOrEven
            {
                static void Main()
                {
                    int number;
                    number=Console.Read(); 

                     if ((number % 2) == 0)
                         {
                             Console.WriteLine("This number is even.");
                          }
                     else

                          {
                             Console.WriteLine("This number is odd.");

                           }
                  }
              }

1
Programming Basics 02/02/2015 19:19:48
TonislavAtanasov avatar TonislavAtanasov 86 Точки
Best Answer

Това е заради Console.Read()

С него четеш само първия символ и така всяко число по-голямо от 10 програмата прочита само единицата и всичко останало забравя, че съществува. Затова и винаги казва, че е нечетно. Използвай Console.ReadLine за да прочетеш цялото число и го преобразувай от string в int (или друг целочислен тип по твое желание). Прочети за метода Int.Parse().

Успех :)

0
12/02/2015 04:18:33
taylorswift avatar taylorswift 54 Точки

С Read четеш само един символ от конзолата, трябва да ползваш ReadLine и да го кастнеш към int, number=int.Parse(Console.ReadLine()) работи правилно.

7
02/02/2015 18:22:11
Demarkas avatar Demarkas 2 Точки

Ето моят вариант на решението, като за първа задача изглежда доста сложно http://pastebin.com/Lgrz8JnQ  , но имам включена проверка за нулата, която не нито четна, нито нечетна... cool

0
enevlogiev avatar enevlogiev 1168 Точки

Parity of zero - from wikipedia. Може да си подобриш задачата, като въведеш един Console.ReadLine в началото : ) Ако някой иска да провери число, различно от 0, 1, 2 или 3, твоят код няма да му помогне.

0
kasskata avatar kasskata 492 Точки

Мога да ви предложа 1 line bullSh*t. Не го правете на изпита! :D, но тернарния оператор може да ви спести 10 реда код.                   

Console.WriteLine(int.Parse(Console.ReadLine()) % 2 == 0 ? "Even" : "Odd");

Кафяво: четем числото, и веднага прехвърляме в INT.
Синьо: всичко преди "%" се запаметява като "променлива без име"(обаразно казано) и става като "number % 2 == 0". Това е нашето произведение, което е равно или True или False.
Червено: Ako e true напиши на конзолата "Even".
Зелено: Ако е False напиши на конзолата "Odd".

Лилаво/Розово: Печата това , което му връща като резултат тенания оператор (дефакто всичко в скобите).

0
12/02/2015 23:47:33
Filkolev avatar Filkolev 4482 Точки

И колеги, в ниво 2 в курса по КПК ще ви учим как да НЕ пишете такъв код :D

1
kasskata avatar kasskata 492 Точки

Хаха , да. Но, за изпита за нещо малко може и да спестите време в мислене, а може и да ви обърка още повече. 

Но Фил е прав. По принцип трябва да си е всичко в отделни променливи и да е нещо такова. 

int number = int.Parse(Console.ReadLine());
string result = number % 2 == 0 ? "Even" : "Odd";
Console.WriteLine(result);

Но винаги можете да се изтерикатите на един ред. :D

 

0
12/02/2015 23:45:33
anieze1 avatar anieze1 2 Точки

Здравейте,  има ли решение за "0"?

Бях решила задачата по друн начин и си работеше ОК, дато не въведох "0", за която се иска да е false.... и започнах да търся други варианти, но и във вашия премир мисля, че не изписва false.

Благодаря,

 

0
denislav.krumov avatar denislav.krumov 1 Точки

здравейте, аз имам проблем с зад. 7 пиша кода и всичко е ок докато не напиша дроб примерно 1.65

Ето го и кода:

using System;

class Program
{
static void Main()
{
double x = double.Parse(Console.ReadLine());
double y = double.Parse(Console.ReadLine());
bool n = (x >= -2) && (x <= 2) & (y >= -2) && (y <= 2);

Console.Write(n);

}
}

 Идея защо и къде бъркам ?

0
GogoK avatar GogoK 80 Точки

Ще се опитам да помогна, но в това не виждам логика.

Когато е "&&" трябва и 2-те да са true. Само "&" е за побитови операции. Аз не разбирам от къде идва това "x >= -2"

Опиши си логиката с : bool n = (x >= -2) && (x <= 2) & (y >= -2) && (y <= 2); че не разбирам, какво искаш да направиш.

 

Това е моето решение code

 

 пп. 

--- Math.Pow е за степенуване  -- Math.Sqrt е за корен квадр.  -----  

x1 ,y1 - са координатите на окръжността

x2 y2 - са на подадените точки.

Math.Sqrt(   (x1 - x2)^2   +    (y1 - y2)^2  ) = Vector

^2 е степен 

 

double vector = Math.Sqrt((Math.Pow(x1 - x2), 2)) + (Math.Pow(y1 - y2), 2)));

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

0
16/02/2015 20:44:13
tutzy.fts avatar tutzy.fts 2 Точки

Здравей, ако питаш за Problem 7. Point in a circle, имаш проблем не само с дробите.

Формулата която ти трябва е x2+y2=r, за по-лесно (x*x)+(y*y)=(r*r).

"r" в нашият случай е 2(така е по условие).

Вместо "bool n = (x >= -2) && (x <= 2) & (y >= -2) && (y <= 2);"

пробвай примерно "bool n = (x * x) + (y * y) <= (2 * 2);"

без да променяш нищо друго smile

 

 

0
16/02/2015 21:08:21
knoteva avatar knoteva 1081 Точки

Относно въвеждането на дробни числа с точка, а не със запетая: Отиваш в Control Panel; Region; Additional Settings; сменяш Decimal symbol от запетая на точка. 

Можеш да използваш формулата:  bool n = (x -0)* (x-0) + (y-0) * (y-0) <= 2 * 2 или с Math.Pow: bool n= (Math.Pow(x - 0, 2) + Math.Pow(y - 0, 2)) <= (Math.Pow(2, 2)); Написала съм и 0, защото центърът на кръга е с координати {0,0} (circle K({0, 0}, 2)).

По-добре да принтираш резултата с "Console.WriteLine".

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