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

Проблем с задачата за " Квадрат от звездички " от първото домашно на курсът C#

Условие на задачата : 

Напишете C# конзолна програма, която прочита от конзолата цяло положително число N и отпечатва на конзолата квадрат от N звездички, като в примерите по-долу:

1.Направете конзолна C# програма. За да прочетете числото N (2 ≤ N ≤100), използвайте следния код:

static void Main(string[] args)

{

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

           

    // TODO: print the rectangle

}


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

 

вход

 изход

*****

*    *

*    *

*    *

*****


_________________________________________________________________________________________________________________________

Аз съм стигнал до едно положение . Ето моят код : 

 

 

using System;

namespace SquareOfStars
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());

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

         }
     }
}
_________________________________________________________________________________________________________________________Това отпечатва квадрат от звездички но вътрешността му също е запълнена с звездички .
Опитах да изчистя вътрешността на квадрата с този цикъл :

if (i==1 && i==n && j==1 && j==n)
{

Console.Write("*");

}

else 
{

Console.WriteLine(" ");

}

Но и това не ми донесе успех защото Console.WriteLine(); ми отпечатва нещатата на нов ред и не мога стукторирам квадрата ....
Моля покажете ми правилният начин за решаването на този проблем ! Благодаря :)

 

Тагове:
1
Programming Basics
MarinesBG:
Благодаря ви. Разбрах къде ми е грешката . Благодаря на всички които ми помогнаха !
Alex0101 avatar Alex0101 374 Точки

Само махни новия ред от else и го сложе на края на цикъла с редовете

if (i==1 && i==n && j==1 && j==n)
{

Console.Write("*");

}

else 
{

Console.Write(" ");

}

 

2
dZf1aeA-Efrona avatar dZf1aeA-Efrona 8 Точки

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

2
11/05/2016 13:57:44
MariyanMlechenkov avatar MariyanMlechenkov 29 Точки

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

            Console.WriteLine(new string('*', n));

            for (int i = 0; i < n-2; i++)
            {
                Console.Write("*");
                Console.Write(new string(' ',n-2));
                Console.Write("*");
                Console.WriteLine();
            }

            Console.WriteLine(new string('*', n));

4
11/05/2016 14:06:59
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Ето ти още едно примерче ....

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

            string firstRow = new string('*' , n);
            Console.WriteLine(firstRow);

            for(int i = 0; i < n- 2; i++)
            {
                string row = "*" + new string(' ' , n - 2) + "*";
                Console.WriteLine(row);
            }

            Console.WriteLine(firstRow);

 

2
borislav9212 avatar borislav9212 745 Точки

За черането на фигурки , първо трябва да видиш каква е формулата, което се вижда в примерите показани на задачата. След това избираш с new string или с loops да я накодиш. Дал съм ти примери и за двата варианта.

1
11/05/2016 15:15:46
kaloyannikov avatar kaloyannikov 531 Точки
 var n = int.Parse(Console.ReadLine());
   for (int i = 1; i <= n; i++)
   {
      if (i == 1 || i == n)
      {
           Console.WriteLine(new string('*', n));
           continue;
      }
        for (int j = 1; j <= n; j++)
        {
           if (j == 1 || j == n)
           {
               Console.Write("*");
               continue;
           }
           else {
               Console.Write(" ");
           }
        }
    Console.WriteLine();
    }                             

Ето с малки промени по твоя код :)

2
WhiteLord avatar WhiteLord 3 Точки

Аз разсъждавам по следния начин - фигурата можем да я направим string. Тоест, не трябва да използваме деклариране на индивидуални char star = '*'; char space = ' ';, а можем да подходим така:

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

int user = int.Parse(Console.ReadLine());
    

            Console.WriteLine(new string('*', user));
            for (int number = 1; number <= (user - 2); number++)
            {
                Console.WriteLine("*{0}*", new string(' ', user-2));
            }
            Console.WriteLine(new string('*', user));


Console.WriteLine(new string('*', user)); - тук използваме new string, избягвам броене позиция по позиция (1-user) , за да направим процеса по-лесен - резултатът е принтиране на "user" броя пъти звездичка.

После използваме *{0}*, за да го заместим с (' ', user-2) - тоест да се принтира празното място user-2 пъти, защото от ляво и дясно имаме звездички (те изяждат по 1 позиция, 1+1=2).

Последният ред е като първия.

 

3
kaloyannikov avatar kaloyannikov 531 Точки

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

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