Loading...

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

Ivan.Nikolov avatar Ivan.Nikolov 8 Точки

C# Basics - "SeveralOperators" issue with code

Здравейте колеги,

практикувам от скоро и сега се сблъсках с проблем в кода ми: https://gist.github.com/IvanNikolov/192e19637405a4fc6c38 и не съм сигурен как да не гърми?

Проблемът явно е, че не приема стойност (0) за / и %, но как да присвоя стойностите да са съответно стойността на второто подадено число? Опитах няколко варианта, но явно не и правилният :)

Ще съм Ви благодарен, ако помогнете.

 

 

Тагове:
1
Programming Basics
Kamigawa avatar Kamigawa 750 Точки

Ето как да ги вкараш числата в масива :

„for (int i = 0; i < 2; i++)
{
       Console.WriteLine("Enter number: ", i + 1);
       int number = int.Parse(Console.ReadLine());
       nums[i] = number;
}“

след това може да ги викаш с nums[0], nums[1] и т.н.

Ето го кода: http://pastebin.com/Xb7PZkcT

1
09/10/2014 14:52:01
Filkolev avatar Filkolev 4482 Точки

Нямаш всъщност нужда нито от масив, нито от цикъл. Вземи две променливи от конзолата и сметни каквото трябва. Цикъл и масив са необходими при доста повече числа, само за две е излишно да се ползват.

0
Ivan.Nikolov avatar Ivan.Nikolov 8 Точки

Да ясно, аз лесния го знам, но въпросът е, да се опитам да ползвам и науча нещо ново та поради тази причина :)

Благодаря

 

1
Filkolev avatar Filkolev 4482 Точки

В такъв случай ако не ти е много ясно защо цикълът ти не работеше, най-добре се вижда това през дебъгера. Редът nums[1] = nums[i+1] ще ти даде IndexOutOfRange exception, а самите сметки се правят извън цикъла, след като вече имаш двете числа в масива. Така както е направено след промените ще работи вече. Може да посъкратиш нещата като директно декларираш променливите при сметките, напр. int sumary = nums[0] + nums[1];

Nullable променливите не съм сигурен, че са нужни. Ако имаш непозволена операция, би трябвало да получиш exception, а не null, но трябва да се провери това.

Едит: проверих, така е. При деление на 0 се получава DivideByZeroException; ако целта ти с декларирането на nullable променливи е била да се застраховаш, те не ти помагат. Трябва да се правят проверки дали второто число не е 0 или пък да се хваща този exception. И в двата случая обикновени int-ове вършат работа за задачата.

1
09/10/2014 17:05:30
Ivan.Nikolov avatar Ivan.Nikolov 8 Точки

Благодаря ти за поясненията. Определено помага, когато някой ти обясни и сега работя над това, как да хващам ексепшъни.

 

0
Filkolev avatar Filkolev 4482 Точки

Прецени дали си струва да отделяш време за това на този етап, хващането на ексепшъни не е нещо, което ще ти трябва към момента, ще му дойде и на него времето. Но пък и не е кой знае колко голяма философия, така че защо пък да не разгледаш.

Както казах, може да се оправиш с една обикновена условна конструкция, която да гледа дали второто число (това, на което ще делиш) не е 0.

Други коментари:

  • Когато имаш умножение (понякога и събиране, но по-често умножение) трябва да внимаваш какви числа са ти подадени и ако има вероятност те да са големи ползвай като тип на резултата long.
  • За делението - помисли какво се очаква да изпишеш като резултат от делението - дали искаш да е цяло число или реално. Ако е реално трябва да го декларираш като реален тип (float/double) и при самото деление да кастнеш едното от числата към реален тип.
  • Като говорим за реални числа, всъщност аз в условието не видях ограничение числата, въведени от потребителя, да са цели, т.е. може би е по-добре всички числа в програмата ти да са floating-point типове, за предпочитане double.

Такива неща е хубаво да се научи човек да ги съобразява, защото доста помага за изпита, а и не само. Много хора губят точки с иначе верни алгоритми, защото не се сещат примерно, че като съберат две числа, които са на ръба на максимума на int, резултатът ще е по-голям от int и т.н. Мисленето какво се случва в граничните случаи е нещо, което доста повече ще ти помогне с решаването на задачи от хващането на ексепшъни.

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