Софтуерно Инженерство
Loading...
+ Нов въпрос
radybt avatar radybt 3 Точки

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

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

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

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

0
Основи на програмирането 01/06/2017 16:44:09
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки
Best Answer

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

1
radybt avatar radybt 3 Точки

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

0
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Супер.

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

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

Това, което виждам като проблем в логиката е една излишна гимнастика кога да се 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