Intro to Programming Homework


21

Здравейте, колеги!

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

Това са моите решения.

Успех на всички!




Отговори



14
Качването на решенията на домашните в GitHub е много добра идея. Препоръчвам го на всички!

от Nikolay.IT (39117 точки)


0

Здравейте,

Не съм предал все още нищо :-)

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

Успех на всички!

Има ли отворена тема за това как тренерите водят лекциите? Питам неслучайно, имам наблюдения, съответно препоръки, които искам да споделя :-)


от ironma (55 точки)


29

Здравей, колега!

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

1. Нумерирай всяка една задача, започвайки с 01.

2. Копирай условието на всяка една задача и след това го закоментирай. Аз лично го слагам веднага след използваните namespaces, т.е. в най-горната част на Console Application.

3. Използвай имена на променливи, от които веднага става ясно какво точно си именувал със съответната променлива. В противен случай използвай коментари.

4. Зачиствай си кода. Например поне в началото няма нужда от енкапсулиране на класове в namespaces.

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

Иначе си се справил добре с домашното, всяка една задача изпълнява поставеното условие!

Успех!


от lnikod4s (6538 точки)


1

Здравейте,

Изрових Интернет но все още не мога да направя 

Problem 9. Print a Sequence Write a program that prints the first 10 members of the sequence: 2, -3, 4, -5, 6, -7, ...

Проблемът е, че когато въведа for (int i = 2; i <= 10; ); и след това използвам отново i като вече зададена стойност, системата го разпознава като непозната команда и дава грешка.

Това се случва независимо от вариантите и командите, които използвам.

Някой има ли идея на какво се дължи този проблем и евентуално как да го реша?

Благодаря :)


от mpavlova (5 точки)

3

Пробваи с променлива извън for-а на която в последствие да присвоиш i 

            int oddNumber;
            for (int i = 2; i <=11; i++)
            {
                if (i % 2 != 0)
                {
                    oddNumber = i * -1;
                    Console.Write("{0} ,",oddNumber);
                }
                else
                {
                    Console.Write("{0} ,", i);                    
                }
            }


от Emoto (25 точки)



0

Аз не виждам лекциите, а навсякъде са качените домашните и сроковете текът :).

Другото е че гледам миналогодишните лекции и чета, но някой от задачите не са ми съвсем ясни. 

Направо си забозих на 9-та. :)


от mitriohin (216 точки)


2
Като влезнеш в курса в колонката "Материали" нямаш ли срещу всяка лекция - "Презентация, Условие на Домашното и Демо"?

от radd_ko (90 точки)


5

Ето и моето домашно. Дано да е от полза на някой. Тук!

Успех на всички!


от tddold (429 точки)


5

Добре е да се декларират променливите възможно най-късно (поне в C#). Примерно тук може да декларираш ageNow и ageAfter там където им присвояваш стойностите (т.е. вътре в 'if'-a). Специално за това домашно всичко е ОК, може да сложиш е един else със съобщение за грешка (примерно невалидна година на раждане).


от neutrino (3376 точки)

2

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

Благодаря колега!


от tddold (429 точки)



6
И аз пускам домашното. Търпя критики :)

от dentia (12519 точки)


0

Скромно предложение към задачата за годините - 

Пробвай да направиш да ти показва Годините , месеците и дните от датата на раждане :)


от slavib (176 точки)


7

Супер идея е да качваме домашните си и в GitHub. :)

Добра практика е, когато се commit-ва в Git Repository. да не се качват bin и obj папките, както и куп други файлове и папки, които генерира Visual Studio (повече по темата - https://robinwinslow.co.uk/2013/06/11/dont-ever-commit-binary-files-to-git/).
За целта може да се ползва .gitignore файл, като има готови специално за Visual Studio проекти:
https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
https://www.gitignore.io/api/visualstudio


от IlianaB (1137 точки)


4

Здравейте колеги,

И аз искам да покажа какво съм сътворил:

https://github.com/SimoPrG/Intro-Programming-Homework/

Надявам се, че решението ми на задачите PrintSequence и PrintLongSequence съответно, ще ви е интересно.

Поздрави!




6

PrintSequence е хитро направена. Задачата с възрастта може да се опрости. Ако можеш да напишеш нещата с по-малко код е добре, защото по-лесно се дебъгва. Ето как може да стане задачата с 4 реда (може да тестваш с високосни години):

var bday = DateTime.Parse(Console.ReadLine());
int age = DateTime.Today.Year - bday.Year;
if (bday > DateTime.Today.AddYears(-age)) age--;
Console.WriteLine("You are now {0} years old, you will be {1} years old in 10 years.", age, age + 10);



от neutrino (3376 точки)

1
Благодаря за съвета! Проверката дали рожденият ден е минал много ми харесва.




10

Ето и моето домашно

(без текстовите файлове за 11-13 задача засега)

Първо искам да изкажа възхищението си от всички, които предадоха домашните си преди мен - особено на dentia:

@dentia

* нейната програма Age after 10 Years (задача 15*) не дава Unhandled Exception, когато въведеш датата във формат dd/MM/yyyy. Хареса ми и кратката и стегната структура на решението - за да не преписвам - направих нещо подобно, но със StringBuilder.Replace метод за почистване на инпута от нежелани тирета, празни места и т.н. в датата; и с DateTime.Compare метод за проверка дали рожденият ден тази година е вече минал или е още в бъдещето;

* тя единствена изпълнява една основна препоръка - да не се печата докато цикълът не е приключил - цитат:

"Извеждането на конзолата в цикъл е бавно. Set-ни си флаговете на масива в цикъла, пък като свършиш изведи резултата, т.е. докато смяташ не е добре да взаимодействаш с външния свят, щото ти се забавя програмата. vic.alexiev преди 2 години" (плюс майка ми която е програмист с 27 години опит с древни програмни езици и хем не може да ми каже как да го направя в C#, хем пищи че не се печата в цикъл :) )

В крайна сметка аз също открих начин да печатам след като циклите приключат (преди да видя решението на dentia) - почти като при dentia, с тази разлика, че тя преди печат съхранява резултатите от цикъла в array, а аз - в List<int>.

6-та задача (Print Numbers) също ми е по-различна от това което видях в домашните качени преди моето - накрая отпечатвам резултата като binary string - 1, 101, и 1001 са съответно 1, 5 и 9 (number += 4), записани в бинарна бройна система.

Съжалявам че системата на форума не ми дава възможност да дам на dentia отделни плюсове за различните неща които харесах в нейните решенията :)

@tddold, @topalkata,

Възхищавам се от идеята на да използва conditional operator (?:) в задача 16* (Print Long Sequence); и от изключително простото и елегантно решение на topalkata на задача 9 (Print A Sequence) - картка числова редица решена с минимално усложнен код.

@IlianaB,

благодаря за указанията за gitignore - върши много добра работа :)

(за срам и позор на мен сетването на github repository ми отне повече време от решаването на задачите)

Бих се радвала ако някой с повече опит даде някакви идеи сравнение на различните методи, които сме използвали по скорост? 2013 някой от трейнърите например ни беше направил много полезната забележка да предпочитаме place holders пред "+" за събиране на няколко стринга при отпечатване.

Някакви идеи какво можем да позваме за да си проверяваме скоростта на програмите: StopWatch (System.Diagnostics)?




2

//малко оффтопик

Много ме усмихна. :) Благодаря ти и се радвам, че кодът ми е полезен по някакъв начин. :)


от dentia (12519 точки)

1

Изобщо не е оффтопик :)

Кодът ти наистина е оригинален, и интелигентно направен.




4

Здравейте, колеги!

С риск да направя лоша услуга на онези от нас, които са склонни към преписване, поствам всички домашни от C# Part 1: линк

Целта ми е да помогна на всеки един, който се нуждае от леко "побутване" на определена задача. Старал съм се домашните да се прегледни и разбираеми. От тази гледна точка могат да бъдат ползвани просто като справка или сравнение.

Надявам се наистина да съм бил от помощ!

Успех на всички!


от lnikod4s (6538 точки)


0

Ако искаш да ти бъде още по-прегледен кода, си форматирай scope-а на условните конструкции по този начин винаги:

if(condition)

{

    //your code here

}



2
То няма ако искаш... Има си конвенция за всеки език която трябва да се спазва.

от E.Mitev (178 точки)



1

Здравейте,

Ето и моите неща неща (без текстовите)

Поздрави :)


от radd_ko (90 точки)


1
Гледам тази задача за числата 1 ,101 , 1001 и аз така съм я направил , но и други варианти забелязвам, дано всички да е точно. :)


2
За задача 15 трябва да се печатат и годините, на които си в момента.

от Bizuuu (95 точки)