25.07.2017 Views

Intro-CSharp-Book-v2015

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Пишете стъпка по стъпка. Първо направете четенето на входните данни.<br />

(В случая входът е от файл и затова можете да започнете от него. Ако<br />

входът беше от конзолата, трябваше да го оставите за най-накрая).<br />

Реализирайте отпечатване на прочетените данни. Реализирайте<br />

алгоритъма за най-къс път. Ако можете, разбийте реализацията на<br />

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

най-късия път без самия път (като списък от кръстовища), защото е полесно.<br />

Реализирайте след това и намирането на самия най-къс път.<br />

Помислете какво става, ако има няколко най-къси пътя с еднаква<br />

дължина. Накрая реализирайте отпечатването на резултатите, както се<br />

изисква в условието на задачата.<br />

Тествайте решението си! Пробвайте с празна карта. Пробвайте с карта<br />

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

кръстовища. Пробвайте с голяма карта (1 000 кръстовища и 5 000<br />

улици). Можете да си генерирате такава с няколко реда програмка. За<br />

имената на кръстовищата трябва да използвате string, а не char, нали?<br />

Иначе как ще имате 1 000 кръстовища? Работи ли вашето решение<br />

бързо? А работи ли вярно?<br />

Внимавайте с входните и изходните данни. Спазвайте формата, който е<br />

указан в условието на задачата!<br />

4. Ако не сте много силни в аналитичната геометрия, едва ли ще измислите<br />

решение на задачата сами. Опитайте търсене в Интернет по ключовите<br />

думи "convex hull algorithm". Знаейки, че оградата, която трябва да<br />

построим се нарича "изпъкнала обвивка" (convex hull) на множество<br />

точки в равнината, ще намерим стотици статии в Интернет по темата, в<br />

някои дори има сорс код на C#. Не преписвайте грешките на другите и<br />

особено сорс кода! Мислете! Проучете как работи алгоритъмът и си го<br />

реализирайте сами.<br />

Проверете дали алгоритъмът е верен. Пробвайте различни примери<br />

(първо на хартия). Какво става, ако има няколко точки на една линия<br />

върху изпъкналата обвивка? Трябва ли да включвате всяка от тях?<br />

Помислете какво става, ако има няколко изпъкнали обвивки. От коя<br />

точка започвате? По часовниковата стрелка ли се движите или обратното?<br />

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

точките в резултата?<br />

В каква структура от данни ще пазите точките? В каква структура ще<br />

пазите изпъкналата обвивка?<br />

Помислете за ефективността. Ще работи ли вашият алгоритъм за 1 000<br />

точки?<br />

Пишете стъпка по стъпка. Първо направете четенето на входните данни.<br />

Реализирайте отпечатване на прочетените точки. Реализирайте<br />

алгоритъма за изпъкнала обвивка. Ако можете, разбийте реализацията

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

Saved successfully!

Ooh no, something went wrong!