Loading...
Orlin86 avatar Orlin86 7 Точки

Въпрос Задача 01 - Зеленчукова борса

Здравейте,

Решавам горепосочената задача от Coding 101 exam 26 March 2016. Условието на задачата е:

"Градинар продавал реколтата от градината си на зеленчуковата борса. Продава зеленчуци за N лева на килограм и плодове за M лева за килограм. Напишете програма, която да пресмята приходите от реколтата в евро ( ако приемем, че едно евро е равно на 1.94лв).

Вход

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

  • Първи ред – Цена за килограм зеленчуци – число с плаваща запетая
  • Втори ред – Цена за килограм плодове – число с плаваща запетая
  • Трети ред – Общо килограми на зеленчуците – цяло число
  • Четвърти ред – Общо килограми на плодовете – цяло число

Ограничения: Всички числа ще са в интервала от 0.00 до 1000.00

Изход

Да се отпечата на конзолата едно число с плаваща запетая: приходите от всички плодове и зеленчуци в евро."

Прилагам в judge.softuni следното решение:

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

namespace _17.Vegetables
{
    class Vegetables
    {
        static void Main(string[] args)
        {
            double vegiPrice;
            double fruitPrice;
            int vegiKG;
            int fruitKG;

            try
            {
                vegiPrice = double.Parse(Console.ReadLine());
                fruitPrice = double.Parse(Console.ReadLine());
                vegiKG = int.Parse(Console.ReadLine());
                fruitKG = int.Parse(Console.ReadLine());
            }
            catch (Exception)
            {
                Console.WriteLine("Incorrect input");
                return;
              }

            if ((vegiPrice < 0.00) || (vegiPrice > 1000.00) || (fruitPrice < 0.00) || (fruitPrice > 1000.00) ||
                (vegiKG < 0) || (vegiKG > 1000) || (fruitKG < 0) || (fruitKG > 1000))
            {
                Console.WriteLine("Incorrect input");
                return;
            }
            else
            {
                double resultBGN = ((vegiPrice * vegiKG) + (fruitPrice * fruitKG));
                double BGNtoEUR = 1.94;
                Console.WriteLine(resultBGN / BGNtoEUR);
            }

        }
    }
}

И ми дава 90/100 точки, с грешка на Test #6. Можете ли да ме насочите в какво греша?

--

Орлин Перфанов

Тагове:
1
Programming Basics 12/06/2016 22:43:52
t_zhelev avatar t_zhelev 24 Точки
Best Answer

Гърми ти защото условието е зададено грешно. На всички стари изпити има качени и всичките тестови примери, за да си сравниш кое не ти работи. В случая на шестия тест единия вход е 1929212, което твоите проверки го засичат като Incorect Input. Принципно когато няма изрично казано да се направи валидация на входа избягвай да правиш такава, само губиш време (говоря за когато си на реален изпит), а няма да получиш бонус точки.

0
Orlin86 avatar Orlin86 7 Точки

Благодаря за отговора.

1
zlatko.rusev avatar zlatko.rusev 1 Точки

Здравейте.

Аз съм писал на Java - 5 реда код, без никакви проверки. При мен също гръмна на шестия ред - с вход 1929212, но поради факта, че стойността на резултата е толкова голяма, че се изобразява с floating point: "double are stored in exponental precision in java and many other languages. see IEEE754 for more information about float, double and their variant". 

Следният ред фиксва проблема: 

NumberFormat formatter = new DecimalFormat("#0.00");

Поздрави

0
naskodaskalov avatar naskodaskalov 32 Точки
using System;

class VegetablesShop
{
    static void Main(string[] args)
    {
        double pricePerKGVegetable = double.Parse(Console.ReadLine());
        double pricePerKGFruit = double.Parse(Console.ReadLine());
        int KGVegetables = int.Parse(Console.ReadLine());
        int KGFruits = int.Parse(Console.ReadLine());
        double priceVegetables = pricePerKGVegetable * KGVegetables;
        double priceFruits = pricePerKGFruit * KGFruits;
        double sum = priceFruits + priceVegetables;
        double sumInEuro = sum / 1.94;
        Console.WriteLine("{0}", sumInEuro);
    }
}

Това е моето решение на задачата. Тази проверка за валиден код ти е напълно излишна и не разбирам защо входа го взимаш по този начин ...

0
rado84 avatar rado84 1 Точки

Има и още по-къс вариант. :)

{
            //price input
            double priceVeg = double.Parse(Console.ReadLine());
            double priceFr = double.Parse(Console.ReadLine());

            //weight input
            double vegWeight = double.Parse(Console.ReadLine());
            double frWeight = double.Parse(Console.ReadLine());

            //revenue calculation
            double revenue = ((priceVeg * vegWeight) + (priceFr * frWeight)) / 1.94;
            Console.WriteLine(revenue);
        }

 

0
13/06/2016 00:52:35
Orlin86 avatar Orlin86 7 Точки

Може да са излишни проверките, но това не обяснява грешката в judge от какво е породена (което е моя въпрос)

0
borislav9212 avatar borislav9212 745 Точки

Здравей,

Проблема ти идва от " If " проверките, трябва да използваш оператора "&&" вместо " || "

0
Orlin86 avatar Orlin86 7 Точки

 || е "или" ( т.е. стига само една от проверките ако е true ще се изпълни "incorrect input". )

&& задейства "incorrect input" ако всички условия са true - това не отговаря на условието "ОграниченияВсички  ще са в интервала от 0.00 до 1000.00"

 

0
13/06/2016 01:01:08
rado84 avatar rado84 1 Точки

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

0
borislav9212 avatar borislav9212 745 Точки

Еми това ми хрумна по твоята логика на задачата сега я тествах и даде 100/100. Аз ето така съм я решавал http://pastebin.com/8UVZHFWd иначе. Излишни са твоите проверки няма смисъл от тях

 

0
Leprikona avatar Leprikona 108 Точки

Ето едно малко по-простичко решение от мен.
Прочитам всички числа от конзолата, както са зададени по условие, след това намирам цените на плодовете и зеленчуците като type cast-вам цените им, зададени от конзолата, защото по-условие е зададено, че те са с плаваща запетая. И накрая ги изписвам с един Console.WriteLine() намирайки общата им стойност в евро като я деля на 1.94, за да я превърна от левове в евро.

Успех в обучението!

0
03/10/2016 07:30:35
GapoBG avatar GapoBG 15 Точки

Това е моето решение което работи и също дава 90 от 100 точки !

 

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

namespace VegetableMarket
{
    class VMarket
    {
        static void Main(string[] args)
        {
            var priceVeg = -1.00;
            var priceFruit = -1.00;
            var kgVeg = -1;
            var kgFruit = -1;
            var euro = 1.94;
            var resultVeg = 0.00;
            var resultFrui = 0.00;
            var result = 0.00;

            while (priceVeg < 0.00 || priceVeg > 1000.00)
            {
                Console.Write("Enter PriceVegetable [0.00 ... 1000.00] ");
                priceVeg = double.Parse(Console.ReadLine());
            }

            while (priceFruit < 0.00 || priceFruit > 1000.00)
            {
                Console.Write("Enter PriceFruit [0.00 ... 1000.00] ");
                priceFruit = double.Parse(Console.ReadLine());
            }

            while (kgVeg < 0.00 || kgVeg > 1000.00)
            {
                Console.Write("Enter kgVegetable [0...1000] ");
                kgVeg = int.Parse(Console.ReadLine());
            }

            while (kgFruit < 0.00 || kgFruit > 1000.00)
            {
                Console.Write("Enter kgFruit [0...1000] ");
                kgFruit = int.Parse(Console.ReadLine());
            }

            resultVeg = (priceVeg * kgVeg) / euro ;
            resultFrui = (priceFruit * kgFruit) / euro;
            result = resultVeg + resultFrui;
            Console.WriteLine(result);


            

 

        }
    }
}

 

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