Loading...
Destinote avatar Destinote 5 Точки

Задача Back To The Past(Глава цикли от книгата "Основи на програмирането" - изпитни задачи с цикли)

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

namespace _16.BackToThePast
{
    class BackToThePast
    {
        static void Main(string[] args)
        {
            double Heritage = double.Parse(Console.ReadLine());
            int YearHeWillLiveTo = int.Parse(Console.ReadLine());
            int HowOldIsHeDies = (YearHeWillLiveTo - 1800) + 18;
            bool IsHeInThePastHeWants = (YearHeWillLiveTo > 1800);
           

            if (IsHeInThePastHeWants)
            {
                for (int Index = 18; Index <= HowOldIsHeDies; Index++)
                {
                    if (Index % 2 == 0)
                    {
                        Heritage -= 12000;
                    }
                    else
                    {
                        Heritage -= 12000 + 50 * Index;
                    }
                }
            }
            else
            {
                Console.WriteLine("I don't think this is the time period you would want to live in Ivan. Please enter another timeline and i will see if it is suitable for you, based on the lifestyle you had untill now.");
            }

            if (Heritage > 0)
            {
                Console.WriteLine($"Yes! He will live a carefree life and will have {Heritage:f2} dollars left.");
            }
            else
            {
                Console.WriteLine($"He will need {Math.Abs(Heritage):f2} dollars to survive.");
            }
        }
    }
}

Ето ми го кода колеги. Дава ми 80/100. Нулевите тестови минават. След като с дебъгера проследя действието и по примерите дадени в условието, резултатите излизат абсолютно същите. Не мога да разбера от къде идва проблема.

Тагове:
0
Programming Basics
Destinote avatar Destinote 5 Точки

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

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

namespace _16.BackToThePast
{
    class BackToThePast
    {
        static void Main(string[] args)
        {
            double Heritage = double.Parse(Console.ReadLine());
            int YearsToLive = int.Parse(Console.ReadLine());
            int years = 18;

            for (int CurrentYear = 1800; CurrentYear <= YearsToLive; CurrentYear++)
            {
                if (CurrentYear % 2 == 0)
                {
                    Heritage -= 12000;
                }
                else
                {
                    Heritage -= (12000 + 50 * years);
                }
                years++;
            }

            if (Heritage >= 0)
            {
                Console.WriteLine($"Yes! He will live a carefree life and will have {Heritage:f2} dollars left.");
            }
            else
            {
                Console.WriteLine($"He will need {Math.Abs(Heritage):f2} dollars to survive.");
            }
        }
    }
}

Ето го и кода, съставен от напътстването в книгата. Този минава точно. Не мога да разбера обаче защо моя не. Някакви предположения ? 

0
15/03/2018 10:30:29
VasilValchanov avatar VasilValchanov 555 Точки

  if (Heritage >= 0)

0
Destinote avatar Destinote 5 Точки

О боже ... още 2 часа да се кьорех сигурно нямаше да го забележа ... а толкова проста грешка. Благодаря ти за пояснението! :) 

0
EmanuilNikolov avatar EmanuilNikolov 33 Точки

Правиш проверка, която явно е излишна.

using System;

public class Program
{
    public static void Main()
    {
        double Heritage = double.Parse(Console.ReadLine());
        int YearHeWillLiveTo = int.Parse(Console.ReadLine());
        int HowOldIsHeDies = (YearHeWillLiveTo - 1800) + 18;
        
        for (int Index = 18; Index <= HowOldIsHeDies; Index++)
        {
            if (Index % 2 == 0)
            {
                Heritage -= 12000;
            }
            else
            {
                Heritage -= (12000 + 50 * Index);
            }
        }
        
        if (Heritage >= 0)
        {
            Console.WriteLine("Yes! He will live a carefree life and will have {0:f2} dollars left.", Heritage);
        }
        else
        {
            Console.WriteLine("He will need {0:f2} dollars to survive.", (Heritage*-1));
        }    
    }
}

0
15/03/2018 13:31:29
Destinote avatar Destinote 5 Точки

Излишната проверка я направих с цел да си поиграя малко. Понеже ако да речем ще правим програма, която ще се внедрява, наш Иванчо може да избере година, различна от 1800. И затова реших да направя проверка, която, ако входът е различен от желания диапазон да каже, че на Ваньо няма да му хареса да живее в това време и да избере друго. В случая тя няма да се погледне даже от джъджа понеже той ще въвежда стойности от 1800 нагоре и програмата мисловно ще прескочи тази проверка. 
А що се отнася до грешката, тя е в това че не съм сложил и = на проверката за успешно живеене. Ако разликата между парите, които ще са му нужни и парите, които той има е 0 той пак ще е имал достатъчно пари за да живее без да работи. Аз това не го съобразих обаче и не въведох "=" при проверката за положителен резултат. Колегата Васил пояснява тази грешка. Благодаря ви, че помогнахте :) 

0
EmanuilNikolov avatar EmanuilNikolov 33 Точки

В случая задачата не изискваше подобна проверка. 

0
15/03/2018 15:58:15
Destinote avatar Destinote 5 Точки

Няма нужда принципно, да. Сега реших да се върна към задачата и да проверя дали ще ми приеме решението, без нея да я има но пак ми даде 80/100. Пробвах и със знак "=" и без, но в който и да е случай 80/100 ... Доста странно. 

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