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