Професионална програма
Loading...
+ Нов въпрос
kristinapetkova avatar kristinapetkova 11 Точки

BGCoder - грешка по време на изпълнение

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

Реших аз да пробвам тази система BGCoder, избрах си една задачка и след като си я направих в студиото и заработи със същите входно-изходни данни като в условието, я пуснах там. Всичките ми тестове обаче изгърмяха с "Грешка по време на изпълнение", а нулевите - с

Unhandled Exception: System.InvalidOperationException

На някой от вас случвало ли му се е?
Тагове:
1
Programming Basics
milen8204 avatar milen8204 296 Точки

Дай си решението на задачката да го разгледаме пък може и да измислим нещо wink

3
a_rusenov avatar a_rusenov 1103 Точки

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

1
GoShow avatar GoShow 595 Точки

Колегата milen8204 е прав.Без да видим кода, ще е трудно.Дай да погледнем и ще се намери решение :)

1
kristinapetkova avatar kristinapetkova 11 Точки

Здравейте,

 

Много ви благодаря, че толкова бързо се отзовахте!

Опитах се да кача кода в github, не съм сигурна, че с този линк ще може да го достъпите, но реших да опитам! Единственият .cs файл...

Поздрави, Криси (:

href="https://github.com/eyesfree/CSharpProjects
1
Samuil.Petrow avatar Samuil.Petrow 1548 Точки

 Console.ReadKey(); не е позволена операция в bgcoder. Махни го този ред и ще се оправи.

2
Lyubo avatar Lyubo 172 Точки

Махни/закоментирай  също и 31 ред Console.WriteLine("Unknown secret Code!!!"); , направо махни целият default. А за 100% замени int с long.

3
GoShow avatar GoShow 595 Точки

Да колегите са прави.Проблема със сигурност е Console.Readkey(); .Не знам защо си го използвала, но това реално променя входа,  тя не се завършва до момента, в който не се прочете клавиш от конзолата и със сигурност надхвърля времето за изпълнение.Премахвайки този ред получаваш 70 / 100, за 100/100 трябва да смениш всеки int с long. В случая работи и без да махаш ред 31 с Unknown Secret Code, но по принцип това не е необходимо.Мисля, че във всички задачи поне на това ниво ще видиш следното:

The input data will always be valid and in the format described. There is no need to check it explicitly.

По тази причина можеш да си сигурна,че входа винаги ще е валиден и не е нужно да правиш проверка, освен това тази проверка би могла да ти даде грешка и да загубиш точки. Дано съм бил полезен :)

2
kristinapetkova avatar kristinapetkova 11 Точки

Да, аз като цяло реших да почна да се тествам там, за да видя каква е тази система (: Много ти благодаря за интересната информация за това, че може да ме санкционира като си добавям валидация, която не е описана в условието...

Само не разбирам, каква е причината да заменям int с long? Тестовете с някакви огромни числа ли се правят?

0
Samuil.Petrow avatar Samuil.Petrow 1548 Точки

Да, по-големи са в последните тестове. Ето линк към тях ако ти е интересно да ги разгледаш :)

0
GoShow avatar GoShow 595 Точки

В доста случаи числата са не само големи, ами са си BigInteger иначе губиш до 30- 40 точки само заради overflow exception.Винаги проверявай за най-големите възможни, особено при поредици като Фибоначи и от сорта.

0
kristinapetkova avatar kristinapetkova 11 Точки

Не просто сте полезни, страшни сте! Благодаря ви много за помощта - оправи се наистина (happy)!!!

Реално аз се поразстърсих по-рано за друг начин да спра конзолата, тоест да си виждам резултата, и освен Console.ReadKey() имаше съвети за Console.ReadLine() и System.Pause() вие какво използвате?

 

0
Lyubo avatar Lyubo 172 Точки

В BgCoder не прави никакви опита да спираш или забавяш програмата, а в VisualStudio-то резултатът ще се изведе и без да слагаш Console.ReadLine/Key накрая.

0
Tr00peR avatar Tr00peR 569 Точки

От visual studio с Ctrl + F5 като пуснеш програмата спира накрая, за да може да си видиш резултата :)

0
Tr00peR avatar Tr00peR 569 Точки

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

using System;
namespace Exercise
{
class Program
{
static void Main()
{
long a = long.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
long c = long.Parse(Console.ReadLine());
long result = 0;
switch (b)
{
case 2: result = a % c; break;
case 4: result = a + c; break;
case 6: result = a * c; break;
default: break;
}
if (result % 4 == 0)
{
Console.WriteLine(result / 4);
}
else { Console.WriteLine(result % 4); }
Console.WriteLine(result);
}
}
}

 

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

0
Samuil.Petrow avatar Samuil.Petrow 1548 Точки

Третият case е 8. :) 

2
Tr00peR avatar Tr00peR 569 Точки

Лелеее нямам в момента условие, ама ако наистина е така съм много зле... :) Като я решавах преди седмица какво ли не пробвах иф-ове, проверки за грешен вход, ексепшъни, бигинтиджър..

 

Благодаря колега!

1
Samuil.Petrow avatar Samuil.Petrow 1548 Точки

Голяма част от грешките на изпитите (поне моите такива) са точно от непрочитане добре на условието. Особено в следващите курсове условията ще са километрични.. Случвало ми се е да изгърмя 78 точки заради грешно прочитане. Така че имайте в предвид, че по-често на автоматичните проверки (но не винаги!) не се получават всичките точки не заради грешна логика в алгоритъма, а заради някоя такава подробност.

0