Loading...
kristina_j avatar kristina_j 15 Точки

[Homework] C# Basics - Introduction To Programming - Problem {15} - Age after 10 Years

Здравейте!Обръщам се към вас с проблем към 15 задача от домашно 1 (Age after 10 years).Хипотетично съм въвела следния код:Console.Write("Enter your birhday: ");
            DateTime birthDay = new DateTime();
            birthDay = DateTime.Parse(Console.ReadLine());
            System.TimeSpan myCurrentAge = new TimeSpan();
            myCurrentAge = (DateTime.Now - birthDay);
            int age = (int)(myCurrentAge.Days / 365.2 + 10);
            Console.WriteLine("Your age after ten years will be: " + age);

компилирала съм и го стартирам,но на конзолата излиза само написаното след първото "Console.Write / Console.WriteLine" ,или в случая Enter your birhday:,независимо какво въвеждам след него.Вероятно правя някъде елементарна грешка,но не мога да я открия.Пробвах с различни кодове,но резултата е един и същ.Благодаря предварително! 

 

Тагове:
9
Programming Basics 18/09/2014 23:26:02
Anonymous:
Темата нарушава т.9 от правилата на форума : https://softuni.bg/forum/questions/details/217
apelev avatar apelev 16 Точки

Здравейте,

 

И аз и се чудя на тая задача вече доста време, как точно трябва да стане.

Тъй като явно всеки си разбира условието по различен начин, за мен лично в задачата се иска:

Problem 1.       * Age after 10 Years

* Write a program to read your age from the console and print how old you will be after 10 years.

Да си напиша от клавиатурата в конзолата на колко години съм в момента(примерно 23) и като натисна Enter, на следващия ред да ми се появи, примерно "You are going to be 33 in 10 years".

Та следвайки идеята аз го докарах до кривата круша с този код:

{
class AgeAfter10Years
{
static void Main()
{
int line;
Console.WriteLine("How old are you now?");
line = Console.Read();
line += 10;
Console.WriteLine("This is how old you are going to be in 10 years: {0}", line);

}
}
}

Знам, че е грешен. Но не мога да разбера, как да накарам това чудо, да чете input-а от клавиатурата като число, да го запази това число и после само да прибави 10 към него и да ми го изкара на екран.

Моля за съдействие :)

0
ivaylo.yanchev.5 avatar ivaylo.yanchev.5 80 Точки

Колега apelev, и аз известно време се борих, но просто Console.ReadLine() връща String и трябва да се преобразува към int, примерно така:

 

int myAge = int.Parse(Console.ReadLine());

1
ivaylo.yanchev.5 avatar ivaylo.yanchev.5 80 Точки

Задачката с рожденния ден стана идеално, само съм добавил проверка за навършени години:

using System;

class ReadBirthdayAndPrintAge
{
    static void Main()
    {
        string myBirthday = Console.ReadLine();
        DateTime myDTBirthday = DateTime.Parse(myBirthday);
        DateTime nowDT = DateTime.Now;
        int myAge = nowDT.Year - myDTBirthday.Year;
        if (nowDT.Month < myDTBirthday.Month)
        {
            myAge = myAge - 1;
        }
        else if (nowDT.Month == myDTBirthday.Month)
        {
            if (nowDT.Day < myDTBirthday.Day)
            {
                myAge = myAge - 1;
            }
        }
        Console.WriteLine("Today, you are {0} years old.", myAge);
        Console.WriteLine("After 10 years you will be {0} years old", myAge + 10);
    }
}

2
Templars avatar Templars 2 Точки

Страхотно решение на задачата.

0
Dekameron avatar Dekameron 481 Точки

Ето го и моя код :)

 

 

Console.WriteLine("Enter your birthday (yyyy, mm, dd)");

// Присвояваме въведения рожден ден в променливата birthday
DateTime birthday = DateTime.Parse(Console.ReadLine());

 

//Създаваме променлива с днескашна дата
DateTime today = DateTime.Now;

 

//Изчисляваме на колко години е човека днес
int age = today.Year - birthday.Year;

 

//Ако тази година, рожденния ден още не му е дошъл

//годините са му с една по-малко
if(today < birthday.AddYears(age)) age--;

 

//Извеждаме резултата
Console.WriteLine("You are {0} years old.", age);
Console.WriteLine("After 10 years you will be {0} years old.", age + 10);

9
LinAdmin avatar LinAdmin 78 Точки

Здравейте,

Преди няколко часа предадох първото домашно и ми е още прясно, та ето ви и моя код

Линка води до целия код, а тук бих искал да акцентирам върху рожденния ден, защото ми се видя забавно да отделя случая на съвпад на "TodayIs.Day == BirhtDay.Day", когато рождения ни ден.

...
        else if (TodayIs.Month == BirhtDay.Month)
        {
            if (TodayIs.Day < BirhtDay.Day)
            {
                Console.WriteLine(" Now your are {0} years old", CurrentAge + 9);
                Console.WriteLine(" After 10 years you will be {0} years old.", CurrentAge + 9);
            }
            else if (TodayIs.Day > BirhtDay.Day)
            {
                Console.WriteLine(" Now your are {0} years old", CurrentAge + 10);
                Console.WriteLine(" After 10 years you will be {0} years old.", CurrentAge + 10);
            }
            else if (TodayIs.Day == BirhtDay.Day)
            {
                Console.WriteLine(" After 10 years you will be EXACTLY {0} years old!", CurrentAge + 10);
                Console.WriteLine();
                Console.WriteLine(" And By The Way Today Is Your Birth Day. Congrats!!! \n Please Don't Drink And Drive!!!");
            }
        }
...
2
adelayda avatar adelayda 36 Точки

Здравей LinAdmin,

хареса ми логиката на решението ти, но имаш грешки в кода.

При извеждането на сегашната възраст:

Console.Writeline("Now you are {0} years old.", CurrentAge + 9);

....

Console.Writeline("Now you are {0} years old.", CurrentAge + 10)

Това +9, +10 ти дава възрастта след 10 години, а не сегашната, т.е трябва да се махне.

Имаш и някои правописни грешки, но да не издребняваме ;)

Полезен ми беше все пак :)

2
LinAdmin avatar LinAdmin 78 Точки

Здравей Adelayda,

Радвам се, че решението ми е помогнало на някогодо след цели 7 месеца.  Явно някои от задачите се повтарят.

Интересното е, че когато го писах цифрите ми излизаха, а освен това когато ми го провериха, никой от двамата проверяващи не спомена за това.

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

 

 

 

 

0
Ludmil.D avatar Ludmil.D 41 Точки

Здравей мисля че с теб си играхме да оправиме нещата по задачата.
Ще ти дам примерно решение което изчислява възрастта ти по зададени дд/мм/гг и я определя ... тъйкато търсиш година а тя е неизменяема демек след 10 години ще си с 10 години по стар age+10 straight formward. 

Проблема се появява когато се взима в предвид месеца и деня по отношение на твоята възраст ... какъвто е случея на  твоето питане (въпреки че още не зnаеш че питаш това :D ). 
p.s. keep it simple

http://pastebin.com/s22S5dkS

1
RoYaL avatar RoYaL Trainer 6849 Точки

Харесва ми как прочитам keep it simple и после виждам код, в който има няколко if/else чаршафа :)))) Мисля, че не е нужен цял if блок, за да извадиш единица от резултата.

 

today.Month > birthday.Month ще върне Boolean True (което е Int=1) ако е така и съответно във всички останали случаи ще върне Boolean False (което е Int = 0);

age = (today.Year - dateBirth.Year) - Convert.ToInt32(today.Month > birthday.Month);

ще evaluate-не във 20 - 1 ако е вярно и 20-0 ако не е вярно.

 

1
BoYaN avatar BoYaN 336 Точки

Здравейте,

аз се заиграх миналия ден да го направя да показва на колко години/месеци/дни сте в момента, след като въведете дата на раждане.

ето линк към кода

-1
hristolilov avatar hristolilov 394 Точки

Ето, след дълго умуване и ровене за информация, и моето решение:

static void Main()

{

//Взима днешната дата.

DateTime currentDate = DateTime.Now;

//Взима зададена дата в конзолата.

Console.Write("Please enter your birtday: ");

DateTime birthday = DateTime.Parse(Console.ReadLine());

//Тази функция пресмята точният брой дни,часове и дори секунди между двете дати.

System.TimeSpan ageNow = currentDate - birthday;

//Тук дните се делят на 365.25, за да се върнат точният брой години.

double yourAge = ageNow.TotalDays / 365.25;

//Принтира сегашните години.Конверсията към инт е за да се избегнат числа от сорта на 21.84357

Console.WriteLine("Your age now is: "+((int)yourAge));

//Принтира възрастта след 10 години.

Console.WriteLine("Your age after 10 years will be: " + ((int)yourAge + 10));

}

Дано съм помогнал :)

 

5
ivailov94 avatar ivailov94 0 Точки

Според мен си роден да преподаваш евала :):)

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Виждам, че много решения на задачата допускат една малка неточност. Деленето на 365,25 може да даде отклонения. Да речем, ако напишем, че сме родени на днешния ден през 2012 ще ни върне, че сме на една година, не на две. Това е така, понеже годините след 2012 имат точно 365 дни и при целочислено делене на 365.25 рискуваме да намалим резултата с 1. Затова предлагам следното:

Проверяваме точно колко високосни години сме преживели:

 

int count = 0;
            for (int i = dayOfBirth.Year; i <= DateTime.Now.Year; i++)
            {
                if (i % 4 == 0) count++;
            }
            if((dayOfBirth.Year%4 == 0)&&(dayOfBirth.Month>2)) count--;
            if ((DateTime.Now.Year % 4 == 0) && ((DateTime.Now.Month == 1) || ((DateTime.Now.Month == 2) && (DateTime.Now.Day < 29)))) count--;
            int age = (int)((myCurrentAge.Days - count * 366) / 365) + count;

 

После проверяваме невисокосните:

int age = (int)((myCurrentAge.Days - count * 366) / 365

Накрая събираме високосни и невисокоси и получаваме възрастта си.

 

Дано съм бил полезен

3
mihayloff14 avatar mihayloff14 824 Точки

Решението ти е правилно. Поздравления за това, че доста си се поровил и помислил над тази задача, за да го откриеш smile

Аз просто бих искал да предложа по-лесен вариант. Функциите на DateTime олесняват изключително много тази задача. Няма нужда да се проверява за високосни години и т.н. Затова моето предложение е следното:

Console.WriteLine("Input your birthday (dd-mm-yyyy)");
DateTime birthday = DateTime.Parse(Console.ReadLine());
int Age = DateTime.Now.Year - birthday.Year;

if (birthday.Month >= DateTime.Now.Month)
{
    if (birthday.Day > DateTime.Now.Day)
    {
    Age--;
    }
}

 

Останалото е просто отпечатването на сегашните години и Age + 10.

2
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Аз приложих едно от първите решения в Google за изчисляване на възраст и го направих така:

DateTime birthday = DateTime.Parse(Console.ReadLine());
DateTime today = DateTime.Today;
int age = today.Year - birthday.Year;
if (birthday > today.AddYears(-age))
{
    age--;
}

2
JulianMarinov avatar JulianMarinov 11 Точки

Да постна и моя вариант. Работи с точност до ден. "Уловката" в условието е че трябва да се въведета датата на раждане интерпретирана в някои решения като година на раждане. 

using System;

class AgeAfterTen
{
static void Main()
{
Console.Write("Please, enter your birthdate (dd/MM/yyyy): ");
var getBirthDate = Console.ReadLine();
DateTime birthDate = DateTime.ParseExact(getBirthDate, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
DateTime today = DateTime.Today;
int age = (today.Year - birthDate.Year);

if (today.Month < birthDate.Month || (today.Month == birthDate.Month && today.Day < birthDate.Day))
{
age--;
}
YearsAfrerTen(age);
}

private static void YearsAfrerTen(int age)
{
int agePlusTen = age + 10;
Console.WriteLine("You are " + age + " years old");
Console.WriteLine("After 10 years you will be " + agePlusTen + " years old");
}
}

0
margarita.zlatanova avatar margarita.zlatanova 2 Точки

Здравейте , дълго време си играх , държах да използвам DateTime.TryParse гледах различни решения, получи се ,работи, ноооо приемам съвети за опростяване :)))

{
Console.Write("Enter your birthdate :");
DateTime birthDate;
if (DateTime.TryParse(Console.ReadLine(), out birthDate))
{
TimeSpan age = DateTime.Now - birthDate;
Console.WriteLine("Your age: {0} years and {1} days", (int)(age.Days / 365.25), age.Days % 365.25);
int after = (DateTime.Now.Year - birthDate.Year) + 10;
Console.WriteLine("After ten years you will be : " + after);
}
else
Console.WriteLine("invalid");

2
Filkolev avatar Filkolev 4482 Точки

И аз така реших задачата, когато я предавах, но това решение не е съвсем коректно както се оказа. Провери например с рождена дата, която е след 2012, т.е. няма високосни години между рождената дата и днешната дата. Би трябвало да даде грешен отговор.

Специално за тази задача изглежда най-коректният подход е най-дългият (от който се отказах, защото ми изглеждаше тогава дървен). Смята се първо разликата в годините, след това се проверява месецът на рождената дата, ако е по-малък от месеца на днешната дата, намаляваме възрастта с 1; ако пък двата месеца са равни, проверяваме дните и ако денят на рождената дата е по-малък, отново намаляваме с 1.

Ето целия ми код. Правя проверка и за възрастта след 10 години, която доста вероятно е излишна, но със сигурност не пречи.

2
fredddy avatar fredddy 27 Точки

ето моя Вариант:

\\Първо декларирам нужните ми променливи :

\\После си правя нужните проверки за да обхвана всички варинати които мже да въведе юзъра понеже имаме вход:

\\Проверявам дали месецът и деня е минал  и ако не е вярно намалявамм възраста с --

if (today.Month < birthDate.Month || ((today.Month == birthDate.Month) && (today.Day < birthDate.Day)))

{

age--;

}

\\ тук проверявам дали денят е днес? 

else if ((today.Month == birthDate.Month) && (today.Day == birthDate.Day))

{

Console.WriteLine("Today is your birthday. Happy BirthDay!!!");

}

\\А тук пък проверявам дали случайно юзъра няма да въведе дата която не е отминала?

if (age < 0)

{

Console.WriteLine("You will not alredy been born!");

}

else

{

Console.WriteLine("Your Age now is {0}", age);

Console.WriteLine("Your Age after ten Years is {0}", age + 10);

}

ето и целия код Цък

П.С Можеби трябва да реорганизирам малко if-овете

1
18/09/2014 23:48:02
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.