Loading...
Nakoye avatar Nakoye -2 Точки

триъгълник от звездички

Здравейте, 

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

        {
            int n = 5;

            for (int i = 1; i <= n; i++)
            {
                var astrix = i;
                for (int j = 0; j < astrix; j++)
                {
                    Console.WriteLine("*");
                }
                Console.WriteLine("I");
            }

  Къде бъркам?

Тагове:
-1
Programming Basics 22/01/2016 21:21:23
Filkolev:
Правила на форума: https://softuni.bg/forum/217/Pravila
VanessaShopping avatar VanessaShopping 48 Точки
Best Answer

Здравей Nakoye
И аз като теб се затрудних да пресъздам коледното дърво , което Наков нарисува на една от лекциите :).
Ще ти дам няколко съвета ,които на мен ми помогнаха да го разбера, а не само да го направя.
Като за начало го нарисувах с химикал на лист хартия какво точно искам да направя. Нарисувах space-овете после звездичките, чертата и пак звездичките. Като за начало трябва да разбереш как точно се принтира на конзолата и започнеш да мислиш логически. Когато рисуваме на лист ,ние рисуваме на доло в повечето случаи, а конзолата рисува по редове, демек ако искаме да нарисуваме триъгълник на лист хартия първата линия я правим от горе на доло , после втората и накрая слагаме долната.Не мислим за разстоянията. И така ... сега да се върнем към дървото. За да направим лявата страна на дървото трябва да се замислим първо за space-овете и звездичките. Да кажем ,че ще правим дърво от 3 реда. На първият ред трябва да имаме 2 space-a.
2-ри ред space * . 3-ти ред ** . И сега като погледнем ,ще видим ,че на всеки ред space-овете намаляват с 1 а * се увеличават с 1. КАК да го направим ??? Правим главен цикъл , който ще брои редовете. Аз го наричам брояча на редове (или само брояч). Следователно ако ще правим дървото от 3 реда пишем за брояча for (int i = 1; i <= 3; i++). Така сега идва реда на space-овете. Целта ни е на всеки следващ ред те да намаляват с 1. За това пишем var space = n - i; for (int j = 0; j < space; j++), с което казваме: Искаме space-a да е ревен на общия брой на редовете ( в случея това е константата 3) минус "i" което е числото на самия брояч. При първия оборот на цикъла редовете са 3 а "i" е равно на 1. Резултата е 2. Сега в условието int j = 0; j < space; j++
space е равен на 2 и започва да върти цикъла. J = 0 , J по-малко ли е от space(2). Да! Тогава нарисувай ми един спейс. Сега програмата проверява пак цикъла като на J го увеличава с 1. J=1 по-малко ли е от space(2)
Ем пак е по-малко. Тогава рисувай и втори спейс. И вече в третата проверка J=2 което е равно на space и условието не се изпълнява , защото е казано на цикъла да се върти до тогава докато J е по-малък от space а не равен или по-голям :). Мисля ,че схващаш логиката на задачата. Няма да я обеснявам от-до ,че стана голям flood.
Ще завърша с няколко съвета които на мен ми помогнаха. 1-во като за начало си го нарисувай на хартия и помисли какво реално искаш да направиш. 2-ро Използвай Дебъгера. Помага адски много. 3-то прави го на стъпки. Пиши нещо, принтирай , после пак пиши и пак принтирай, т.е. както казват в повечето лекции Разбий главния проблем на малки проблемчета :). 4-то Ако има други ConsoleApplication в Solution-a дай Properties на Solution-a и още на първата страница му задай Current selection, за да не се чудиш защо ти се отваря първия Application вместо 3-тия който е дървото :)
 

2
StoykoMandzhukov avatar StoykoMandzhukov 11 Точки

На звездичката трябва да е Write, а не WriteLine. :) Добре ще е да го дебъгваш, за да видиш как рисува стъпка по стъпка и тогава ще ти е по-ясно. :) Успех! :)

1
20/01/2016 22:11:31
luki_strike avatar luki_strike 9 Точки

Когато имаш Line в края означава да премине на следващия ред.

0
annsta avatar annsta 305 Точки

Звездичките ти се подреждат една под друга, защото използваш WriteLine, така след всяка звездичка се отпечатва и нов ред. Ако сложиш само Write, звездичките ще се подредят една до друга. Първо трябва да нарисуваш целия ред на коледното дърво и когато вече нямаш какво повече да добавяш към реда, да сложиш WriteLine. Въвеждането на нова променлива astrix, която е равна на вече въведената променлива i и не прави нищо друго, ми се струва излишно. Цялото коледното дърво може да стане така: 

int n = int.Parse(Console.ReadLine());			
for (int i = 1; i <= n+1; i++)         
{
   for (int j = n-i; j >= 0; j--)
      Console.Write(" ");
   for (int j = 1; j < i; j++)
      Console.Write("*");
   Console.Write("|");
   for (int j = 1; j < i; j++)
      Console.Write("*");
   Console.WriteLine();
}

 

0
21/01/2016 11:54:04
Alexandur_C avatar Alexandur_C 4 Точки

Това е моят начин на решение:

using System;


namespace TriangleOf55Stars
{
    class TriangleOf55Stars
    {
        static void Main(string[] args)
        {
            for (int i = 1; i <= 10; i++)
                        //проверка на i и добавяне на 1 към резултата, така докато стане 10;
            {
                string asterisks = new string('*', i);      //
заменя "i" със символа звезда "*" ;
                Console.WriteLine(asterisks);            //отпечатва броя на "*" на нов ред ;
            }
        }
    }
}

 

Дано съм успял да ти помогна и да ти обеся добре. Лек ден.

 

1
Nakoye avatar Nakoye -2 Точки

namespace stars_beter
{
    class Program
    {
        static void Main(string[] args)
        {
            {
                int n = 10;
                for (int i = 0; i <= n; i++)
                {
                    string asterisks = new string('*', i);
                    string spaces = new string(' ', n - i);
                    Console.Write(asterisks);                   
                    Console.WriteLine(spaces);
                    }
            }


        }
    }
}

И ми го прие но в последствие пробвах и без Space и пак се получи като на Alexandur_C

Благодаря на всички!

0
Stoyan05 avatar Stoyan05 1 Точки

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

Някой знае ли къде и как  се качват домашните и дали се качват още от самото начало на Основи на Програмирането или на по-късен етап?

Поздрави !

 

0
mintmish avatar mintmish 0 Точки

Stoyan05, домашните се качват на страницата на твоя курс след преподаването на определената лекция, като там е упоменато и какъв е срокът за предаване на домашното.Виж какво пише в "Често задавани въпроси": "В общия случай предаването на домашни става активно след като мине дадената лекция от курса. Често обаче администраторите на курса активират тази възможност и предварително.

Ако темата не е минала, но имаш желание да качиш работата си предварително, свържи се с екипа на университета или с лекторите на курса и ги помоли да активират тази възможност, или пък просто изчакай да бъде активирано предаването на домашни." Поздрави ;)

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