Софтуерно Инженерство
Loading...
VladoGenov avatar VladoGenov 45 Точки

First-Steps-in-Coding-Exercises 8* - Квадрат от звездички (Rectangle Area/Square of Stars in Judge)

Здравейте, колеги! Намирам решение на задача 8* Квадрат от звездички. Работи във Visual studio, но Judge системата не я приема и ми дава само 0-точки.

Правих проверката с безкраен цикъл, без цикъл само с if, но системата не я приема в нито един от случаите. Какъв може да е проблема?

Ето и кода:

        static void Main(string[] args)
        {
            var N=1;
            while (true)
            {
                Console.Write("Enter N (2<=N<=100): ");
                N = int.Parse(Console.ReadLine());
                if (N >= 2 && N <= 100)
                {
                    break;
                }
            }
            for (int i = 1; i <= N; i++)
                {
                    Console.Write("*");
                    for (int j = 2; j <= (N - 1); j++)
                    {
                        if (i == 1 || i == N)
                        {
                            Console.Write("*");
                        }
                        else
                        {
                            Console.Write(" ");
                        }
                    }
                    Console.WriteLine("*");
            }
        }

Също и с вариант без цикъл while за проверка на входа:

static void Main(string[] args)
        {
            Console.Write("Enter N (2<=N<=100): ");
            var N = int.Parse(Console.ReadLine());
            if (N >= 2 && N <= 100)
            {

            ....................

            }

         }

Judge системата не приема нито един от двата ми варианта.

Със сигурност има и други решения, но в условието се казва: "Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли."

Къде би могъл да е проблема, при положение, че кодът е работещ?

Благодаря предварително.

 

2
Programming Basics 01/03/2016 14:47:46
MorganFreeFarm avatar MorganFreeFarm 51 Точки

Няма проблем с имената на задачите. Rectangle area e 7-ма задача от упражнението, докато Square of Stars e последната 8 задача със звездичка. Грешката идва от там, че ако погледнеш задачата в judge-а тя е "trim" (виж къде го пише), тоест проверява целия код, докато другите задачи са "Numbers check", тоест проверява само сметките и няма значение дали си написал някакъв допълнителен текст.

  Моето решение за Square of stars е малко по различно:

using System;

class SquareofStars
{
    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        string stars = new string('*', n);
        Console.WriteLine(stars);

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

 

Поздрави!

4
VladoGenov avatar VladoGenov 45 Точки

Благодаря ти! Това със "trim" и "Numbers check" не го знаех, а е важно. Беше ми много полезно, че го сподели.

Иначе относно решението със стринг ми мина, но го игнорирах, понеже в условието се казваше да използваме "for-цикли" (в мн.ч.) т.е. повече от един цикъл и затова реших да го направя с 2 цикъла вместо със стринг.

Но ще изпробвам и твоят код, за да тествам time-a как е.

Благодаря ти отново, колега!

3
MorganFreeFarm avatar MorganFreeFarm 51 Точки

Да, може би си прав : )) И аз ще помисля над решение с повече от един цикъл : )) Но, като се замисля ти си използвал оператор &&, който се предполага също да не сме взимали :D

 

2
01/03/2016 01:30:22
VladoGenov avatar VladoGenov 45 Точки

При твоето решение с 1 цикъл и стринг, времето се оказа по-добро :) Time: 0.013 s
Но открих един пропуск спрямо условието - липсва проверката N (2 ≤ N ≤100)
И Judge-а обаче не хваща пропуска smiley

1
moholovka avatar moholovka 169 Точки

Струва ми се че бъркаш сериозно в четенето на условията, не мога да го видя като условие но най-вероятно това N е страната на квадрата. Това че е указано че ще е от 2 до 100 не е необходимо да го проверяваш, а служи като информация. Относно аупута - печата се само тази информация която ни изискват, дори един спейс да има повече ще го отчете като грешен резултат. В твоят случай програмата очаква резултат квадрат от четири звезди, а получава "Enter number......" и четири звезди.

-1
MorganFreeFarm avatar MorganFreeFarm 51 Точки

 И аз мисля, че нямаше такова условие, ще го проверя по-късно.

0
VladoGenov avatar VladoGenov 45 Точки

Благодаря колега (moholovka), но още в първите 2 отговора писахме за същият проблем, и че той е открит.

Открих го след като погледнах в "Details" - очакваният изход беше "***" а моят даваше "Enter N (2<=N<=100): ***", от което рабрах за проблемния оператор и писах за това, но колегата (MorganFreeFarm) даде полезният отговор за проблема, относно "Checker-а" за "trim" и "Numbers check".

Що се отнася за условието, ето го:

8.* Квадрат от звездички

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

--- примрите за вх./изх. ...

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

2. Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли. Потърсете информация в Интернет.

За проверката на N може да се приеме явно и едното и другото (коректност със и без проверка), тъй като и Judge-системата приема задачата със и без проверката на N и дава и за двете 100 точки.

Добре ще е някой от преподавателите в SoftUNI да поясни дали в условията на подобни задачи и така зададено условие, подобна проверка ще се изисква или е само информативно, за да знаем за напред.

0
01/03/2016 12:25:34
moholovka avatar moholovka 169 Точки

Ами след като не ти се изисква някакъв специален резултат при невалиден вход (примерно да отпечаташ "wrong number") не е необходимо да правиш проверка. То в този случай не би било възможно да върнеш квадрат с една звездичка или с -5. Освен това функцията trim, и Number check не правят точно това което колегата е написал, метода trim зачиства whitespace пред и след стринга, можеш да видиш и че има задачи с trimEnd което чисти отзад, но САМО спейсове, ако изпринтиш нещо друго ще влезне към аутпута. 

0
gabi.ivanova avatar gabi.ivanova 370 Точки

 Ако в условието на задачата е казано, че N  е между 2 и 100, то входните данни за тест от системата може би ще са в такъв диапазон. Поне за изпита е така.
На изпита към задачите си пише: The input data will always be valid and in the format described. There is no need to check it. Ако не го пише в задачата проверката не е излишна.

 

1
01/03/2016 13:41:18
krokicha avatar krokicha 76 Точки

Реда 

stars = new string('*', n);

е излишен, защото по-горе в

string stars = new string('*', n);

вече си дал тази стойност на stars.

2
VladoGenov avatar VladoGenov 45 Точки

Благодаря, (gabi.ivanova) !

"... There is no need to check it. Ако не го пише в задачата проверката не е излишна."

Това беше полезно уточнение относно условието на задачите - за необходимост или не от проверка!

0
gabi.ivanova avatar gabi.ivanova 370 Точки

Най-общо гледай дали в условието пише, че няма нужда от проверка на данните. Ако не го пише, прави проверка защото може това да е уловката в задачата.

1
Alezzi1 avatar Alezzi1 -1 Точки

Явно в Judge'а не са зададени всички параметри на задачата, понеже и при мен мина с още по просто решение от типа на:

            var n = int.Parse(Console.ReadLine());
            string fullRow = new String('*', n);
            string space = new String(' ',(n - 2));
            Console.WriteLine(fullRow);
            for (int i = 2; i < n; i++)
            {
                Console.WriteLine("*{0}*",space);
            }
            Console.WriteLine(fullRow);

 

P.S. Дано така да се случва и на изпитите :D

0
Simeon_Simeonov avatar Simeon_Simeonov 3 Точки

stars = new string('*', n);  - това необходимо ли е ? По нагогре си инициализирал "stars" при декларацията.

0
VladoGenov avatar VladoGenov 45 Точки

Да, реда < stars = new string('*', n); > не е необходим, понеже съвпада напълно с първия ред звездички, който вече е зададен по-горе като < string stars = new string('*', n); > и не променя стойността си в хода на програмата. С него и без него не се променя решението, само ако е без реда се съкращава времето за изпълнение на програмата (избягва се повторение на код), по-оптимизирана е и особено ако кода на програмата е дълъг, подобни оптимизации биха оказали влияние на времето за изпълнение.

0
Velkata avatar Velkata 3 Точки

Здравейте колеги, и аз имам проблем със същата задача. Прочетох коментарите, виждам че решенията ви тръгват, но какво трябва да добавя на моя код : http://pastebin.com/8xicAG6S , за да коригирам "квадрата". Разбирам for циклите , но чертаенето на фигурки ми е трудно. Ако някой може да даде идея какво да добавя с малко пояснение. Благодаря предварително!

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Ами пропуснал си шпацията след звездичката:
Console.Write("* ");

0
VladoGenov avatar VladoGenov 45 Точки

Във вътрешния цикъл постави проверка - ако печаташ първи и последен ред - печатай звездички "*", ако печаташ от 2-ри до предпоследен ред - печатай спейс " ".
Извън вътрешния цикъл (j), във външния (i) в началото и в края на цикъла отпечатай по една звездичка "*", защото първата и последната колонка са еднакви във всеки ред. В този случай вътрешния цикъл (j) трябва да започва от 2-я до предпоследния елемент.
Ето пример само за циклите:

for (int i = 1; i <= N; i++)
                {
                    Console.Write("*");
                    for (int j = 2; j <= (N - 1); j++)
                    {
                        if (i == 1 || i == N)
                        {
                            Console.Write("*");
                        }
                        else
                        {
                            Console.Write(" ");
                        }
                    }
                    Console.WriteLine("*");
                }

За всеки случай, пълният ми код с FOR-цикли е тук: http://pastebin.com/KujNGUUq
а кода с решение със СТРИНГ е тук: http://pastebin.com/EpBiJ9MN
Дано да ти е било полезно.
Благословения!

1
VladoGenov avatar VladoGenov 45 Точки

Шпацията след звездичката не решава нищо, просто така се получава същият "плътен" квадрат, само че с по един интервал между всяка звездичка.
Трябва да се отпечата само рамката на квадрата, вътре да е празен - с интервали (спейс, шпация ...)

1
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Май говорим за различни задачи, тъй като не е даден линк. Аз гледам тази: https://judge.softuni.bg/Contests/Practice/Index/155#2

0
VladoGenov avatar VladoGenov 45 Точки

Да, така е, за друга задача става въпрос, за тази: https://judge.softuni.bg/Contests/Practice/Index/150#5

задача 8-ма, колегата я е записал в името: _08_SquareOfStars

1
Velkata avatar Velkata 3 Точки

Благодаря колеги за помоща, ориентирах се вече за решението на задачата, явно трябва да гледам повече видео уроци и да чета повече от книгата на Наков!

1
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

И най-вече да пишеш повече код.

2
VladoGenov avatar VladoGenov 45 Точки

Ще се справиш Velka ( Velkata ), щом си започнал и имаш желание. Ще помагаме с каквото и когато е възможно, с четене, слушане и писане на повечко код, с питане и помощ от колеги и приятели ще се справиш!
Най-важното е да не се отказваш!

1
31/05/2016 23:56:18
IvanPeshov avatar IvanPeshov 0 Точки

Благодаря за поста , при мен се получи задачата в Judga на 100/100 само с твоето решение :)

0