Ето и моето решение на задачата, като искам да изразя специални благодарности на двете дами по-горе, които ми дадоха много добри насоки, както и всички други в темата! Всеки допринесе за кода, малко или повече! Научих много за различните цикли, преобразувания и така нататък от задачата! Моля за проверка и предложения за оптимизации! Предварително благодаря!
Кода пресмята на колко сте години и на колко ще бъдете след 10 години, като взема за база рожденната дата! Преобразува стринговете в числа, взема си деня и месеца, и изчислява точно възрастта ви!
http://pastebin.com/Gd9DyRbj
time period (the difference between two days) to period, including month and years.
An example: 3 years may equals 1095 days or 1096 days.
Of course, if we have two fixed dates, the period is exactly defined,
but there is not such an integrated tool in .NET, so we can either calculate periods
in dates (but in that case we cannot just add "10 years"), or to use approximate values.
P. S. Here there is a solution, but it gets too complex for "C# Basics"!
Ето и читаво решение от мен - проверки за читав формат на въведена дата + проверка за въведена дата на раждане в бъдещето:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
Ето и моят вариант на Задача 15
Едно възможно решение и от мен:
Console.WriteLine("Enter your birthdate in the format yyyy/mm/dd");
DateTime dateOfBirth = DateTime.Parse(Console.ReadLine());
DateTime dateToday = DateTime.Now;
int age = dateToday.Year - dateOfBirth.Year;
if (dateToday.Month < dateOfBirth.Month || (dateToday.Month == dateOfBirth.Month && dateToday.Day < dateOfBirth.Day))
{
age--;
}
Console.WriteLine("You are " + age + " years old.");
Console.WriteLine("In 10 years you will be " + (age + 10) + " years old.");
Здравейте,
Ето и моето решение:
using System;
class TenYearsOld
{
static void Main()
{
DateTime birthDate;
DateTime datenow = DateTime.Now;
Console.Write("Please enter your date of birth (yyyy/mm/dd):");
birthDate = DateTime.Parse(Console.ReadLine());
int currAge = datenow.Year - birthDate.Year;
if (datenow.Month < birthDate.Month || (datenow.Month == birthDate.Month && datenow.Day < birthDate.Day)) currAge--;
Console.WriteLine("Your current age is: {0} years", currAge);
int tenYOld = currAge + 10;
Console.WriteLine("After ten years you will be on: {0} years", tenYOld);
}
}
Поздрави
Ето моето решение (използвани са и неща, които все още не са преподадени, но ме дояде да оставя незавършена задачата).
using System;
class PrintAgeChange
{
static int den;
static int mesec;
static int godina;
static Boolean correctDate = false;
static DateTime birthDate;
static void Main()
{
do
{
readDate();
} while (!correctDate);
DateTime currentDay = DateTime.Today;
Console.WriteLine("В момента сте на " + GetAge(birthDate, currentDay) + " г.");
Console.WriteLine("След 10 години ще бъдете на " + GetAge(birthDate, currentDay.AddYears(10)) + " г.");
}//end of Main()
public static void readDate()
{
try
{
Console.WriteLine();
Console.Write("Въведете ден на раждане (число): ");
den = Convert.ToInt32(Console.ReadLine());
Console.Write("Въведете месец на раждане (число): ");
mesec = Convert.ToInt32(Console.ReadLine());
Console.Write("Въведете година на раждане: ");
godina = Convert.ToInt32(Console.ReadLine());
birthDate = new DateTime(godina, mesec, den);
correctDate = true;
}
catch (Exception e)
{
correctDate = false;
}
}//end of readDate()
public static int GetAge(DateTime birthDate, DateTime now)
{
int age = now.Year - birthDate.Year;
if (now.Month < birthDate.Month || (now.Month == birthDate.Month && now.Day < birthDate.Day)) age--;
return age;
}//end of GetAge
}// end of class
Браво и на теб,
DateTime обекта има един член, който се казва DayOfYear и връща поредния номер на деня на датата в годината.
Така математическото решението на задачата може да мине с два реда:
ageNow = nowDate.Year - dofb.Year - (dofb.DayOfYear < nowDate.DayOfYear ? 0 : 1);ageThen = ageNow + 10;