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 да се въведе само година?

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