Софтуерно Инженерство
Loading...
+ Нов въпрос
rado84 avatar rado84 1 Точки

Invalid Number - сбъркано условие или моя грешка?

В условието на задачата пише:
"Дадено число е валидно, ако е в диапазона [100200] или е 0. Да се напише програма, която въвежда цяло число и печата “invalid” ако въведеното число не е валидно."

Тоест, да изписва "невалидно", ако числото е по-малко от 0, по-малко 100 или е по-голямо от 200.

И аз си написах кода според това условие. Като тествам с различните входове, дадени в задачата, програмата си изпълнява всичко както трябва. Примерно, като въведа -1, изписва "invalid". Като въведа 210, пак изписва същото. Значи, съдейки по условието, програмата работи коректно.

Само че Джъдж ми дава 80 точки, вместо 100 и като цъкна на "подробности", пише "очакван изход: "invalid"", "твоят изход: ". Единственото място, където няма изход, е ако числото е валидно, както е в условието.

Та, задачата ли е сбъркана или аз пропускам нещо?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InvalidNumber
{
    class Program
    {
        static void Main(string[] args)
        {
            //var
            int num = int.Parse(Console.ReadLine());

            if (num >= 100 && num <= 200 || num == 0)
            {
                Console.WriteLine("");
            }

            else if (num < 0 || num > 200)
            {
                Console.WriteLine("invalid");
            }
        }
    }
}

 

-1
Основи на програмирането 02/06/2016 17:43:00
ppbaev avatar ppbaev 156 Точки

тествай си кода с числото 50 примерно...

0
ralitsa_d avatar ralitsa_d 171 Точки

Проверката ти за "invalid" пропуска числата от 0 до 100. Т.е. ако подадеш число между 0 и 100, няма да влезеш в никой от if-овете.Принципно втората ти проверка е излишна, достатъчен е един else, за да хванеш всички останали възможни случаи.

2
rado84 avatar rado84 1 Точки

И с 50 си работи както трябва. Ако е валидно (а то е), не трябва да изписва нищо и програмата това и прави.

Ралица, проверката изпуска от 0 до 100, защото в условието е указано, че числото трябва да е в диапазона от 100 до 200 или ако е равно на 0.

-1
ppbaev avatar ppbaev 156 Точки

Колко човека ще трябват, за да те убедят, че числата от 1 до 99 не са в диапазон [100 - 200]?

2
02/06/2016 18:31:27
rado84 avatar rado84 1 Точки

Това ми е ясно, само че за да не пиша едно и също два пъти, виж какво написах в коментара ми към поста на Curious относно диапазона.

-2
Curious avatar Curious 33 Точки

Проблема ти е в else-if конструкцията, понеже пренебрегва числата от 1 до 99, които са невалидни според условието.Можеш или да промениш условието на вторият if,така че да обхваща и (1;99), или да го махнеш изцяло, оставяйки само else, което според мен е по-разумно понеже имаш само 2 възможни изхода, като вече си се погрижил за единият от тях, следователно не ти трябва допълнителен if. Когато проверяваш логиката на програмата във Visual Studio би ти било полезно да принтираш нещо по-полезно, когато едно число е валидно, за да си сигурен че логиката на програмата ти е правилна.Надявам се, че съм помогнал (: 

0
02/06/2016 18:23:51
rado84 avatar rado84 1 Точки

Мда, прав си. Странно обаче, че с въвеждането на 50 изписваше "невалидно", а ако въведех 60, не изписваше нищо. Сега му добавих и за диапазона от 1 до 99 и Съдията призна задачата за напълно решена.

Колкото до печатането, това лесно ще го направя и бих го направил, само че Съдия Джъдж е капризен и иска изходът да е 1 към 1 с това, което очаква. И ако моят изход съдържа "valid" и "invalid", ще го отчете за неправилно решение.

А ако else if го направя само на else, виж какво ми изкарва:

Затова го правя на else if и така си решавам проблема от тази снимка.

-2
Curious avatar Curious 33 Точки

като махнеш вторият if, трябва да изтриеш и съдържанието в скобите. Това е правилният синтаксис:
 

if ( condition )
{
    statement 1;
    statement 2;
    ...
    statement n;
}
else
{
    statement 1;
    statement 2;
    ...
    statement n;
}

Относно печатането, първо си я тествай изчепателно във VS, и после я нагоди спрямо изискванията в джъджа.

0
02/06/2016 19:22:26
zl.kolev avatar zl.kolev -2 Точки

Решението на задачата се състои в 20 реда. Използва се една if-конструкция с малко по-сложно условие. Запознат ли си с това, че логическите оператори (както всички останали оператори) имат приоритет и за да укажеш кои да се изпълняват първи ги ограждаш с кръгли скоби.

 

Налага се да укажеш първо да се изпълни логическо "и" между числата, по-големи или равни на 100 и по-малки или равни на 200, след което да се изпълни логическо "или" равно на нула. Това цялото трябва да бъде логически отречено (оператора !). Тялото на if-конструкцията е от един ред - отпечатване на стринга "invalid" на конзолата.

 

Благодаря за вниманието!

 

P.S. Престани да агитираш членовете на форума да ми decrement-ват ранга на коментарите. Благодаря!

-4
02/06/2016 19:31:35
rado84 avatar rado84 1 Точки

P.S. Престани да агитираш членовете на форума да ми decrement-ват ранга на коментарите. Благодаря!

Хахахахаха, ти сам си "агитираш" хората да ти намаляват точките с изказването си, че не сме достойни да пишем в темата на Негово Величество Опитния програмист. За разлика от теб, аз си имам доста по-важни занимания от това да се вкарвам в няк'ви филми, че някой дава рушвети на форумците да ми намаляват рейтинга и тия занимания се наричат "упражнения". Пробвай някой път, може да ти харесат повече.

-2
sider.topalov avatar sider.topalov 38 Точки

Здравей, значи имаш точно даден рейндж в който са ти числата правиш си проверката в първия if (num >= 100 && num <= 200 || num == 0)  тоест всички други числа са invalid. Въпрос.. защо ти е втория if (num < 0 || num > 200) ? Неможе ли просто да напишеш else Console.WriteLine("invalid"); ?? И да видим какво ше стане пробвай.Успех!

0
rado84 avatar rado84 1 Точки

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

else if (num < 0 || num < 100 || num > 200)
            {
                Console.WriteLine("invalid");
            }

 

0
dani111 avatar dani111 3 Точки

Ето едно решение и малка преработка на презентазцията:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace fv
{
    class Program
    {
        static void Main(string[] args)
        {
            var num = int.Parse(Console.ReadLine());
            Boolean check1 = (num >= 100 && num <= 200);
            Boolean check2 = (num == 0);
            
                if (!check1&&!check2)
            {
                Console.WriteLine("invalid");
            }
                

            


        }
    }
}
 

0
GapoBG avatar GapoBG 15 Точки

Аз повече от 50/100 в judge.softuni.bg немога да изкарам на тази задача, ще се радвам ако някой ми помоген и покаже грешката.ето го моето решение:

            var number = int.Parse(Console.ReadLine());

            if (number >= 100 || number <= 200 || number == 0)
            {
                Console.WriteLine();
            }

            else
            {
                Console.WriteLine("invalid");
            }
 

0
ThePSXHive avatar ThePSXHive 436 Точки

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

using System;
  
class InvalidNumber
{
    static void Main(string[] args)
    {
        int num = int.Parse(Console.ReadLine()); 
      	bool isValid = (num == 0 || num >= 100 && num <= 200); 
        if (!isValid) Console.WriteLine("invalid"); 
    }
}

Забележи, че не се изписва нищо ако числото е валидно. Освен това, в тази проверка

if (number >= 100 || number <= 200 || number == 0)

се проверява дали числото е по-голямо от 100 или по-малко от 200, но за "валидните" числа, и двете условия са изпълнени. Коректният логически оператор в първата част на проверката е и (&&).  

0
19/12/2016 20:18:41
GapoBG avatar GapoBG 15 Точки

Благодаря ти, рабрах си грешката, поправям се веднага ! :)

0
yanmark avatar yanmark 19 Точки

В else са ти всички останали на които ти дава invalid не ти трябва да слагаш условие

ти слагаш условие на кои числа да ти дава отговор

а на всички останало трябва да ти дава invalid просто махни условието от else  и пробвай

сложи само

else {

Console.WriteLine("invalid");

}

 

0
paNic avatar paNic 0 Точки

Ето и мое решение:

using System;

namespace Invalid_Number
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = int.Parse(Console.ReadLine());

            if (!(num >= 100 && num <= 200 || num == 0))
            {
                Console.WriteLine("invalid");
            }

            else 
            {
                Console.WriteLine("");
            }

        }
    }
}
 

Като за по лесно :D

0