25.07.2017 Views

Intro-CSharp-Book-v2015

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1076 Въведение в програмирането със C#<br />

}<br />

{<br />

stepsCount++;<br />

}<br />

stepChange = (stepChange + 1) % 2;<br />

direction = (direction + 1) % 4;<br />

}<br />

switch (direction)<br />

{<br />

case 0:<br />

positionY++;<br />

break;<br />

case 1:<br />

positionX--;<br />

break;<br />

case 2:<br />

positionY--;<br />

break;<br />

case 3:<br />

positionX++;<br />

break;<br />

}<br />

Тук е моментът да отбележим, че е голяма рядкост да съставим тялото<br />

на подобен цикъл от първия път, без да сгрешим. Вече знаем за<br />

правилото да пишем кода стъпка по стъпка, но за тялото на този цикъл то<br />

е трудно приложимо – нямаме ясно обособени подзадачи, които можем<br />

да тестваме независимо една от друга. Това не бива да ни притеснява –<br />

можем да използваме мощния debugger на Visual Studio за постъпково<br />

проследяване на изпълнението на кода. По този начин лесно ще открием<br />

къде е грешката, ако има такава.<br />

След като имаме добре измислена идея на алгоритъм (дори да не сме<br />

напълно сигурни, че така написаният код работи безпроблемно), остава да<br />

дадем начални стойности на вече дефинираните променливи и да<br />

отпечатаме получената след изпълнението на цикъла матрица.<br />

Ясно е, че броят на итерациите на цикъла е точно N 2 и затова инициализираме<br />

променливата count с тази стойност. От двата дадени примера и<br />

нашите собствени (написани на лист) примери определяме началната<br />

позиция в матрицата в зависимост от четността на нейната размерност:<br />

int positionX = n / 2;<br />

int positionY = n % 2 == 0 ? ((n / 2) - 1 : (n / 2));<br />

На останалите променливи даваме еднозначно следните стойности (вече<br />

обяснихме каква е тяхната семантика):

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!