моля кажете къде ми е грешката
Моля ви, кажете къде ми е грешката. Опитвам се да разбера, а нямам идея...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace task3
{
class Program
{
static void Main(string[] args)
{
var sqMetresGrapes = int.Parse(Console.ReadLine()); // квадратни метра лозе
var eachSqMeterGrapesKilos = double.Parse(Console.ReadLine()); // кг грозде на кв. метър
var neededLitreWines = int.Parse(Console.ReadLine()); // необходими литри вино
var numberWorkers = int.Parse(Console.ReadLine()); // брой работници
var useAbleGrape = (sqMetresGrapes * eachSqMeterGrapesKilos) * 0.40; // грозде използвано за вино
var madeWine = useAbleGrape / 2.5; // направено вино
if (madeWine < neededLitreWines)
{
Console.WriteLine("It will be a tough winter! More {} litres wine needed.", neededLitreWines - madeWine);
}
else Console.WriteLine("Good harvest this year! Total wine: {} litres. {} litres left -> {} litres per person.",
madeWine, (madeWine - neededLitreWines), Math.Round((madeWine - neededLitreWines) / numberWorkers ), 0);
}
}
}
Здравейте, и аз имам проблем със същата задача. Ето условието все пак.
От лозе с площ X квадратни метри се заделя 40% от реколтата за производство на вино. От 1 кв.м лозе се изкарват Y килограма грозде. За 1 литър вино са нужни 2,5 кг. грозде. Желаното количество вино за продан е Z литра.
Напишете програма, която пресмята колко вино може да се произведе и дали това количество е достатъчно. Ако е достатъчно, остатъкът се разделя по равно между работниците на лозето.
Вход
Входът се чете от конзолата и се състои от точно 4 реда:
Изход
На конзолата трябва да се отпечата следното:
Ето го моя код: https://pastebin.com/zAFj3UkL, тук може да тествате: https://judge.softuni.bg/Contests/Practice/Index/233#1
Judge ми дава 90/100 точки.
Здравей,
Проблемът при теб е, че в някой случай може "allWine" да се окаже дробно число. За това трябва където го принтираш да го закръглваш. В твоят случай на този ред:
По условие на задачата трябва да закръглиш "allWine" към по-ниско цяло число. Това би изглеждало така:
Здравей @TodorovP
Моля прочетете кода преди да правите такива коментари. @jessi23 е направила тези закръгления там където декларира litersLeft и wineForWorkers
Което означава, че по никакъв начин не е нужно да го прави където принтира.
Не е хубаво да се дават грешни насоки.
Да, така стана. Благодаря :) Мислех че като съм закръглила при присвояването на стойностите горе, няма нужда и при отпечатването, но явно има :)
@jessi23
Щом при декларацията са закръглени и не са пипани не е нужно да се закръглят и при изхода.
Проблема при теб е всъщност, че ти не закръгляваш allWine. Ако се вгледаш в кодът ти:
Може да забележиш, че в функцията Math.Floor ти подаваш само (allGrape * 0.40) , а пък това закръглено го делиш на 2.5:
(Math.Floor(allGrape * 0.40)/ 2.5);
Само зелените скобички са за Math.Floor
Поради тази причина allWine в някой от случайте си остава дробно число и трябва да го закръглиш при принтирането.
За тази задача това обаче ти е плюс, защото не трябва да закръглиш цялото вино преди проверките, а чак когато принтираш.
Ако го закръглиш още тук където си се опитала след това долу в проверките ще минава на грешните проверки. Идеята е да сравниш целия allWine с neededWine, а пък после да закръглиш когато го принтираш. В противен случай при закръглянето ще се случи така, че тази проверка да влезе все едно виното не ти стига, а пък то да стигне.
@Thedi, благодаря за насоките. Сега вече разбрах защо не ставаше. Оставих закръглянето само на изхода, и работи както трябва. :)
За втория изход по условие
"И двата резултата трябва да са закръглени към по-високото цяло число .".
Следователно там изходът трябва да е:
Console.WriteLine("Good harvest this year! Total wine: {0} liters.", Math.Ceiling(allWine));
Console.WriteLine("{0} liters left -> {1} liters per person.", Math.Ceiling(litersLeft), Math.Ceiling(wineForWorkers));