Loading...

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

borislav9212 avatar borislav9212 745 Точки

Коя задача е ? От коя лекция? Да видим условието на задачата, че не мога да я намеря , по условието което си задал.

0
Losko avatar Losko 69 Точки

Изпит по "Програмиране за начинаещи" – 24 април 2016

Задача 3. Операции между числа

Напишете програма, която чете две цели числа (N1 и N2) и оператор с който да се извърши дадена математическа операция с тях. Възможните операции са: Събиране(+), Изваждане(-), Умножение(*), Деление(/) и Модулно деление(%). При събиране, изваждане и умножение на конзолата трябва да се отпечатат резултата и дали той е четен или нечетен. При обикновеното делениерезултата. При модулното делениеостатъка. Трябва да се има предвид, че делителят може да е равен на 0(нула), а на нула не се дели. В този случай трябва да се отпечата специално съобщениe.

 

Вход

От конзолата се прочитат 3 реда:

  • N1цяло число в интервала [0...40 000]
  • N2цяло число в интервала [0...40 000]
  • Операторедин символ измеду: „+“, „-“, „*“, „/“, „%

Изход

Да се отпечата на конзолата един ред:

  • Ако операцията е събиране, изваждене или умножение:
    •  „{N1} {оператор} {N2} = {резултат} – {even/odd}“
  • Ако операцията е деление:
    • „{N1} / {N2} = {резултат}“ – резултата е фораматиран до вторият знак след дес.запетая
  • Ако операцията е модулно деление:
    • „{N1} % {N2} = {остатък}“
  • В случай на деление с 0(нула):
    • „Cannot divide {N1} by zero“
0
alecc avatar alecc 12 Точки

Здравей,
Не съм сигурен, но мисля че % не работеше правилно с отрицателни числа.
Пробвай да ги обръщаш първо в абсолютната им стойност с Math.abs()
и тогава. Също не е хубаво да използваш double за сметки, въпреки че не мисля
, че проблемът идва от там в момента. Разгледах я само отгоре отгоре, така че е много 
вероятно да е друг проблемът, но дано да съм помогнал.

0
alecc avatar alecc 12 Точки

Току що забелязах и, че в условието пише само
В случай на деление с 0(нула):

      „Cannot divide {N1} by zero“

, а пък ти правиш правиш 2 проверки и за 2те числа.
Може и от това да е.

 

0
Losko avatar Losko 69 Точки

Не е конкретизирано.

"Трябва да се има предвид, че делителят може да е равен на 0(нула), а на нула не се дели. В този случай трябва да се отпечата специално съобщениe."
А и ако проблема беше в изхода, то показва разликата между очаквания изход и този който ти вадиш.
Най-вероятно съм збъркал някой знак или тип данни, но не си го намирам.

0
Losko avatar Losko 69 Точки

Не е истина.... Проблема е при проверката за н1 и н2 == 0 .... и то не самата проверка а това, че трябва да принтирам винаги първо числото след това 0....
if (n1 == 0 || n2 == 0)
{
if (n1 == 0)
 {
      Console.WriteLine("Cannot divide {0} by zero", n2);
 }
 else                                                                                     <ВЯРНО>
 {
       Console.WriteLine("Cannot divide {0} by zero", n1);
  }
}
......................................................................................

if (n1 == 0 || n2 == 0)
{
if (n1 == 0)

      Console.WriteLine("Cannot divide zero by {0}", n2);
 }
  else                                                                          <ГРЕШНО>
 {

        Console.WriteLine("Cannot divide {0} by zero", n1);
 }
 }

0
t_zhelev avatar t_zhelev 24 Точки

Всъщност едната проверка е излишна. Единствено ти трябва да проверяваш второто число дали е 0 и само тогава да изкарваш, че не може да се дели на 0. Освен това тествай какво става, когато резултатът е отрицателно число, защото мисля, че odd и even не работят много правилно тогава.

0
LardaX avatar LardaX 15 Точки

И аз имам проблем с Judge...също като при теб ми дава 70 / 100, но проверката за 0 ми е правилно подредена. Някакви идеи къде може да е проблема?

http://pastebin.com/YiNKbXpr

Пробвах с решение подобно на авторското - пак не става....

http://pastebin.com/1sKGeD4H

0
06/07/2016 13:53:02
dbunalov avatar dbunalov 7 Точки

И на мен "Съдията" ми дава абсолютно същото 70/100.

Поразгледах авторския код и видях (доколкото му разбирам), че при делението n2 се преобразува в double, явно за да е вярно делението. И понеже при пускане във Вижуъл студио кода му работи по абсолютно същия начин като моя, реших да видя съдията какво ще даде на неговия код... ами какво да кажа -- 70/100.

Така че, явно грешката е неоткриваема! Считай за тази задача 70/100 == 100/100

моя код за задачата 

0
07/07/2016 15:05:12
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Здравей,

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

Има минимален шанс нещо в задачата/тестовете да е неточно. Като отвориш резултатите, ще забележиш че много хора имат 100/100 точки. Тоест - конкретният случай не е такъв.

 Ако погледнеш кода си, ще видиш че имаш пропуски и неточности, поради Copy/Paste или невнимателно прочитане на условието.

 

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

В твоето решение, отпечатваш "even/odd" навсякъде - това се отчита от Judge като грешка.

 

В условието пише: Ако операцията е деление: „{N1} / {N2} = {резултат}“ – резултата е фораматиран до вторият знак след дес.запетая.

При теб това е пропуснато, което Judge също ще го отчете като грешка.

 

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

В случай, че искаш работещо решение, от което да гледаш: http://pastebin.com/BtA71dXL

Успех със задачата!

1
07/07/2016 16:23:18
dbunalov avatar dbunalov 7 Точки

Здравей,

Благодаря ти за съвсем правилната критика! (не го казвам, за да те засегна ... наистина ми помогна).

Благодаря ти наистина, защото след като ми писа си прегледах отново кода и да открих тъпите 2..3 грешки и вече имам 100/100 с този код :)

Твоя код ми харесва, но някой неща не са ми ясни как и защо са ползвани... понеже не съм ги чел (явно), а и не са обяснявани на лекциите които съм изгледал.

 

Отново ти благодаря за съветите!

 

1
07/07/2016 17:24:20
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Радвам се, че си се справил. Ако има нещо неясно, винаги можеш да питащ и ще обяснявам. В конкретната задача, предполагам, че става въпрос за някое от следните неща:

1. char operation = char.Parse(Console.ReadLine()); - това е начин, да прочетеш отделен символ от тип char. Използвам го, тъй като не ни трябва цял string, а само един символ.

2. Console.WriteLine($"{a} + {b} = {a + b} - " + ((a + b) % 2 == 0 ? "even" : "odd")); - "$" в началото ни позволява вместо да използваме placeholder-и от типа "{0}", а след това да декларираме какво да отиде на мястото на "0", директно да изписваме променливите/уравненията в скобите, като например "{a + b}". По-известно е като string interpolation. Могат да се видят доста примери в интернет.

(a + b) % 2 == 0 ? "even" : "odd" е така нареченият Ternary Operator. Реално, представлява по-кратък начин да се провери дадено условие и да се върне даден резултат: <условие> ? <резултат ако е изпълнено> : <резултат ако не е изпълнено>. В конкретната задача, проверявам дали резултатът от избраната операция е четен или нечетен. Абсолютно същият ефект може да се постигне и с if-else, но се иска маалко повече писане (а мен ме мързи).

3. Console.WriteLine($"{a} / {b} = {(double)a / b:F2}"); - F2 означава, че искаме да се показват два знака след десетичната запетая.

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

0
Leprikona avatar Leprikona 108 Точки

Според мен грешката е тук:

  • else if (op == '/' || op == '%')

        {

            if  (n1 == 0 || n2 == 0)

            {

                if (n1 == 0)

                {

                    Console.WriteLine("Cannot divide zero by {0}", n2);

                }

                else

                {

                    Console.WriteLine("Cannot divide {0} by zero", n1);

                }

            }

В условието пише само числото да не може да се разделя на 0, а ти проверяваш дали нулата може да се дели на числото (във втория if).

Според мен трябва да остане само else-а, а if-a не трябва да фигурира.

Успех с ученето! :)

0
viliqn avatar viliqn 1 Точки

Здравейте, аз също имам въпрос относно тази задача! Защо като изпозлвам за крайния резултат BigDecimal 

( https://pastebin.com/e2gM0UNu ) в judge  ми дава 100/100, а когато изпозлвам този вариант (https://pastebin.com/32wkhttps://pastebin.com/32wkpjbspjbs) ми дава 90/100 ?

0
17/11/2017 16:20:32
zarkoBoyadjiev avatar zarkoBoyadjiev 1 Точки

Здравей,

кодът ти е изтекъл и не се вижда, но ако искаш сравни си нещата с моя : https://pastebin.com/9kxaa7fL

Поздрави, Зарко.

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