За начинаещите ще обясня под задачата кодовете, които използвам и не са преподавани в лекциите все още, и какво правят те.
Console.Write("Enter your day of your birthday: ");
int day = int.Parse(Console.ReadLine());
Console.Write("Enter your month of your birthday: ");
int month = int.Parse(Console.ReadLine());
Console.Write("Enter your year of your birthday: ");
int year = int.Parse(Console.ReadLine());
int yearsNow = DateTime.Now.Year - year;
if (month == DateTime.Now.Month)
{
if (day < DateTime.Now.Day)
{
Console.WriteLine("After ten years you will be on: {0}",(yearsNow+10));
}
else
{
Console.WriteLine("After ten years you will be on: {0}",(yearsNow+9));
}
}
if (month < DateTime.Now.Month)
{
Console.WriteLine("After ten year you will be on: {0}",(yearsNow+10));
}
if (month > DateTime.Now.Month)
{
Console.WriteLine("After ten years you will be on: {0}",(yearsNow+9));
}
Кода int.Parse(Console.ReadLine()); ви помага да вземете числото, което ще напишете на конзолата,когато Ви попита. С този код взимам деня,месеца и годината.
Кода или по-точно цикъла:
if ( задавате условие, което конзолата проверява и ако вярно извършва действието в долните скоби "{ тук } ") - Условието, което аз съм задал е да сравни месеца, който сме сега ( DateTime.Now.Month ви служи да вземете месеца, който е зададен в календара на компютъра Ви. По същия начин използвам на други места и DateTime.Now.Day и DateTime.Now.Year )
{
На тези редове можете да задавате команди. Конзолата ще изпълни всички от тях преди да сте затворили скобите " { } " .
}
Надявам се да съм помогнал на някого :)
Една идея, която мисля че ще ти свърши добра работа. Вместо да питаш за деня, месеца и годината и да ги четеш по отделно:
Console.WriteLine("Write your birthday");
DateTime birthDay = DateTime.Parse(Console.ReadLine());
и после можеш да достъпиш деня, месеца и годината така - birthDay.Day, birthDay.Month, birthDay.Year.
:)
Мисля, че това е добро решение на задачата :
static void Main(){
int num;
Console.Write("Enter your age:");
num = int.Parse(Console.ReadLine());
num = num + 10;
Console.WriteLine("-----------------------------------");
Console.WriteLine("Your age after 10 years will be {0}", num);
Console.WriteLine("-----------------------------------");
}
static void Main()
{
Console.WriteLine("Please write your age.");
DateTime birthDay = DateTime.Parse(Console.ReadLine());
int currentAge = DateTime.Now.Year - birthDay.Year;
Console.WriteLine("Your age now is: " + currentAge);
int ageAfter10Years = currentAge + 10;
Console.WriteLine("Your age after 10 years will be: " + ageAfter10Years);
}
СБЪРКАЛ СИ ИЗРЕЧЕНИЕТO , промпта, КЪМ ПОТРЕБИТЕЛЯ - НЕ , YOUR AGE , A YOUR BURTHDAY IN FORMAT [ MONTH/DAY/YEAR] - DEFAULT FORMAT FOR DateTime
ДАТАТА МОЖЕ ДА Е НАПИСАНА ТАКА 5/29/31 или така 1/1/2014 или така 02/5/ 75 - все я взима за вярна DateTime
Иначе - браво !
Моето решение:
http://pastebin.com/jR2X9mcg
Ето едно просто решение:
using System;
class AgeAfter10Years
{
static void Main()
{
DateTime Birthday = Convert.ToDateTime(Console.ReadLine());
int birthYear = Birthday.Year;
DateTime Today = DateTime.Now;
int currentYear = Today.Year;
Console.WriteLine("You are {0} years old in {1}.",currentYear-birthYear,currentYear);
Console.WriteLine("You will be {0} years old in {1} (after 10 years).",currentYear-birthYear+10,currentYear+10);
}
}
И аз прочетох, че са сменили задачата, едва след като предадох заданието, но пък така е по - интересна.
Реших да ви представя решение, което конвертва датите в стрингове, от тях изтегля годината на раждане и годината сега, превръща ги в integer и смята възрастта. Решението съвсем не е перфектно, но пък показва методи по които можете да изкарате знаци от ляво и дясно на стрингов израз:
string StrBirthDate;
Console.WriteLine("Please enter your date of birth dd/mm/yy ");
StrBirthDate = Console.ReadLine();
string StrYearBirth;
StrYearBirth = StrBirthDate.Substring(StrBirthDate.Length-4);
int YearBirth = int.Parse(StrYearBirth);
DateTime Today = DateTime.Today;
string StrDateToday = Today.ToString();
string StrYearToday = StrDateToday.Substring(StrDateToday.Length - 16);
StrYearToday = StrYearToday.Substring(0, 4);
int YearToday = int.Parse(StrYearToday);
int AgeNow = YearToday - YearBirth;
int AgeAfter = AgeNow + 10;
Console.WriteLine("Your age now is " + AgeNow + " years " + "and your age in 10 years is " + AgeAfter+" years");
не работи - сложи малко коментари - каква ти е идеята ?
дава грешка на този ред int YearBirth = int.Parse(StrYea
виж по -нататък в темата съм ти оправила програмата ,че тук ми дава грешка страницата , не мога да я сложа и защо не работи съм ти написала
Ето примерно решение на задачата във варианта й със задаване на рождена дата. Използвах метода TryParse.
http://pastebin.com/FWg2m8Jv
И на мен ми харесва, твоето решение и подреждане на задачата ,особено хващането на грешките при въвеждането на данни , но с 2 забележки :
1. не се дала формата на на рожденната дата на потребителя -"Enter your birthday in format month/day/year", който е твоят формат и оригиналният,който ползва DateTime. Датата може да се въведе и така 5/29/61, и така 05/29/1961 - и двете ги чете правилно DateTime.
2. Не си извела сегашната възраст , а само тази след 10 години , а в условието го има . Точно, като синът ми - той вечно забравя нещо , от условията на задачите по математика, защото го мързи да ги чете до края, условията - ха ха ха !
Прибави това: Console.WriteLine("Your age now: {0}", ageNow);
Problem 1. * Age after 10 Years
Write a program to read your birthday from the console and print how old you are now and how old you will be after 10 years.
ЗА НИКОЛАЙ ДИМОВ
ЕТО, ОПРАВИХ ТИ Я ! БЕШЕ ЗАБАВНО И НАУЧИХ И АЗ МНОГО НОВИ НЕЩА .
ПЪРАТА МИ ПРОВЕРЕНА ПРОГРАМА !
ЗАБЕЛЕЖКИ :
1. ФОРМАТА НА ДАТАТА ТИ, КАКТО СИ Я ДАЛ, dd/mm/yy НЕ МОЖЕ ДА РАБОТИ , защото 2014 - 95 не става, както и 14 -95 не става,а става 2014 - 1995 .
Така,че формата го сменяме на dd/mm/yyyy .
2. сЪЩО, КАТО БРОИШ колко характера да махнеш от стринта , брои и интервалите и "/ ", грешни са ти числата
3. Съветвате ,да слагаш след всеки ред , на който се получава някаква нова стойност , да си слагаш Console.Write(новата стойност) за да видиш какво получаваш - това става и с дебъгера, но още не знам как, днес ще го тренирам .
Ето ти програмата ти - вече работеща - посе си изтрий коментарите и Console.WriteLine), за пробите ;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class AgeNowAndAfter10
{
static void Main()
{
string StrBirthDate;
Console.WriteLine("Please enter your date of birth dd/mm/yyyy "); // ПРОБНА ДАТА - 16/02/1995
StrBirthDate = Console.ReadLine();
Console.WriteLine("StrBirthDate = " + StrBirthDate); // 16/02/1995 (string, not a number)
// geting the last 4 chars from date-birthdate (the year in format yyyy)
string StrYearBirth;
StrYearBirth = StrBirthDate.Substring(StrBirthDate.Length - 4); // 1995 (string, not a number)
Console.WriteLine("StrYearBirth = " + StrYearBirth);// 1995(string, not a number)
// turning (parsing) type string in type integer
int YearBirth = int.Parse(StrYearBirth); // 1995 , but it is already a number, not a string of chars any more
Console.WriteLine("YearBirth = " + YearBirth); // 1995 ( number, not string any more)
// getting the date-today
DateTime Today = DateTime.Today;
string StrDateToday = Today.ToString(); // 3/9/2014 00:00:00 (string, not a number)
Console.WriteLine("StrDateToday = " + StrDateToday);// 3/9/2014 00:00:00 (string, not a number)
// geting only the last 13 chars from date-today (the year in format yyyy)
string StrYearToday = StrDateToday.Substring(StrDateToday.Length - 13); // 2014 00:00:00 (string, not a number)
Console.WriteLine("StrYearToday = " + StrYearToday); // 2014 00:00:00 (string, not a number)
// getting only the first 4 chars from the string 2014 00:00:00
StrYearToday = StrYearToday.Substring(0, 4); // 2014 (string, not a number)
Console.WriteLine("StrYearToday = " + StrYearToday);// 2014 (string, not a number)
// turning string in number ( parsing ) string 2014 in number 2014
int YearToday = int.Parse(StrYearToday);
Console.WriteLine("YearToday = " + YearToday);
// number 2014 - number 1995
int AgeNow = YearToday - YearBirth;
Console.WriteLine("AgeNow = " + AgeNow); // 19 ( number)
// adding 10 to number 19
int AgeAfter = AgeNow + 10; // 29
Console.WriteLine("AgeAfter = " + AgeAfter);
Console.WriteLine("Your age now is " + AgeNow + " years " + "and your age in 10 years is " + AgeAfter + " years");
Console.Read();
}
}
За VivaDam
Здравей,
Благодаря за проверката. Всъщност решението, което съм представил има страшно много недостъци - и ти ми показа още един който не се бях сетил - на моя компютър брояча на characters за махане работи точно - при теб вероятно има друг date формат на сегашна дата, което означава, че решението няма да работи при теб. Други недостъци са, че програмата няма да работи дори на моя комп след 9999 година (каква загуба за човечеството), няма и никакви проверки за грешен юзър инпут.
Почти всички решения по - горе са по - добри от моето, но пък това ми даде възможност да си поиграя със стрингове
Това е моето решение на задачата .
Показва на колко години си в момента след като си въведеш датата на раждане и след колко ще бъдеш след 10 години.
DateTime bday = new DateTime(1987, 12, 9);
DateTime now = DateTime.Today;
Console.WriteLine("My Birthday is " + bday.ToString("yyyy/M/dd"));
int age = now.Year - bday.Year;
Console.WriteLine("I am " + age + " years old");
Console.WriteLine("After 10 years i will be " + (age + 10) + " years old");
Логиката е както следва, въвеждаш си рожденната дата. Вадиш я от сегашната дата и прибавяш 10.