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 да се въведе само година?
Принципно е така, но ето условието, копирано точно от учебника:
11. Направете програма, която прочита от конзолата вашата възраст и изписва (също на конзолата) каква ще бъде вашата възраст след 10 години.
Никъде не се споменава за месец и т.н.
Иначе - приемам забележката и сега започвам да ровя, как да го коригирам и да хваща и месеца и спрямо него да изчислява :)
П.С. току що гледах видео на Наков / вярно по време на лекция /, но по същото условие го смята само за годината и дори не използва DateTime, може би затова съм се подвел и съм го написал така...Наков е виновен :D
В задачата пише да се прочетат данните от конзолата, а не ти предварително да задаваш стойност. Няма как да да ти работи правилно, ако няма проверка за деня и месеца.
П.п. Погледнах условието, даже са ти подказали да използваш Console.ReadLine() и .Parse().
Сега май работи със всякаква дата:
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);
}
}
}
:)
Явно не си ме разбрал, няма как да ти работи, ако не проверяваш и датата. Не е достатъчно да проверяваш само годината.
Ако човек е роден на 10 май 2000 ще е на 15, а ако е роден на 10 октомври ще е на 14. Според твоята програма обаче и вторият човек ще е на 15 тъй като смяташ 20015 - 2000. Трябва ти проверка дали месеца на раждане е по-малък от сегашия месец и ако е вярно, да вадиш единица от годините.
Сега вече те разбрах...говориш за навършени години, а аз просто смятам само години:
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 де :) /.
Само не разбирам реда след && - какво ни интересуват дните като сравняваме месеци или тук става въпрос само ако рожденния ти месец съвпада с текущия и тогава проверява?
age -- означава, че намаляваш с единица, т.е. е радно на age=age-1;
А за ифа, добре е да се работи със скоби, за да не стават грешки и е по-четимо
if ((birthdate.Month > presentDate.Month) || (birthdate.Month == presentDate.Month && birthdate.Day>presentDate.Day))
означава ако месец е по-голям от сегашния или (месецът съвпада и едновредено с това денят е по-голям от днешния), тогава...
Иначе другото записване също е вярно, първо се изпълнява &&, а след това ||
Относно скобите - както примерно аз се чудех, кое кога се изпълнява :)
Благодаря още веднъж :)