Loading...
rado84 avatar rado84 1 Точки

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)); }
        }

Трябва да излязат така:

Тагове:
0
Programming Basics
Plamen27 avatar Plamen27 599 Точки

Фикс: 

   var n = int.Parse(Console.ReadLine());

            for (int red = 1; red <= n; red++)
            {
                Console.Write("*");
                for (int kol = 1; kol < n; kol++)
                {
                    Console.Write(" *");
                }
                Console.WriteLine();
            }
 

1
30/06/2016 21:43:32
WaLkZ avatar WaLkZ 9 Точки

Или

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < 2 * n - 1; j++)
                {
                    Console.Write((j % 2 == 0) ? '*' : ' ');
                }

                Console.WriteLine();
            }

 

1
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки
int n = int.Parse(Console.ReadLine());

            for (int i = 0; i < n; i++)
            {
                for (int k = 0; k < n; k++)
                {
                    Console.Write("* ");
                }
                Console.WriteLine();
            }

 

2
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Ето и един по-различен начин да се реши (ще се опитам и да го обясня):

int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
{
    Console.WriteLine(new string('o', n).Replace("o","* ").Substring(0, 2*n-1));
}

1. С new string('o', n) създаваме string, който съдържа в себе си символа 'o', n на брой пъти.

2. С .Replace("o", "* ") поставяме "* " на мястото на всеки символ "o".

3. Крайното .Substring(0, 2*n-1) е по желание. То премахва излишния интервал след последната "*". Принципът му на работа е: задаваш начало (в случая 0) и брой символи (в случая 2*n-1), като то ти връща зададения брой символи, взети от зададеното начало. Например: "Good Morning".Substring(0,4) връща "Good".

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

Успех!

3
rado84 avatar rado84 1 Точки

Мерси, Краси. Т'ва изглежда интересно и ще го разцъкам допълнително, за да го доразбера. Обяснението ти е много добро, но аз най-добре запомням, когато го run-на и сам видя какво точно се случва. :)

А един въпрос извън задачата, просто от любопитство: да речем, че не искаш да ползваш цикъл, за да повториш дадена команда. Има ли някакъв начин (команда), с който да укажеш на конзолата, че искаш да повтори Console.WriteLine("...."); 4 пъти (примерно)?

0
01/07/2016 13:26:31
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Накратко: не се сещам за такъв вариант, но има някои заобиколни начини (които като цяло не са добра идея).

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

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        var result = Enumerable.Repeat(new string('o', n).Replace("o", "* ").Substring(0, 2 * n - 1), n);
        Console.WriteLine(string.Join("\n", result));
    }
}

Разликите са:

1. Добавяме using System.Linq; което ни трябва за да използваме някои от методите за това решение.

2. Използваме Enumerable.Repeat(), като подаваме за аргументи нашия стринг и брой пъти, който искаме да се съдържа. То ни връща като резултат IEnumerable<string>, което съхраняваме в променливата result (използвал съм var вместо IEnumerable<string> за да е по-четливо). Така се получава колекция, която съдържа в себе си stringn на брой пъти.

3. Отпечатваме колекцията със String.Join(), като използваме "\n" за разделител, което C# го интерпретира като нов ред.

Като цяло този начин за решаване не е добър и е доста по-сложен като записване. По-добрият вариант остава да използваш цикъл.

Относно Console.WriteLine() и изпълнението му n на брой пъти - това е идеята при използване на цикъл. Може да се намерят заобиколни варианти, но едва ли ще са по-лесни или по-разбираеми.

PS: В това решение не повтаряме командата, а просто създаваме колекция от данни, която може да се изведе по друг начин на конзолата. Идеята ми беше, че всичко зависи от ситуацията. В конкретната задача има решение без да напишеш for-цикъл в Main() метода. За други задачи няма гаранции, че ще се намери такъв вариант. Като цяло циклите са един от основните елементи на програмирането и няма как да се справиш без тях. Дори и като използваш функции от сорта на Enumerable.Repeat() или String.Join() най-вероятно в изпълнението им си е заложен някой цикъл.

Надявам се информацията да ти е била от полза. Успех!

2
01/07/2016 13:56:50
KrasimirPetkov avatar KrasimirPetkov 328 Точки

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

Ето и пример със същата задача: http://pastebin.com/r9wmJnc4

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

Успех!

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