Loading...
mimiiovkova avatar mimiiovkova 2 Точки

ПИТАНЕ за съдействие - 05. Training Lab // Simple Operations and Calculations - More Exercises

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

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

            double rows = Math.Floor((h * 100) - 100) / 70; // тук това излиза че е 11 (вярно)
            double places = Math.Floor(w * 100 / 120); // това излиза че е 12 (вярно) ; 11 * 12 = 132 (вярно)
            double workPlaces = rows * places - 3; // е тука обаче като го сметне ми излиза че 11 * 12 = 135 - 3 = 132 НЯКОЙ ДА ИМА ИДЕЯ ЗАЩО?

            Console.WriteLine("{0:F0}", workPlaces);
  

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

Добро утро, mimiiovkova,

 

Пропускът е по-обикновен - пропуснати скоби по невнимание - добавянето води до 100/100:

 

===

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

            double rows = Math.Floor(((h * 100) - 100) / 70); // тук това излиза че е 11 (вярно) - Иван: пропуснати скоби - закръгляването се прави след сметките - без скобите дебъгерът дава - rows = 11.285714285714286, а не 11!    
            double places = Math.Floor(w * 100 / 120); // това излиза че е 12 (вярно) ; 11 * 12 = 132 (вярно)
            double workPlaces = rows * places - 3; // е тука обаче като го сметне ми излиза че 11 * 12 = 135 - 3 = 132 НЯКОЙ ДА ИМА ИДЕЯ ЗАЩО?

            Console.WriteLine("{0:F0}", workPlaces);

===

 

Поздрави,

Иван

0
RadostinStoychev avatar RadostinStoychev 128 Точки

Пробвай с cast
 

int tables = (int)((h * 100) - 100) / 70;
int rows = (int)(w * 100) / 120;

int places = rows * tables - 3;

 

0
krum_43 avatar krum_43 756 Точки

11*12=132-3=129 => workPlace=129.

 

0
RadostinStoychev avatar RadostinStoychev 128 Точки

@mimiiovkova почети малко за "Casting" или "Type Conversion", "Implicit Conversion", "Explicit Conversion" в нета. По принцип cast-ването трябва да се избягва защото се губят данни, но за тази задача може да се използва. В случая кастваме double към int (12.37742 -> 12). Тоест изрично казваш на типа double да започне да се държи като int и съответно ще изяде числата след десетичната запетая, защото int-a e целочислен тип. Ето още един пример:
 

long a = long.MaxValue;
int b = (int)a;

// a --> 9223372036854775807
// b --> -1

Обърни внимание на типовете при кастване, но общо взето гледай да го избягваш. Даже мисля, че твоят вариант с Math.Floor e по-добър. Сложи повече скобки, когато не си сигурна. Не пречи, даже помага и за четимостта на кода. Операторите като ( ), *, -, + имат ранг или приоритет при изпълнение. Например скобите винаги се изпълняват първи.
2 + 2 * 5 = 12
(2 + 2) * 5 = 20
2 * 2 + 5 = 9

Може да почетеш повече и за това на този линк:
https://docs.microsoft.com/en-us/cpp/c-language/precedence-and-order-of-evaluation?view=vs-2019

Happy Coding :)

1
09/05/2019 23:57:09
mimiiovkova avatar mimiiovkova 2 Точки

@RadostinStoychev 

Уау, страхотно! Много ти благодаря за насоките :) 

За скобите и аз си го мислих, ама нали съм нова тука - сега и ти като ми го казваш, яко скоби навсякъде значи, ахаха!

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

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