Multidimensional Arrays - 1 d) Spiral


1

Зравейте, пиша във форума, защото колкото и да се опитвам да си намеря грешката някъде я изпускам и не мога да си оправя програмта. Става дума за 1 зад варианта със звездичка. Логиката на програмата е като тази, която беше показана в едно от видеата. От дебъгването, което правя установявам, че грешката е когато посоката става up, но колкото и да проверявам значиците на колоните и на редовете не ми се получава. Много ще съм благодарна, ако получа малко помощ.

http://pastebin.com/5f9Ch2FQ




Отговори



2
Сложи линк към кода си в pastebin.

от hrist0.stoichev (1121 точки)


0
http://pastebin.com/5f9Ch2FQ



1

Здрасти, Неда.

Аз решавах тази задача с directions.

Мога да ти пусна кода за да погледнеш //solution d и да откриеш грешката си. 

http://pastebin.com/dbHQRpuh ето решението на всички подзадачи. Няма нужда да проверяваш 

(direction == "up" && (currentRow > 0 || spiral[currentRow, currentColumn] != 0))

можеш да кажеш currentRow == 0, || spiral[currentRow - 1, currentColumn] !=0

същото нещо за всички посоки съобразено с това къде се намираш.

и после вътре няма нужда да правиш  currentRow--;   currentColumn--; , а просто сменяш посоката. 

Разгледай кода, успех.




0
ако имаш въпрос пиши отново.



5

Здравей, оправих ти кода и съм го форматирал малко - тук.

Трябваше да коригирам

else if (direction == "up" && (currentRow > 0 || spiral[currentRow,currentColumn]!=0))

            {
                currentRow--;
на

else if (direction == "up" && (currentRow < 0 || spiral[currentRow,currentColumn]!=0))

            {
                currentRow++;
и   
else if (direction == "left" && (currentColumn > 0 || spiral[currentRow, currentColumn] != 0))
на   else if (direction == "left" && (currentColumn < 0 || spiral[currentRow, currentColumn] != 0))
 
Поздрави!

от wooden_jesus (2128 точки)


0
Опаа, изпревари ме :)


0
Ето и от мен корекциите. http://pastebin.com/jSHg4Yrk Сложил съм коментари с допуснатите грешки, които бяха на редове: 39, 42, 44 и 48. Колежке, съветът ми е, когато дебъгвате, да си представяте нещата, в този случай, например, като е изпълнена последната стъпка по посока надясно е редно да се върнат колоните с 1, защото вече сте "излезнала" от матрицата и да намалите редовете с един, за да започне изписването от горния. Успех и късмет за напред. Също, колежке, благодаря Ви за възможността, най-сетне, да разбера как се решава тази задача по културен начин, понеже я бях решил доста олигофренски още от домашното по цикли.

от miroslav.tsakov (1476 точки)



2

Имаш малко дребни грешки, ето така трябва да е:

      else if (direction == "right" && (currentColumn >= n || spiral[currentRow, currentColumn] != 0))
            {
                currentColumn--;
                currentRow--;
                direction = "up";
            }
            else if (direction == "up" && (currentRow < 0 || spiral[currentRow, currentColumn] != 0))
            {
                currentRow++;
                currentColumn--;
                direction = "left";
            }
            else if (direction == "left" && (currentColumn <0 || spiral[currentRow, currentColumn] != 0))
            {
                currentColumn++;
                currentRow++;
                direction = "down";
            }



1

Ето коригирания код тук.


от gradev (1661 точки)


0
for (int k = 0; k < n; k++) { for (int l = 0; l < n; l++) { spiral[k,l] = 0;} } Това да знаеш, че е напълно излишно. При самото инициализиране на матрицата всички нейни членове са си по defaut стойности. Ако беше стринг, щяха да са null.

от wooden_jesus (2128 точки)


0
Иха тръгна! :D Много благодаря за помощта!!!