Loading...
radybt avatar radybt 9 Точки

[Programming Basics] 01. X задача

Никога не ме е бивало в тея рисунки и се заинатих да я реша тая задача сам. Подозирам, че съм написал поне 2 пъти повече код отколкото е необходимо. 100/100 е, но бих се радвал да дадете съвети, мнения, решения и тн. Кои неща са ми излишни?

Задачата с рисуването на C# Baisics изпита е единствената която не можах да реша или по-скоро не ми стигна времето да мисля сложната си логика :D за това искам да го оправя това. 

Кода: https://pastebin.com/eTwaPNu5

0
Programming Basics 01/06/2017 16:44:09
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Няма проблем, ще дадем мнение, но за целта ще ни трябва да видим кода ти. Би ли могъл да го качиш в https://pastebin.com/?

1
radybt avatar radybt 9 Точки

Опа, пейстнах го точно и нещо съм се разсеял  - редактирах го! 

0
RoYaL avatar RoYaL Trainer 6849 Точки

Супер.

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

Имаш три "шаблона" - първият е свиването на хиксчетата едно към друго от най-раздалечени до един до друг. Вторият е хиксче в средата и третият е огледален на първия шаблон.

Това, което виждам като проблем в логиката е една излишна гимнастика кога да се break-не цикъла. Първо - нямаш нужда да рисуваш първия и последния ред по отделно.

Първия ред е съставен от 0(нула) празни пространства от ляво и от дясно (тези от дясно нямат значение, не знам защо ги рисуваш); две хиксчета и останалото между двете хиксчета - празни пространства. Колко са тези пространства между двете хиксчета? Ами ако приемем, че всички символи на реда са N (колкото е входа), то без двете хиксчета - пространствата по средата са N-броя_хиксчета=N-2

Та, аз по-скоро бих подходил така:

1. Нека празните пространства от ляво първоначално са НУЛА

2. Нека празните пространства между хиксчетата първоначално са N-2

3. Цикъл за първата половина - т.е. от 0 до половината от N (N/2). За всяко завъртане:

    3.1. Изпринтирай празни пространства от ляво, хиксче, празни пространства по средата, хиксче

    3.2. Намали тези в средата с две

    3.3. Увеличи тези от ляво с едно

Тук ти си подходил по същия начин. Това, което ти "вдига" редовете код е принтирането на отделните компоненти с отделни Console.Write-ове. Учил ли си placeholders?

4. Изпринтирай статичния ред с хиксче в средата (n/2 спейсове и хиксче) като при теб.

5. Цикъл за втората половина (0 ... N/2). За всяко завъртане:

    5.1. Върни обратно състоянието на броячите - увеличи пространствата по средата с 2 (за да се раздалечи десния хикс)

    5.2. Намали външните пространства с едно (за да се раздалечи и левия хикс)

    5.3. Изпринтирай празни пространства от ляво, хиксче, празни пространства по средата, хиксче

 

Накрая ще се случи нещо такова: https://pastebin.com/QxeMn6hZ

 

0
spzvtbg avatar spzvtbg 581 Точки

namespace _01.X1
{
    using System;

    public class X1
    {
        public static void Main()
        {
            int XRepetingTimes = int.Parse(Console.ReadLine());

            for (int i = -(XRepetingTimes / 2); i <= XRepetingTimes / 2; i++)
            {
               
                if (i == 0)
                {
                    Console.WriteLine("{0}x", new string(' ', XRepetingTimes / 2));
                }
                else
                {
                    Console.WriteLine("{0}x{1}x",

                   new string(' ', Math.Abs(XRepetingTimes / 2 - Math.Abs(i))),

                   new string(' ', Math.Abs(i * 2) - 1));
                }
            }
        }
    }
}

 

ето и едно малко по различно от мен

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