Loading...
Atanasov_88 avatar Atanasov_88 39 Точки

Problem with Introducing to programming homework, problem 15 "Age after 10 years"

Колеги, леко се затрудних с това упражнение и го направих по следния начин. Според вас така удачно ли е или му трябват редакции?

Mod Edit: Моля, редактирай заглавието на темата си, така че да отговаря на правилата на форума! (т. 9)

using System;

    class AgeAfterTenYears
    {
        static void Main()
        {
            DateTime Now = DateTime.Now;
            Console.WriteLine(Now); 
            int a = 26;
            int b = 26 + 10;
            Console.WriteLine("Now - " + a); 
            Console.WriteLine("After 10 years - " + b); 

        }
    }

 

Тагове:
2
Programming Basics 22/05/2015 15:57:11
Lamms avatar Lamms 197 Точки

Мисля, че трябва потребителят да си въвежда рождената дата, а не годината да има предварителна стойност.

Аз я реших по следния начин, но не съм сигурна дали е най-удачният.

using System;

class Age
{
    static void Main()
    {
        Console.WriteLine("Enter your birthday date in format day/month/year: ");
        
        string birthday = Console.ReadLine();
        
        
        DateTime birth = DateTime.Parse(birthday);
        DateTime now = DateTime.Now;

        int age = now.Year - birth.Year;
        Console.WriteLine("Your current age is: " + age + "years.");
        Console.WriteLine("After 10 years you will be on: " + (age + 10) + "years.");
      
        
    }

}

 

2
21/05/2015 11:31:00
maggie_petrova avatar maggie_petrova 0 Точки

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

using System;

class AgeAfterTenYears
{
    static void Main()
        {
            Console.WriteLine("Please, enter your birthday in the format dd/mm/yy.");
            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`re now is " + age + " years old.");
            int ageInTenYears = age + 10;
            Console.WriteLine("In ten years you`ll be " + ageInTenYears + " years old.");
        }
}

smiley

0
21/05/2015 11:31:21
Lamms avatar Lamms 197 Точки

Твоето решение наистина е много по-прецизно и пълно, но и за начинаещи /поне за мен/ си е трудно да го измислят if-а.

Впрочем на последния ред трябва да е: 

 Console.WriteLine("In ten years you`ll be " + ageInTenYears + " years old.");

1
IceElementor avatar IceElementor 9 Точки

лол за пръв път виждам някой да използва < ? Защо ?

0
mihayloff14 avatar mihayloff14 824 Точки

По принцип това не е целта на домашното. Идеята е да си поиграеш с DateTime. 

Като цяло евентуален подход би бил следния:

Вземаш текущата дата -

изваждаш от нея датата на рождения си ден -

показваш колко е това на конзолата -

към него добавяш 10 години -

изкарваш го и него.

2
Atanasov_88 avatar Atanasov_88 39 Точки

Странно, че когато го направя и се опитам да изпълня програмата, системата ме изхвърля, пише "stop working" и не се получава. А и необходимо ли е да се вкара String или може да се размине без него?

0
mihayloff14 avatar mihayloff14 824 Точки

какво имаш предвид под това да се вкара стринг? 

 

0
Atanasov_88 avatar Atanasov_88 39 Точки

Ами щом напиша програмата в конзолата ми се поява, че е грешен форматът и специално за string метода казва, че не трябва да е такъв. Не съм много на ти с операторите, но се надявам, че просто, когато ги минем тази задача ще ми се стори по-лесна :) 

Опитах се да я реша по този начин: http://pastebin.com/8XJVUGej

0
21/05/2015 14:11:24
JOHNY avatar JOHNY 196 Точки

Явно различните лектори дават различно задание на домашното. Доколкото разбрах в някои случаи се поощрява и изисква използването на DateTime.Now, а в други се изисква просто смятане.

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

Отбелязвам, че според повечето лектори използването на goto е нежелателно. Основната причина според тях е, че при дълъг код става трудно проследяването къде точно се връща потребителя. Цитираният по-горе е относително кратък и респективно "закоментиран", така че мисля, че няма да имате ядове. Друг е въпроса дали например goto EdiKudeSi // Row 27 - checking for correct ages  няма да е достатъчно улеснение дори и при по-дълъг код.

Подсещам колегите по-горе да използват pastebin да речем, вместо да публикуват целият си код тук. Веднъж заради правилата на форума и втори път, защото е по-ясно и четливо, особено когато е упоменат и езика C#.

0
fredddy avatar fredddy 27 Точки

От условието на задачата се изисква да се сметнат годините от зададена дата от потребитея т.е. тук имаме Вход и Изход от конзолата нещо, което е предвидено за няколко лекции напред. Интересното в тази задача е не само да сметнем своите години като въвеждаме само своята дата ами ако е възможно и да обхванем всички възможни сценарии които би въвел потребителя ето моето обширно решение ЦЪК. Сега даже като пиша и си намерих малък пропуск в кода, Пропуснал съм да направя защита ако потребителя който въвежда е достатъчно тъп да въведе нещо което не е дата. В този случай програмата ще ми крашне след като не може да парсне въведеното :) 

 

0
Umbryahoo avatar Umbryahoo 4 Точки

ето един начин тъкмо да кажете мения за него :   

                       

using System;
class AgeAfter10Years
{
    static void Main(string[] args)
    {
        Console.WriteLine("enther birth date (yyy,mm,dd)");
        DateTime birthday = DateTime.Parse(Console.ReadLine());
        DateTime now = DateTime.Now;
        int age = now.Year - birthday.Year;
        if (now.Month == birthday.Month && now.Day < birthday.Day)
        {
            Console.WriteLine("you are " + (age - 1) + " years old");
            Console.WriteLine("in 10 years tou will be " + (age + 9) + " years old");
        }
        if (now.Day == birthday.Day)
        {
            Console.WriteLine("you have birthday today");
            Console.WriteLine("you are " + age + " years old");
            Console.WriteLine("in 10 years tou will be " + (age + 10) + " years old");
        }
        if (now.Month > birthday.Month)
        {
            Console.WriteLine("you are " + age + " years old");
            Console.WriteLine("in 10 years tou will be " + (age + 10) + " years old");
        }


    }
}

 

0
fredddy avatar fredddy 27 Точки
Добре изглежда но не мисля че си обванал всички възможни въвежда ни тя. Например ако потребителя поиска да въведе дата в бъдещето и мисля също че формата на датата в първия Console.Writeli("enter birth date (yyy,mm,dd)"); Трябва да е (dd.mm.yyyy). И също можеби би бил кода ти по под те ден ако използвал Console.Writeline("you are [0] years old", age)
0
Umbryahoo avatar Umbryahoo 4 Точки

ok само ("you are [0] years old", age) предполаагам [0] ще се сменя според годините но трябва ли нещо добълнително или само така да го оставя :)

0
nikolaiweselinow avatar nikolaiweselinow 11 Точки

Там където проверяваш (now.Day == birthday.Day), трябва да добавиш и now.Month == birthday.Month, защото в твоя случай всеки месец трябва да имам рожден ден.

Успех!

1
22/05/2015 14:19:23
Cvetoslava avatar Cvetoslava 3 Точки

Като  въвеждам днешната дата, тоест проверявам условието за евентуален рожден ден, не ми изпринтва съобщението за рожден ден, а изписва на конзолата "Invalid date format", при положение , че  въвеждам правилно формата  на датата, не знам, при теб работи  ли ? 

0
nikolaiweselinow avatar nikolaiweselinow 11 Точки

Здравей,

разбрах защо при теб не работи... настройките на Windows Languages не са като моите, но сега съм го оправил.

Добавих тези два реда...
 Thread.CurrentThread.CurrentCulture = new CultureInfo("bg-BG");
        CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

и след Console.ReadLine().... добавих един ред случайно, ако някой въведе датата със запетая.

stringDate = stringDate.Replace(",", ".");

https://gist.github.com/nikolaiweselinow/98a2acf232d6e8fced6a

 

Успех!

0
nikolaykk avatar nikolaykk 94 Точки

Здравейте,

Аз се опитах да включа и проверка за коректността на въведената от потребителя дата. Ето моя код:

http://pastebin.com/EnjTmmhi

Ще се радвам на коментари защото имам чувството, че винаги има и още нещо, което да се вземе в педвид :)

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