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

Входни цели числа int, калкулиране на формула с double. Защо не може?

Здравейте,

Въпросът ми може би вече е ясен.

В този пример, при входни числа 8, 13, 7:

    double b1 = double.Parse(Console.ReadLine());

    double b2 = double.Parse(Console.ReadLine());

    double h = double.Parse(Console.ReadLine());

    double area = (b1 + b2) * h / 2;

    Console.WriteLine(area);

резултатът ще бъде 73,5.

Защо резултатът е цяло число 73 при:

            int b1 = int.Parse(Console.ReadLine());
            int b2 = int.Parse(Console.ReadLine());
            int h = int.Parse(Console.ReadLine());
            double area = (b1 + b2) * h/2;
            Console.WriteLine(area);

Предварително благодаря на тези които ще ми обърнат внимание. :)

Тагове:
0
Общи приказки
vangel avatar vangel 51 Точки

Когато правиш изчисления с данни тип int, ако резултатът не е цяло число, дробната част се губи. Това че променливата area е декларирана като double нищо не променя защото изчислението се прави с променливите b1, b2 и h, които са от тип int.
 

2
Aforkldj avatar Aforkldj 1 Точки

Щях да се съглася с теб, но си спомних, че го бях пробвала с друго изчисление предната седмица.

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

Така и не съм стигнала до това, имах други ангажименти.

Днес тръгнах да се занимавам с домашни и попаднах на следното:

ТОП 10 причини за FAIL на единичен тест в Judge системата

Там NikolayLiubomirov пише:

"6. Делителят е int, делимото също е int, а ние очакваме резултатът да е дробно число.

Пример:

double x = 25 / 100;

вместо

double x = 25 / 100.0;

."

Това ми спестява времето за търсене на предишният успешен пример и ми отговаря напълно на въпроса:

Добавих в моята задача една запетая и една нула на делителя:

int b1 = int.Parse(Console.ReadLine());
            int b2 = int.Parse(Console.ReadLine());
            int h = int.Parse(Console.ReadLine());
            double area = (b1 + b2) * h/ 2.0;
            Console.WriteLine(area);

Тадаааааа! Резултат: 73.5  laugh

0
18/10/2018 13:40:18
RoYaL avatar RoYaL Trainer 6849 Точки

2.0 не е int, така че отговорът отгоре си е за съгласяване :)

1
vangel avatar vangel 51 Точки

C# както всички дот нет езици се компилира до intermediate language. Това ни позволява в един проект да използваме  код писан на няколко различни езика, например c# и visual basic. По време на компилация се правят някои оптимизации и ако е необходимо(и възможно) някои данне се  обръщат в друг тип така че програмата да може да работи. В примера

double area = (b1 + b2) * h /  2.0

b1, b2 и h са от тип int, 2.0 е от тип double. Не е възможно да се извърши изчисленито понеже имаме различни типове данни, за това дот нет компилатора по подразбиране ще обърне стойностите на b1, b2 и h в double и ще получим резултат от тип double.

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