Loading...
AneliyaS avatar AneliyaS 1 Точки

Проблем с домашно 10. Birthday

Здравейте!

Имам проблем с кода по-долу. Опитвам се да получа обема в литри директно (без първо да смятам в см3 и после да превърщам в литри), но ми дава грешен резултат 248.170. Знам, че верният резултат е 248.689 и той се получава, ако разпиша формулата отделно (т.е. първо умножа трите страни, за да получа обема в см3 и на следващ ред разделя този обезм на 1000, за да го получа в литри). Въпросът ми е защо, когато се опитвам да направя всичко в една формула, ми дава грешен резултат.

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

namespace Birthday
{
    class Program
    {
        static void Main(string[] args)
        {
           
            int lenght = int.Parse(Console.ReadLine());           
            int width = int.Parse(Console.ReadLine());
            int height = int.Parse(Console.ReadLine());
            double percent = double.Parse(Console.ReadLine());
     
            double volumeInLiters = lenght * width * height / 1000;
            double noNeededPercent = percent * 0.01;
            double finalResult = volumeInLiters*(1 - noNeededPercent);

            Console.WriteLine($"{finalResult:F3}");
        }
    }
}

---------------------------------------------------------------------------------------------------------

Резултат:

85
75
47
17
248.170
Press any key to continue . . .
 

Тагове:
0
Programming Basics with C#
kolioi avatar kolioi 641 Точки
Best Answer

Гледам, че все още никой не ти е отговорил вярно, макар че колегите са опитали. Проблемът е при изчисляването на volumeInLiters. Произведението е цяло число, 1000 също е цяло и имаме целочислено деление при което се получава целочислен резултат, т.е. губи се дробната част на резултата. Това се оправя като направиш поне едно от числата в израза double, например така

double volumeInLiters = lenght * width * height / 1000.0;

или умножаваш по 0.001 (вместо да делиш на 1000), което е същото.

0
AneliyaS avatar AneliyaS 1 Точки

Благодаря за отговора! :)

1
AneliyaS avatar AneliyaS 1 Точки

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

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

namespace Birthday
{
    class Program
    {
        static void Main(string[] args)
        {

            int lenght = int.Parse(Console.ReadLine());
            int width = int.Parse(Console.ReadLine());
            int height = int.Parse(Console.ReadLine());
            double percent = double.Parse(Console.ReadLine());

            double volumeInLiters = (lenght * width * height) / 1000;
            double noNeededPercent = percent * 0.01;
            double finalResult = volumeInLiters * (1 - noNeededPercent);

            Console.WriteLine($"{finalResult:F3}");
        }
    }
}

0
seteam avatar seteam 1 Точки

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

double percent = double.Parse(Console.ReadLine());  трябва да го разделите на 100 за да получите дробно число в проценти.

double percent = double.Parse(Console.ReadLine()) /100;

Например ако е 17/100=0.17 за да може после директно да го приложите в следващите изчисления.

Друго нещо е че проверката в Judge е в режим Trim. Toест трябва да изпозвате точно метода за закръгляне до 3ти знак: "{0:f3}",finalResult.

Ето го и моето решение. Надявам се да се ориентирате!

Успех!

https://pastebin.com/Drj0QcWh

 

 

0
Emi.Koleva avatar Emi.Koleva 0 Точки

Бихте ли помогнали и на мен! При първия примерен вход-изход всичко е ОК, но при втория примерен изход  ми дава : 597,239 при очакван изход:586,445. Какво бъркам?

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

namespace burthday
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("enter lenght - ");
            double lenght = double.Parse(Console.ReadLine());
            Console.Write("enter width - ");
            double width = double.Parse(Console.ReadLine());
            Console.Write("enter height - ");
            double height = double.Parse(Console.ReadLine());
            Console.Write("enter busy persent - ");
            double persent = double.Parse(Console.ReadLine());

            double volume = lenght * width * height;
            double litres = volume * 0.001;
            double realpersent = persent * 0.01;
            double realneeded = litres * (1 - 0.17);
            Console.WriteLine($"{realneeded:F3}" );
            
        }
    }
}
 

0
19/10/2018 11:08:08
Ralica93 avatar Ralica93 13 Точки

Здравей Emi.Koleva,

мисля, че грешката ти идва от тук

double realneeded = litres * (1 - 0.17);

не трябва да hardcode-ваш стойността 0.17.

Трябва да е 

double realneeded = litres * (1 - realpersent );

 

0
19/10/2018 12:22:15
Ivanpavlov95 avatar Ivanpavlov95 32 Точки

Здравей, 
Пробвай да декларираш първите три променливи като double. Аз напраивх програмата по следния начин и работи. 
 

using System;

namespace Birthday
{
    class Program
    {
        static void Main(string[] args)
        {
           // Console.WriteLine("Input l");
            double l = double.Parse(Console.ReadLine());
            //Console.WriteLine("Input w");
            double w = double.Parse(Console.ReadLine());
           // Console.WriteLine("Input h");
            double h = double.Parse(Console.ReadLine());
           // Console.WriteLine("Input procent");
            double p = double.Parse(Console.ReadLine());

            double obem = l * w * h;
            //Console.WriteLine("Obemut na akvariuma e " + obem);
            double litur = obem * 0.001;
            //Console.WriteLine("litri koito shte sybere akvariuma sa " + litur ) ;
            double procent = p * 0.01;
            double finalResult = litur * (1 - procent);
            Console.WriteLine($"{finalResult:F3}");

        }
    }
}
 

0
Dean.02 avatar Dean.02 15 Точки

Здравей.

пробвай да въведеш програмата по този начин:

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

namespace trapec
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int c = int.Parse(Console.ReadLine());
            double percent = double.Parse(Console.ReadLine());
            double v = a * b * c / 1000.0;
            //   Console.WriteLine(v);
            double plants = v* percent * 0.01;
        //  Console.WriteLine(plants);
            Console.WriteLine("{0:F3}", v - plants);


        }
    }
}

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