Софтуерно Инженерство
Loading...
+ Нов въпрос
design.angelova avatar design.angelova 69 Точки

Ново решение на задачата за пресмятане на възрастта от домашно 1

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

using System;
using System.Collections.Generic;

class AgeCalculation
{
static void Main()
{
Console.WriteLine("What is your birthay date? Please use FORMAT: dd.mm.yyyy");
string year = (Console.ReadLine().Substring(6));
int bornYear = int.Parse(year);
int currentYear = DateTime.Now.Year;
int age = currentYear - bornYear;
Console.WriteLine("Your age is " + age);
Console.WriteLine("After 10 years you'll be {0} years old", age + 10);

}
}

Ъпдейтнах си кода и прикачих отново домашното си. Правилна ли е тази методика, преди да е изтекъл срока за прикачване на конкретното домашно?

 

Тагове:
Anonymous:
Duplicate of https://softuni.bg/forum/questions/details/34
dimitarstoyanov90 avatar dimitarstoyanov90 164 Точки

В случая това е по - добрият вариант за тази задача и според мен. И аз съм използвал почти същия подход, тъй като в задачата се иска рожденна дата, а не само година или месец. Иначе не съм сигурен дали в срок можеш да ъпдейтваш домашно.

1
rodytooo avatar rodytooo 3 Точки

Щом имаш по-добро решение може да си го ъпдейтваш в системата, поради тази причина и бутона за качване на домошно е още активен.:)

1
mzografski avatar mzografski 190 Точки

Ами не е най-добрия вариант,  защото аз, например,  след точно 10 години на днешната дата още няма да съм навършил годините. Така че помисли за проверка и за това,  дали днешната дата е преди или след датата на раждане. Хинт: всеки DateTime обект има член DayOfYear. 

Поздрави. 

7
vladeto87 avatar vladeto87 9 Точки

Моят код е подобен.

using System;


class ageafter10Years
{
      static void Main()
      {
              Console.WriteLine("Enter your birth date:");
              int birthdate = int.Parse(Console.ReadLine());
              int youragenow = (DateTime.Today.Year) - birthdate;
              int agein10years = (DateTime.Today.Year + 10) - birthdate;
              Console.WriteLine("You are {0} years old", youragenow);
              Console.WriteLine("In ten years you will be {0}", agein10years);
       }
}

 

Работи само като въведеш година на раждане.  Как да го оправя, за да работи с дата.

 

 

0
petio.bs avatar petio.bs 51 Точки

Понеже използваш int няма как да ти прочете датата като целочислено число. използвай DateTime. Това е моето решение :
        Console.WriteLine("Type in your birth date (YYYY.MM.DD):");
        DateTime BirthDate = DateTime.Parse(Console.ReadLine());
        DateTime CurrentDate = DateTime.Today;
        int Age = CurrentDate.Year - BirthDate.Year;
        if(CurrentDate.Month <= BirthDate.Month && CurrentDate.Day < BirthDate.Day)
            Console.WriteLine("You are now {0} years old and in 10 years you will be {1} years old.", Age - 1, Age + 9);
        else
            Console.WriteLine("You are now {0} years old and in 10 years you will be {1} years old.", Age, Age + 10);

0
vladeto87 avatar vladeto87 9 Точки

petio.bs, тествах твоя код и работи, но има един проблем. Независимо кой месец въведа, винаги ми показва един и същ резултат, ако рожденият ден не ти е минал, трябва да показва резултата - 1, защото не си ги навършил все още. Който знае как да го оправим, нека сподели плс.

1
Fleshian avatar Fleshian 378 Точки

Тук е моето решение в Pastebin


Напрвил съм един логически оператор който преведен с думи проверява:
Ако месеца в койото съм роден е по-голям от сегашния месец значи все още не съм навършил възраста която трябва да навърша през годината и му казавам age--; ИЛИ
ако месеца ми на раждане е същия с месеца който е сега И сегашния ден е по малък от деня ми на раждане пак му казвам age--
Така че ако датата е по-голяа от рожденната значи съм навършил годните и след 10 години ще бъда точно на вързаста ми + 10; 

4
TodorovH avatar TodorovH 216 Точки

По-горе е обяснено как от mzografski!

0
petio.bs avatar petio.bs 51 Точки

Оправих си задачата : цък

Все пак мисля, че решението на Fleshian е по - добро.

0
vgrozev avatar vgrozev 0 Точки

Със DateTime може да се ползват всякакви по-известни формати като: mm/dd/yyyy, mm.dd.yyyy, dd Month yyyy, Month dd yyyy….. и т.н. Само че нас ни интересува само годината и без това :-))

 

ето едно друго ресхение:

class AgeAfterTenYears
{
    static void Main()
    {
        Console.Write("Please enter your birthday in any of the popular formats: ");

        DateTime birthDate = DateTime.Parse(Console.ReadLine());
        Console.WriteLine("\n");

        int currentAge = DateTime.Now.Year - birthDate.Year;

        Console.WriteLine("Your current age is: {0} years old.\n", currentAge);
        Console.WriteLine("After 10 years you will be {0} years old.\n", currentAge + 10);
     }
}

0
tsv.georgieva avatar tsv.georgieva 35 Точки

Ето го и моето решение. Сложила съм коментари и съм дала пример. :)

using System;

class AgeAfterTenYears
{
static void Main()
{


//Reading your birthday
//For example 18.03.1990
Console.Write("Enter your birthday:");
DateTime birthday = DateTime.Parse(Console.ReadLine());

 

//Creating a variable with today's date
//For example 14.03.2014
DateTime today = DateTime.Today;

 

//Caluculating your age
//age = 2014 - 1990 = 24
int age = today.Year - birthday.Year;

 

//If yor birthdate is bigger than today's date minus your age, 1 is substracted from your age
// 18.03.1990 > 14.03.1990, so your age is 23, not 24
if (birthday > today.AddYears(-age)) age--;

//Printing how old you are now
//23
Console.WriteLine("You are {0} years old today.",age);

//Printing your age after 10 years
//33
Console.WriteLine("You will be {0} years old in 10 years", age+10);
}
}

0