[C#] Домашно Introduction to Programming - 2-12 Задачи


33

Здравейте колеги! Днес видях, че е качена първата лекция от раздела C# Part one  и тук споделям моите решения на задачите от домашното. :)

2.Create, compile and run a “Hello C#” console application.
В тази задача директно се отпечатва на конзолата съобщението: http://pastebin.com/LnVi7iPC

3.Modify the application to print your name.:
http://pastebin.com/ysSVnP3p

4.Write a program to print the numbers 1, 101 and 1001.:
Можем да решем тази задача и като направим 3 извеждания, но аз съм я решел, като съм използвал метода "+", чрез който можем да изведел няколко елемента наведнъж:  http://pastebin.com/nUnfkpmD

6.Create console application that prints your first and last name.
Тук използваме два пъти функцията Consele.WriteLie, като по този начин извеждаме името и фамилията на отделни редове: http://pastebin.com/DeQLhPgL

7.Create a console application that prints the current date and time.:
Тук използваме функцията DataTame.Now, която е към библиотеката System: http://pastebin.com/bpHRa6wi

8.Create a console application that calculates and prints the square of the number 12345. : http://pastebin.com/hyCCvAKq

9.Write a program that prints the first 10 members of the sequence: 2, -3, 4, -5, 6, -7, ... :Тук директно съм извел тези десет елемента, като всеки от тях съм извел с отделна функция за извеждане: http://pastebin.com/uuLeJfse

12.* Write a program to read your age from the console and print how old you will be after 10 years.
В тази задача се използва функцията Console.ReadLine, като аз погледнах примери за нейното използване от тук:http://www.daniweb.com/software-development/csharp/threads/69127/how-to-read-integer-value-in-c, а ето го и решението на задачата: http://pastebin.com/KMzXDe84
 

Екип модератори: Сменено заглавие, сменени тагове - правила




Отговори



6
Здравей,
Когато предаваш домашните не е редно да споделяш самоличността си. При проверката някой колега може да ти даде по-ниски оценки.
Идеята на задача 9 е да почетеш малко и да видиш как може да генерираш въпросната редица използвайки някой цикъл, или условна конструкция. И в случая не е грешна, схванал си идеята, но я принтираш статично.
За задача 12 освен за ReadLine и редно да прочетеш и за DateTime и да видиш как може да го приложиш.
Иначе като цяло задачите са добре подредени и с коректни имена.

Поздрави и успех!

от nikolaikolarov (2177 точки)


0
Здравей колега, какво имаш в предвид пот това да споделям самоличността си?

от Plamen.Minkov (216 точки)

0
Не си пиши името където и да е в дадените задачи, защото оценяването трябва да е анонимно. Конкретно за задачата, която ти принтира името на конзолата.

от BoyanTodorov (853 точки)



12

Здравей,

9 задача работи коректно, НО представи си, че трябва да принтираш числата от 1 до 250 000 какво правим тогава.Ако трябва всяко да пишеш по отделно сигурно ще ти отнеме много време, затова има така наречените "цикли" които правят тези неща.Тук точно се използва FOR цикъл > ЦЪК и source. За тази задача трябва да съобразиш, че всяко четно число е отрицателно, то се проверява с if statement ЦЪК и ако е четно го правиш отрицателно.

Препоръчвам ти да даваш информация от http://msdn.microsoft.com или http://www.dotnetperls.com/, но и този пак може..

Поздрави.


от IceElementor (398 точки)


0
Да мерси за препоръката и знам, че чрез цикъл задачата се решава по-лесно, но съм се стремил да използвам знанията, които сме придобли от първата лекция :) Поздрави.

от Plamen.Minkov (216 точки)

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

от stoyanov (2483 точки)



3

от BoyanTodorov (853 точки)


0
Добре е, но едва ли някой от начинаещите ще успее да разбере какво си написал на 7ма.. И първия линк не работи.

от IceElementor (398 точки)

0
Не съм сигурен че можеш да изпечатиш -i. Пробва ли го дали работи? По-скоро (-1)*i.
7-ма задача

от bgotov (1559 точки)



3
Използвай camelCase за именуване на променливите. Първата дума започва с малка буква и всяка следваща дума започва с голяма. На 12 задача си именувай променливата age вместо Age.



0
Да прав си, но аз използвам PascalCase, където всяка нова дума е с главна буква :)

от Plamen.Minkov (216 точки)

0
Да де и аз това забелязах. В C# за именуване на променливи се ползва camelCase.




2
Това ли всъщност е домашното, което трябва да изпратим или са просто упражнения (защото в презентацията ги пише като упражнения - exercises) ? Не съм изгледал още видеотата, извинявайте ако отговора на въпроса ми е в някое от тях.

от Vazzzz (1380 точки)


0
упражнение=домашно :D

от BoyanTodorov (853 точки)


1

Здравей Plamen.Minkov

Предполагам, че си учил немски Hallo е DE,а Hello на ENG. smiley

static void Main(string[] args), може да ги махаш не се използват засега.

4. и 7. За да спестиш код може да си направиш и цял стринг "1 101 1001" или да ползваш placeholder-и за числата Console.WriteLine("{0}{1}{2},1-во,2-ро,3-то ");

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

 


от BoyanTodorov (853 точки)


0
Да, прав си, че мога и така да ги изведа, но просто в този случай избрах другия начин :)

от Plamen.Minkov (216 точки)

0
Всъщност за протокола, Hello, Hallo, Hullo са форми в английския език. Може и в друг eзик да се ползва някоя от тях. Най-често използвана е Hello...

от ivaylon (5 точки)


15

Здравей,

Ето няколко препоръки и от мен:

1. Избягвай сливането на стрингове с + т.к. е доста бавна операция. Може да използваш или placeholder-и или класът StringBuilder.

Как работят placeholder-ите ? Много лесно - в своята същност те представляват места в стринг, който заместваме с други стрингове - т.е. имаме да кажем:

Console,WriteLine("Hello {0} ! This is a {1}!", "Ivan", "Placeholder test");

И какво става в същност ? В оригиналния стринг, на съответните места се заместват съответните стоности:

{0} -> "Ivan";

{1} -> "Placeholder test";

И на конзолата се изписва - Hello Ivan! This is a Placeholder test!

Този начин на фомратиране на стринга, може да се постигне освен в Console.Write и Console.WriteLine() също ис String.Format()

И на кратко какво е StringBudler - най-просто обяснено - място, където натрупвате даден парченца от стринг и може да изплючем цял стринг, като е по-бързо то обикновеното сливане на +.

Ето инфо: StringBuilder

2. При последната задача, където се пита за вход от кознолата, може да си поиграеш с валидацията, като използваш - int.TryParse().

Знам, че каквото ви препоръчвам да се погледне е по-сложничко, но ви съветвам да разглеждате, колкото се може повече неща за да ви е по-лесно за изпита :)

Поздрави,

Теодор

 

Edit: И за да не ви предоставям само теория, ето и едно сравнение на прозводителноста на обикновено сливане на стрингове и такова с StringBulder:
https://gist.github.com/Teodor92/5459835

Просто откоментирайте и закоментирайте нужните редове и ще видите каква е разликата :)


от Teodor92 (13062 точки)


0
Относно задача 4 - удачно ли е задачата да се направи с int, тъй като все пак се изписват цели числа и добре ли е да се разделят с + ? :)

от vasil.subeff (80 точки)

0
Въпрос на вкус т.к. тук нямате точно зададени критерии, може да се направи с short, ushort, int, uint и т.н. Какво ти хареса :)

от Teodor92 (13062 точки)



2

Здравейте, 

Ето няколко решения на задача 4 :

 
Като цяло, най-бързо излиза с дефиниране на 1 string.
 
Моля съветвайте, ако нещо не е практично :)

от vasil.subeff (80 точки)


0
1вото решение - не е нужно да викаш String.Format(), а може да го направиш направо вътре в Console.WriteLine();
Console.WriteLine("{0}, {1}, {2}", 1, 101, 1001);
За 3тото решение - използвай малко по описателни имена на променливите се ( не е задължително, но ще ти спести доста мъка по-нататък). Примерно вместо а -> firstNumber, b -> secondNumber и т.н.

от Teodor92 (13062 точки)

0
Дам, сега го видях в по-горния ти пост, съгласен съм, че ще спести време за конкретната задача :) Благодаря за съветите !

от vasil.subeff (80 точки)



1
Здравейте колеги, относно изпращането на домашното - изпращаме целия Solution в .zip формат, без да пишем лична информация? Благодаря!

от martin.nikolov (4535 точки)


0
да, без никаква лична информация :)

от nevtod (1087 точки)

0
Да и благодаря, че ми направихте тази забележка, поправих си кода, но просто тук не съм подменил линковете :)

от Plamen.Minkov (216 точки)


2

Здравейте, 

Следвайки съвета на koko_pz се опитах да направя 12 задача включвайки DateTime и успях де, но нещо дървено ми се струва : 

http://pastebin.com/GgxsSRa1

Някой може ли да даде някаква насока за друг начин ? 


от vasil.subeff (80 точки)


0
Ето един прост пример, за малко по-различен начин, с DateTime:
https://gist.github.com/Teodor92/5461532
Първо питаме потребителя за неговата година на раждане и я запасваме в променлива.
След това си запазваме сегашната дата, чрез DateTime currentDate = DateTime.Now; ( може да си представиш DateTime като тип данни, който съхраняват дати и време ).
След това си създаваме нов обект ( нещо, което съхранява данни ) от типа DateTime и на него присвояваме currentDate.AddYears(10); т.е. сегашната дата + 10 години.
И накрая изписваме разликата между годината от бъдещата дата и годината ни на раждане.

от Teodor92 (13062 точки)

0
Да, но това решение не отговаря на условието "to read your age"...
int birthYear = DateTime.Now.Year - int.Parse(Console.ReadLine()); DateTime virtualBirthday = new DateTime(birthYear, DateTime.Now.Month, DateTime.Now.Day); DateTime dateAfterTenYears = DateTime.Now.AddYears(10); Console.WriteLine(dateAfterTenYears.Year - virtualBirthday.Year);

от miroslav.tsakov (1476 точки)