Drawing Figures - N x N stars
Тая задача нещо ми се опъва - не иска да изкара интервал след звездичката и пише, че не можело да конвертира string в character. Последният ми опит е по-долу. Идеи?
{
int i = int.Parse(Console.ReadLine());
int n = i;
for (i = 1; i <= n; i++)
{ Console.WriteLine(new string('*' + ' ', n)); }
}
Трябва да излязат така:
Мерси, Краси. Т'ва изглежда интересно и ще го разцъкам допълнително, за да го доразбера. Обяснението ти е много добро, но аз най-добре запомням, когато го run-на и сам видя какво точно се случва. :)
А един въпрос извън задачата, просто от любопитство: да речем, че не искаш да ползваш цикъл, за да повториш дадена команда. Има ли някакъв начин (команда), с който да укажеш на конзолата, че искаш да повтори Console.WriteLine("...."); 4 пъти (примерно)?
Накратко: не се сещам за такъв вариант, но има някои заобиколни начини (които като цяло не са добра идея).
Ще ти дам пример с конкретната задача, решена по друг начин:
Разликите са:
1. Добавяме using System.Linq; което ни трябва за да използваме някои от методите за това решение.
2. Използваме Enumerable.Repeat(), като подаваме за аргументи нашия стринг и брой пъти, който искаме да се съдържа. То ни връща като резултат IEnumerable<string>, което съхраняваме в променливата result (използвал съм var вместо IEnumerable<string> за да е по-четливо). Така се получава колекция, която съдържа в себе си string-а n на брой пъти.
3. Отпечатваме колекцията със String.Join(), като използваме "\n" за разделител, което C# го интерпретира като нов ред.
Като цяло този начин за решаване не е добър и е доста по-сложен като записване. По-добрият вариант остава да използваш цикъл.
Относно Console.WriteLine() и изпълнението му n на брой пъти - това е идеята при използване на цикъл. Може да се намерят заобиколни варианти, но едва ли ще са по-лесни или по-разбираеми.
PS: В това решение не повтаряме командата, а просто създаваме колекция от данни, която може да се изведе по друг начин на конзолата. Идеята ми беше, че всичко зависи от ситуацията. В конкретната задача има решение без да напишеш for-цикъл в Main() метода. За други задачи няма гаранции, че ще се намери такъв вариант. Като цяло циклите са един от основните елементи на програмирането и няма как да се справиш без тях. Дори и като използваш функции от сорта на Enumerable.Repeat() или String.Join() най-вероятно в изпълнението им си е заложен някой цикъл.
Надявам се информацията да ти е била от полза. Успех!
Друг вариант е да използваш методи, като сам си направиш такъв, който да изпълнява функцията.
Ето и пример със същата задача: http://pastebin.com/r9wmJnc4
Методите са тема, която е доста обширна, така че трудно ще ти го обясня тук, без да изпиша цял роман. Виж го и ако имаш конкретни въпроси, бих се радвал да ти отговоря. Но като цяло сам ще разбереш, че без цикли няма как да се направят нещата :)
Успех!
О, можеш да си сигурен, че ми е от полза. Харесва ми да научавам нови неща, а аз съм леко нетърпелив и непрекъснато си намирам неща из Гугъл, които вероятно ще учим чак на есен в следващия курс. А и е по-добре да знаеш алтернативата и да не ти трябва, отколкото обратното. :)
По същия начин с ровене из Гугъл открих например, че при пресмятане на изрази имаш различни начини да закръглиш едно число - нещо, което не се споменава в курса. Примерно числото 12.3456789 можеш да го закръглиш и с Math.Round, и с placeholder, или дори с Math.Truncate, като последното става дори още по-лесно с кастване, вместо с Math метод: кастваш го в инт и всичко след десетичната точка директно си заминава.
Това беше и причината да питам - хем ще науча нещо ново, хем не се знае кога и къде ще ми потрябва. ;)
А, този ти пост от 14:11:53 късно го видях. Тук има само едно нещо, което не ми е ясно. Това след запетаята:
действащ код ли е или си го направил за по-голяма яснота? Щот' т'ва "равно по-голямо" май трябваше да е обратното. И ако е код, не може ли просто да се напише така?
Това с => е lambda израз. () означава че не декларираме аргументи за Action-a.
За повече информация: http://www.dotnetperls.com/lambda и http://www.dotnetperls.com/action
Извинявай, че не се старая повече да ти ги обясня тези неща, но се изискват доста странични знания, които не се покриват в Programming Basics, за да ги разбереш добре. Като за начало, най-добре се фокусирай върху основите - след това ще стигнеш и до тази област :)