Софтуерно Инженерство
Loading...
remote87 avatar remote87 121 Точки

Textbook Exercise 11 1st Lecture - Age after 10 years

Здравейте!

Дано не се приеме за спам, но реших да споделя и едно мое решение на тази задача / простичко, но ефективно / :

using System;

namespace _06.AgeAfterTenYears
{
    class AgeAfterTenYears
    {
        static void Main()
        {          
            Console.WriteLine("Enter your birth date like this 16/05/1987 :");
            DateTime date = Convert.ToDateTime(Console.ReadLine());
            DateTime today = DateTime.Today;
            int age = today.Year - date.Year;
            Console.WriteLine("Now you are {0} years old.", age);
            int a = 10;
            Console.WriteLine("After ten years you will be {0} years old.", (age + a));
        }
    }
}

Само не ми стана ясно, дали има вариант DateTime да се въведе само година?

Тагове:
Lamms avatar Lamms 197 Точки

Това е много опростен вариант. Идеята е потребителят да си въвежда сам рождената дата, като така задачата се усложнява, защото трябва да се правят проверки за месеца и датата на раждане. Твоето решение не работи, ако човекът е роден на 16/10, пак ще даде 28, а човекът е на 27.

1
remote87 avatar remote87 121 Точки

Принципно е така, но ето условието, копирано точно от учебника:

11.   Направете програма, която прочита от конзолата вашата възраст и изписва (също на конзолата) каква ще бъде вашата възраст след 10 години.

Никъде не се споменава за месец и т.н.

Иначе - приемам забележката и сега започвам да ровя, как да го коригирам и да хваща и месеца и спрямо него да изчислява :)

П.С. току що гледах видео на Наков / вярно по време на лекция /, но по същото условие го смята само за годината и дори не използва DateTime, може би затова съм се подвел и съм го написал така...Наков е виновен :D

 

0
Lamms avatar Lamms 197 Точки

В задачата пише да се  прочетат данните от конзолата, а не ти предварително да задаваш стойност. Няма как да да ти работи правилно, ако няма проверка за деня и месеца. 

П.п. Погледнах условието, даже са ти подказали да използваш Console.ReadLine() и .Parse().

1
remote87 avatar remote87 121 Точки

Сега май работи със всякаква дата:

using System;

namespace _06.AgeAfterTenYears
{
    class AgeAfterTenYears
    {
        static void Main()
        {
            Console.WriteLine(DateTime.Now);
            Console.WriteLine("Enter your birth date like this 16/05/1987 :");
            DateTime birthdate = DateTime.Parse(Console.ReadLine());
            DateTime presentDate = DateTime.Now;
            int age = presentDate.Year - birthdate.Year;
            Console.WriteLine("You are {0} years old now.", age);
            Console.WriteLine("Your age after 10 years will be {0}", age + 10);
        }
    }
}

:)

0
Lamms avatar Lamms 197 Точки

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

Ако човек е роден на 10 май 2000 ще е на 15, а ако е роден на 10 октомври ще е на 14. Според твоята програма обаче и вторият човек ще е на 15 тъй като смяташ 20015 - 2000. Трябва ти проверка дали месеца на раждане е по-малък от сегашия месец и ако е вярно, да вадиш единица от годините.

1
remote87 avatar remote87 121 Точки

Сега вече те разбрах...говориш за навършени години, а аз просто смятам само години:

Console.WriteLine(DateTime.Now);
            Console.WriteLine("Enter your birth date like this 16/05/1987 :");
            DateTime birthdate = DateTime.Parse(Console.ReadLine());
            DateTime presentDate = DateTime.Now;
            int age = presentDate.Year - birthdate.Year;           
            if (birthdate.Month > presentDate.Month || birthdate.Month == presentDate.Month && birthdate.Day>presentDate.Day)
            {
                age--;
            }
            Console.WriteLine("You are {0} years old now.", age);
            Console.WriteLine("Your age after 10 years will be {0}", age + 10);

 

Добре, че беше една колежка и го видях, как трябва да стане. Нещо се пообърках за age--: мислех, че ще ми печата всички години назад...мааалко го пообърках с for цикъла, а не ми идваше на акъла, че оператора просто намаля стойността с единица :) 

Така всичко ок ли е според теб, проверих го с различни месеци и стана - ако вкараш октомври, те вади на 27 / ако си 1987 де :) /.

Само не разбирам реда след && - какво ни интересуват дните като сравняваме месеци или тук става въпрос само ако рожденния ти месец съвпада с текущия и тогава проверява?

0
Lamms avatar Lamms 197 Точки

age -- означава, че намаляваш с единица, т.е. е радно на age=age-1;

 

А за ифа, добре е да се работи със скоби, за да не стават грешки и е по-четимо

if ((birthdate.Month > presentDate.Month) || (birthdate.Month == presentDate.Month && birthdate.Day>presentDate.Day))

означава ако месец е по-голям от сегашния или (месецът съвпада и едновредено с това денят е по-голям от днешния), тогава...

 

Иначе другото записване също е вярно, първо се изпълнява &&, а след това ||

1
remote87 avatar remote87 121 Точки

Относно скобите - както примерно аз се чудех, кое кога се изпълнява :)

Благодаря още веднъж :)

1