Loading...
daniel.nikov926 avatar daniel.nikov926 18 Точки

Тръбите в басейн

Пробвам се да решавам задача от изминал изпит, но когато я пусна в judge системата имам само 13/100 и когато искам да видя какви входни данни ми е подала тя, не мога

кода ми е

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

namespace On_Time_for_the_Exam
{
    class Program
    {
        static void Main(string[] args)
        {
            var V = int.Parse(Console.ReadLine());
            var P1 = int.Parse(Console.ReadLine());
            var P2 = int.Parse(Console.ReadLine());
            var H = double.Parse(Console.ReadLine());
            var volumeWater = 0d;
            var FilledOne = 0d;
            var FilledTwo = 0d;
            var FilledPool = 0d;
            if(V > P1 && V > P2)
            {
                volumeWater = (H * P1) + (H * P2);
                FilledOne = ((P1 * H)/volumeWater) * 100;
                FilledTwo = ((P2 * H) / volumeWater) * 100;
                FilledPool = volumeWater/10;
                Console.WriteLine("The pool is {0:0}% full. Pipe 1: {1:0}%. Pipe 2: {2:0}%.",FilledPool, Math.Floor(FilledOne), Math.Floor(FilledTwo));
            }else if ( V <= P1 && V <= P2)
            {
                FilledOne = P1 * H;
                FilledTwo = P2 * H;
                FilledPool = (FilledOne + FilledTwo) - V;
                Console.WriteLine("For {0} hours the pool overflows with {1} liters.",H,FilledPool);
            }
           
        }
    }
}

 

Тагове:
-1
Programming Basics
Pilgrimage avatar Pilgrimage 515 Точки

Няколко сбъркани неща има, ама с отделни корекции просто вдигнах точките до 40.

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

using System;

namespace p02_Pool_pipes
{
    class Program
    {
        static void Main()
        {
            int volume = int.Parse(Console.ReadLine());       // Volume of the poolt [1...10000] liters
            int flowP1 = int.Parse(Console.ReadLine());       // Flow of the 1st pipe [1...5000] liters/hour
            int flowP2 = int.Parse(Console.ReadLine());       // Flow of the 2nd pipe [1...5000] liters/hour
            double hours = double.Parse(Console.ReadLine());  // hours [1.0 ... 24.0] hours

            double volP1 = hours * flowP1;
            double volP2 = hours * flowP2;

            double poolFilled = volP1 + volP2;

            if (poolFilled <= volume) // particulary filled
            {
                Console.WriteLine("The pool is {0}% full. Pipe 1: {1}%. Pipe 2: {2}%.", Math.Floor(poolFilled/volume*100), Math.Floor(volP1/poolFilled*100), Math.Floor(volP2 / poolFilled * 100));
            }
            else // over filled
            {
                Console.WriteLine("For {0} hours the pool overflows with {1} liters.", hours, (poolFilled-volume));
            }
        }
    }
}

0
Plamen27 avatar Plamen27 599 Точки

Здравей,

1. Ето фикс на кода ти: http://pastebin.com/ZABJuykS

2. Тъй като задачата е изпитна няма вход и изход открити.

Но тук: https://softuni.bg/downloads/svn/programming-basics/IntermediateExams/2016-03-26/Problem02-PoolPipes.zip

в папката Problem02-PoolPipes-Tests можеш да видиш входа и очаквания изход - съответно на ръка може да ги проверяваш в Visual Studio.

3. И последно поствай кода си в сайтове като www.pastebin.com или друг подобен и давай линка, а не както си направил.

Такива са правилата на форума.

Успех.

0
daniel.nikov926 avatar daniel.nikov926 18 Точки

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

0
DimitarKarev avatar DimitarKarev 87 Точки

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

1
12/09/2016 17:36:37
MichaelaLukanova avatar MichaelaLukanova 5 Точки

Здравейте,

Забелязах, че някои от тестовете на тази задача (Test1, Test2 и Test13) имат входни данни, които не съответстват на посочените в заданието интервали, и въпреки това имат валиден изход, Например, Тест1 има следните входни данни:

12345
123
123
10

и изходът съответно е: The pool is 19% full. Pipe 1: 50%. Pipe 2: 50%.

В условието на задачата е описано, че обемът на басейна трябва да бъде число в интервала от 1 до 10 000. Как тогава се допуска вход за обема 12 345 и изходът е изчислен?

В моето решение съм поставила съответните ограничения (интервали) за всеки входен параметър и ако не са изпълнени всички условия, то тогава извиквам съобщение за грешка. В случая не мога да получа 100/100 точки, а получвам 80/100, защото решението ми не може да "премине" през тези 3 теста, чиито входни параметри не са в съответните посочени интервали. Защо изобщо ги има тези интервали щом не трябва да ги вкл. в решението?

 

0
DimitarKarev avatar DimitarKarev 87 Точки

Възможно е да е грешка в условието може да са имали впредвид 100 000 а не 10 000. В условието никаде не пише че трябва да изведеш съобщение за грешка ако входа е извън интервалите. Принципно тези интервали са за ориентир какъв тип променливи да използваш за да не се получи препълване. Освен ако изрично не е казано в условието да се извежда съобщение за грешка не го извеждай.

0
12/09/2016 15:57:29
MichaelaLukanova avatar MichaelaLukanova 5 Точки

Благодаря за отговора. Според мен грешката не е в условието, защото при Тест 13, входните часове са 0.5, а в условието пише, че тябва да са в интервал от 1.0 до 24.00.

Не знаех, че интервалите, които се дават са само за ориентир и не е необходимо да проверявам дали входните данни попадат в посочените интервали. За в бъдеще ще го имам в предвид :)

0
daniel.nikov926 avatar daniel.nikov926 18 Точки

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

0
Leprikona avatar Leprikona 108 Точки

В сравненията ти е грешката. Не трябва да сравняваш всяка помпа с въведения от конзолата обем на басейна, а трябва общия обем вода вкарана от двете помпи да го сравниш с обема му. Ти си го направил, но в сравнението: " volumeWater = (H * P1) + (H * P2);", а трябва да го изведеш преди да почнеш да ги сравняваш и вече, ако той е по-малко от въведения обем съответно: "The pool is [x]% full. Pipe 1: [y]%. Pipe 2: [z]%." или ако е по-повече: "For [x] hours the pool overflows with [y] liters."

0
Stradjazz avatar Stradjazz 30 Точки

А може ли някой да ми обясни какво правя грешно аз?

Максимумът, който постигам е 80/100. Кодът е тук:

http://pastebin.com/yBWdDZY0

0
Stradjazz avatar Stradjazz 30 Точки

И сам разбрах, трябва първо да стартирам проверка за обема и тогава да му задам да смята процентите на тръбите

0
Leprikona avatar Leprikona 108 Точки

В първата проверка трябва да сравняваш общото количество вода вкарано от двете помпи, а не на всяка по отделно (демек твоето volumeWater) или иначе казано така трябва да изглежда: if (V > P1*H + P2*H), защото това се иска: да намериш колко с процента, от запълнения обем с вода, е допринесла всяка една помпа, а не колко процента от общия обем на басейна.

 

 

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