03. Операции между числа
70/100 и не мога да си намеря грешката. Примерите в условието работят.... Ако някой ми посочи конкретните грешки ще съм благодарен.
Ето го и кода:
http://pastebin.com/6dX4Rjcq
70/100 и не мога да си намеря грешката. Примерите в условието работят.... Ако някой ми посочи конкретните грешки ще съм благодарен.
Ето го и кода:
http://pastebin.com/6dX4Rjcq
И на мен "Съдията" ми дава абсолютно същото 70/100.
Поразгледах авторския код и видях (доколкото му разбирам), че при делението n2 се преобразува в double, явно за да е вярно делението. И понеже при пускане във Вижуъл студио кода му работи по абсолютно същия начин като моя, реших да видя съдията какво ще даде на неговия код... ами какво да кажа -- 70/100.
Така че, явно грешката е неоткриваема! Считай за тази задача 70/100 == 100/100
Здравей,
Разсъждения от сорта на "грешката е неоткриваема" са много неправилни в този случай.
Има минимален шанс нещо в задачата/тестовете да е неточно. Като отвориш резултатите, ще забележиш че много хора имат 100/100 точки. Тоест - конкретният случай не е такъв.
Ако погледнеш кода си, ще видиш че имаш пропуски и неточности, поради Copy/Paste или невнимателно прочитане на условието.
В условието пише: При събиране, изваждане и умножение на конзолата трябва да се отпечатат резултата и дали той е четен или нечетен. При обикновеното деление – резултата. При модулното деление – остатъка.
В твоето решение, отпечатваш "even/odd" навсякъде - това се отчита от Judge като грешка.
В условието пише: Ако операцията е деление: „{N1} / {N2} = {резултат}“ – резултата е фораматиран до вторият знак след дес.запетая.
При теб това е пропуснато, което Judge също ще го отчете като грешка.
Може да има и други пропуски, но не съм гледал обстойно, тъй като решението ти е доста дълго. Надявам се тези двете неща да помогнат.
В случай, че искаш работещо решение, от което да гледаш: http://pastebin.com/BtA71dXL
Успех със задачата!
Здравей,
Благодаря ти за съвсем правилната критика! (не го казвам, за да те засегна ... наистина ми помогна).
Благодаря ти наистина, защото след като ми писа си прегледах отново кода и да открих тъпите 2..3 грешки и вече имам 100/100 с този код :)
Твоя код ми харесва, но някой неща не са ми ясни как и защо са ползвани... понеже не съм ги чел (явно), а и не са обяснявани на лекциите които съм изгледал.
Радвам се, че си се справил. Ако има нещо неясно, винаги можеш да питащ и ще обяснявам. В конкретната задача, предполагам, че става въпрос за някое от следните неща:
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 означава, че искаме да се показват два знака след десетичната запетая.
Извинявай, в случай че повтарям неща, които вече знаеш. Просто смятам, че е добре да разясня задачата максимално, тъй като все пак това е идеята на форума - да се учим. Ако има нещо друго, ще се радвам да ти бъда полезен.
Благодаря отново,
точно това по т. 2: Console.WriteLine($"{a} + {b} = {a + b} - " + ((a + b) % 2 == 0 ? "even" : "odd"));
ми беше малко, но не напълно неясно. Разбирам какво прави, но не и как точно го прави. Но след доброто ти обяснение го разбирам вече.
Радвам се, че има такива колеги като теб -- всъщност повечето са такива. Аз гледам много много да не задавам въпроси из форума -- защото обикновено ги има обяснени нещата, но понякога не успявам и да ги открия.
Ако имам нужда от друга помощ -- ще се възползвам, но ще гледам и да не прекалявам все пак.
Пожелавам ти всичко най-добро и отново благодаря!
Доста добро обяснение. Като гледам съм записал само (double) без да му давам :F2, тоест може би това ми отчита като грешка, тъй като ще го сметне десетично число, но няма да закръгли. След малко ще го пробвам - предполагам, че това трябва да е проблема.
А гледах, че в Console.WriteLine си използвал "..." + Ternary Operator, тоест + може да се използва освен за залепяне на стойности, стрингове и т.н. и за такъв тип операции? И реално в случая ти залепва отговора "even/odd", с което си спестяваш писането на отделен ред на първата част с Console.Write ?
Точно така. В конкретния случай Ternary Operator-a връща string, който се залепя с "+" към останалия текст.
Благодаря отново за обяснението. И между другото точно форматирането до 2 знак се оказа пропуска в кода. С :F2 го прие на 100/100. Направих си няколко опита и ми направи впечатление, че :f2 работи само ако преди и след ":" няма разстояние, тоест :f2 и прилепено към последната променлива.
Благодаря на Красимир Петков.
От неговото подробно обяснение на задачата научих тънкости и мисля, че ще са ми полезни за предстоящия изпит.
Здравейте,
Някой може ли да ми погледне кода - http://pastebin.com/P3xQ5dnr и да каже защо джъджа ми дава 90/100 ?
п.с. погледнах тестовете и този дето ми бърка е Test 1
55 / 5 = 11, което програмката ми го смята и изписва вярно...
Колега проблема ти е в Math.Round.
Смени - Console.WriteLine("{0} / {1} = {2}", n1, n2, Math.Round(result, 2));
с това - Console.WriteLine("{0} / {1} = {2:F2}", n1, n2, result);
Благодаря колега.
Стана така. Макар, че в конзолата ми изкарва 55 / 5 = 11.00, а теста е = 11, но в джъджа мина.
Ако някой може да погледне моя код и да ми каже защо бачка на 90/100 ще съм много благодарен :) https://pastebin.com/RP2LKu12
Здравейте,
кода на Красимир Петков е радост за очите - структуриран, кратък и ясен. Браво!
Откраднах някой неща, които не съм учил досега за което му благодаря.
Аз реших задачата по съвсем друг начин чрез използване не If - else... (ето и линк към кода: https://pastebin.com/6QFNvRML, ако на някой колега му е нужен за вбъдеще).
Искам само да вметна че логиката ми бе на 100% вярна но джъджа ми върна 48/100.
Това е само защото copy / paste-нах, това което трябва да се отпечата на конзолата от Word-ския файл с условието.
Отне ми доста време да открия грешката (а и трябваше да пренапиша всичко отначало) - НЕДЕЙТЕ ДА КОПИРАТЕ.
Пишете си кода сами за да не си късате нервите като мен.
Поздрави,