Loading...
MihaelaKostova avatar MihaelaKostova 4 Точки

Проблем със задача "Harvest" от предишен изпит

Здравейте!

Не мога да открия грешката си в кода. Четох, търсих, уж всичко е както трябва да е, а джъджа гърми пак и пак и пак. Моля, помогнете! Очаквам отговорите ви с нетърпение. А ето и задачата:

От лозе с площ X квадратни метри се заделя 40% от реколтата за производство на вино. От 1 кв.м лозе се изкарват Y килограма грозде. За 1 литър вино са нужни 2,5 кг. грозде. Желаното количество вино за продан е Z литра.

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

Вход

Входът се чете от конзолата и се състои от точно 4 реда:

  • 1ви ред: X кв.м е лозетоцяло число в интервала [10 … 5000];
  • 2ри ред: Y грозде за един кв.мреално число в интервала [0.00 … 10.00];
  • 3ти ред: Z нужни литри вино цяло число в интервала [10 … 600];
  • 4ти ред: брой работницицяло число в интервала [1 … 20];

Изход

На конзолата трябва да се отпечата следното:

  • Ако произведеното вино е по-малко от нужното:
    • “It will be a tough winter! More {недостигащо вино} liters wine needed.”
      • Резултатът трябва да е закръглен към по-ниско цяло число
  • Ако произведеното вино е повече от нужното:
    • “Good harvest this year! Total wine: {общо вино} liters.”
      • Резултатът трябва да е закръглен към по-ниско цяло число
    • “{Оставащо вино} liters left -> {вино за 1 работник} liters per person.”
      • И двата резултата трябва да са закръглени към по-високото цяло число.

Ето и моя код:

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

namespace Harvest
{
    class Program
    {
        static void Main(string[] args)
        {
            var area = int.Parse(Console.ReadLine());
            var kg = double.Parse(Console.ReadLine());
            var wantedWine = int.Parse(Console.ReadLine());
            var workers = int.Parse(Console.ReadLine());
            var harvest = area * kg;
            var harvestWine = (40 / 100.0) * harvest;
            var liters = harvestWine / 2.5;
            if (liters<wantedWine)
            {
                var wineMore = Math.Floor(wantedWine - liters);
                Console.WriteLine("It will be a tough winter! More {0} liters wine needed. ", wineMore);
            }
            else if (liters>wantedWine)
            {
                var litersLeft = Math.Ceiling(liters - wantedWine);
                var litersPerson = Math.Ceiling(litersLeft / workers);

                Console.WriteLine("Good harvest this year! Total wine: {0} liters.", liters);
                Console.WriteLine("{1} liters left -> {2} liters per person.", litersLeft, litersPerson);
            }
        }
    }
}

Тагове:
0
Programming Basics
ThePSXHive avatar ThePSXHive 436 Точки

Грешката е на втория от следните два реда:

Console.WriteLine("Good harvest this year! Total wine: {0} liters.", liters);
Console.WriteLine("{1} liters left -> {2} liters per person.", litersLeft, litersPerson);

Индексацията на всеки аргумент, който бива "интерполиран" (сиреч, заменен със стойността на променливата вдясно), започва от индекс 0.

// Грешка, първият индекс е 1
Console.WriteLine("{1} liters left -> {2} liters per person.", litersLeft, litersPerson);
// ok
Console.WriteLine("{0} liters left -> {1} liters per person.", litersLeft, litersPerson);

 

0
MihaelaKostova avatar MihaelaKostova 4 Точки

Имаш право. Поправих го, и въпреки това джъджа пак ми дава 80/100 :(

0
ThePSXHive avatar ThePSXHive 436 Точки

При извеждането на изхода, литрите се закръглят надолу (Math.Floor()), а и един допълнителен случай (при равенство) трябва да бъде покрит. Ето го твоето решение с корекциите. Разгледай и авторското решение.

0
MihaelaKostova avatar MihaelaKostova 4 Точки

100/100. Благодаря ти! Разбрах грешките си.

1
shestakov avatar shestakov 0 Точки

Здравейте!При мен във VS върви перфектно,но джъджа ми 70%!Ако някой може да ме ориентира ще съм благодарен!
https://pastebin.com/H8Ma82W4

0
raykov85 avatar raykov85 7 Точки

double Grozde = double.Parse(Console.ReadLine()); //това трябва да е тип double по условие

plosht и vinoZaProdan са int

 Console.WriteLine("{0} liters left -> {1} liters per person.",Math.Floor(razlika),VinoRabotnici);

//тук закръглянето е към по-високото пак по условие Math.Ceiling

double VinoRabotnici = Math.Floor(razlika / rabotnici);// тук също Math.Ceiling

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