Loading...
Losko avatar Losko 69 Точки

Задача - 06. Triangle of 55 Stars

Здравейте. Имам проблем с тази задача. До колкото си спомням този код би трябвало да свърши работа, но ефекта е като все едно в скобите е само ("*").

        for (int i = 0; i < 55; i++)
        {
            Console.WriteLine("*", i);
        }

"Напишете C# конзолна програма, която отпечатва триъгълник от 55 звездички, разположени на 10 реда"

Тагове:
0
Programming Basics 18/10/2016 20:59:31
GeorgiItsev avatar GeorgiItsev 17 Точки

Почни да трупаш все едно трупаш сума в променлива 

Пример:

String star ="*";

Console.Write line(star);

 star +=star;

При първата инфлация на цикъла ще се отпечатат * при втората ще станат  "**" защото по този начин залепяш един стинг към друг

0
11/06/2016 18:40:29
Woofles avatar Woofles 7 Точки

Моля те кажи дали това ти е свършило работа понеже навсякъде чета че веднъж създаден по този начин стринг със съдържание, повторно не може да се презаписва (че и със съдържание надвишаващо началното като размер).

0
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Woofles,

Най-вероятно въпросът ти е свързан с факта, че string-овете в C# са immutable (тоест не могат да бъдат модифицирани). В случая обаче, принципът е друг.

Ако имаш string greetings = "Hello", това означава, че е заделено парче памет, което съдържа в себе си "Hello". Когато се опиташ да го промениш, например: greetings = greetings + " C#", това което се случва е, че на друго място в паметта се създава цялото "Hello C#", а после тази стойност се присвоява на променливата greetings. Предишната стойност "Hello" остава, докато Garbage Collector-a не я премахне от паметта. Затова съществува и StringBuilder, който е mutable и позволява да се извършват операции като добавяне на текст към string, без да се създават излишни копия. На този етап от обучението, string ти върши идеална работа и няма за какво да се притесняваш.

Относно star += star от примера на колегата - може да се адаптира към конкретната задача, но трябва да се замени със star += "*", защото в противен случай броят на звездите няма да нараства с една, а ще се удвоява при всяко изпълнение. Препоръчвам ти да разучиш new string() за конкретната задача (има доста примерни решения с него).

1
Impheatuss avatar Impheatuss 23 Точки

По принцип за 10 реда трябва да използваш for (int i = 1; i <=10; i++),а за другия ред намери в нета как се използва new String(); 

1
11/06/2016 19:19:49
ragingbull avatar ragingbull 5 Точки

Здравей,

Това е моето решение на задачата  TriangleOf55Stars:https://github.com/ggramov/First-steps-in-coding-Homework-SofUni/blob/master/TriangleOf55Stars.cs

i <11 ! Гледа максимума на ред не на целия низ.

Има много различни варианти как да го направиш стига да се разровиш в нета :)

Поздрави!

Ragingbull

 

0
11/06/2016 18:38:58
Losko avatar Losko 69 Точки

Сигурен съм, че имаше доста по елементарен начин без да се използват три цикъла.

0
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Здравей,

в конкретната задача, основното е да разбереш зависимостта, че на всеки ред има толкова звездички, колкото е номерът му (в случай, че броим от 1 до 10). Затова, можеш да използваш new string(<char>,<брой>), което ти връща цял string, който съдържа зададения символ определен брой пъти.

Например: new string( 'a', 10 ), ще ти върне стринг, който съдържа 10 пъти 'a' - "aaaaaaaaaa". (забележи, че стойностите от тип char ограждаме в единични кавички, а string-овете са в двойни - new string( "a", 10 ) няма да работи).

По този начин, ако имаш цикъл for(int i = 1; i<11; i++) като използваш new string( '*', i ), ще се получи желаният резултат.

new string() ще ти трябва и при всички задачи с рисуване в конзолата, които ще решавате по-нататък, така че е хубаво да свикнеш с използването му. Опитай се да решиш и последната задача Square of Stars, където също може да ти бъде полезен.

Успех!

Ето и примерно решение: http://pastebin.com/BENXY2rB

7
11/06/2016 18:57:07
Losko avatar Losko 69 Точки

Много благодаря. Хубаво е когато освен примен има и обяснение. 

1
Losko avatar Losko 69 Точки

С по-горе казаното на ум, 8-ма задача се решава много бързо. Благодаря отноов.

0
heilin90 avatar heilin90 69 Точки

Аз реших задачата с два  for цикъла - един за редовете и един за колоните, но определено вече ще се възползвам от new string-а.

using System;

class TriangleOf55Stars
{
    static void Main()
    {
        for (int row = 1; row <= 10; row++)
        {
            for (int col = 1; col <= row; col++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
        }
    }
}

0
t_zhelev avatar t_zhelev 24 Точки

За да работи твоя код трябва да изглежда по този начин

for (int i = 1; i < 11; i++)
            {
                 Console.WriteLine(new string('*', i));
            }
 

не ти работи понеже нещото което искаш да повториш е стринг (оградено е с 2 кавички), а това става само с char. За целта на Console.WriteLine подаваме изход един стринг който се състои от символа '*' повторен еди колко си пъти.

 

2
12/06/2016 01:12:20
Woofles avatar Woofles 7 Точки

В случая конкретна грешка май нямаш ами бъркаш функционалностите на string и WriteLine.

При WriteLine след запетаята параметърът ти играе роля просто на променлива която би се принтирала на мястото на {0} ако имаше такова между кавичките.

При string можеш да погледнеш това което ти трябва от втората презентация > слайд 27:

new string('*',i)   -   звездичката ти в случая се третира като единичен символ (повече от два ще ти дадат грешка) понеже кавичките са единични.

0
Losko avatar Losko 69 Точки

По-скоро грешката ми е, че подходих все едно цикля масив там си слагам [] и всичко работи както се очаква.... Опитвам се да решавам задачите по спомени от стари лекции които съм глдал и допускам глупави грешки като тази, когато се търси остатък от деление аз да деля числата ...... 

0
Osama avatar Osama 7 Точки

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Nums1To20
{
    class Program
    {
        static void Main(string[] args)
        {   
            for (int i = 1; i <= 10; i++)
            {
               string star = new string('*', i);
                Console.WriteLine(star);

            }
        }
    }
}
 

1
12/06/2016 23:53:04
borislav9212 avatar borislav9212 745 Точки

Здравей,

Може да използваш два вложени цикъла да обикаляш редовете и колоните. На row му казваш да върти до <= 10 , (тоест включително и десетата '*' ) а на col до row, ето така:

for (int row = 0; row <= 10; row++)
            {
                for (int col = 0; col < row; col++)
                {
                    Console.Write('*');
                }
                Console.WriteLine();
            }

0
Losko avatar Losko 69 Точки

using System;


class TriangleOf55Stars
{
    static void Main()
    {
        for (int i = 1; i <= 10; i++)
        {
            Console.WriteLine(new string('*',i));
        }
    }
}

Това ми е решението дава 100/100

Както споменавам по-горе. Веднага щом колегата ми написа да използвам " new string('*',i) " и задачата беше решена. :)

0
borislav9212 avatar borislav9212 745 Точки

Аз ти го казвам като решение, че и така също става. Катого  видиш този код някъде да знаеш за какво служи.

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Ами аз го написах с десет реда Console.Write() и пак дава 100/100

1
dakata avatar dakata 26 Точки

Ето едно решение с while (До достигане на заветните 55 звездички :-) :

        static void Main()
        {
            int i = 1;
            int count = 1;
            while (i <= 55)
            {
                Console.WriteLine($"{new string('*', count)}");
                count++;
                i += count;
            }
        }

Поздрави,

dakata

0
dakata avatar dakata 26 Точки

Предлагам и по-съкратен вариант:

        static void Main()
        {
            int i = 1, count = 1;
            while (i <= 55) Console.WriteLine($"{new string('*', count)}", i += count++);
        }

 

0
VladimirPetukhov avatar VladimirPetukhov 28 Точки

Може да се каже че има и по бърз начин

0
JivkoJelev avatar JivkoJelev 235 Точки

using System;
class Program
{
    static void Main()
    {
        for (int a = 1; a < 11; a++)
            Console.WriteLine(new string('*', a));
    }
}

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