понеделник, 5 август 2013 г.

[Events]

Blog of Syssboxx

Тази категория ще е посветена на новини за различни събития или курсове,на които съм попаднала в интернет пространството и съм преценила за интересни.

събота, 3 август 2013 г.

[Debugging] Полезни техники

Blog of Syssboxx

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

Полезни клавишни комбинации

F5 - влизаме в режим на дебъгване

F5 + SHIFT - изход от режим на дебъгване

F9 - поставяне на точка на прекъсване (breakpoint) за проследяване на изпълнението й

F10 Step Over - изпълнява програмата в дебъг режим ред по ред, без да влиза в кода на методите.

F11 Step Into - изпълнява методите в програмата, след приключване на метода се връща до реда на извикването на метода.

F11 + SHIFT - връща ни до реда на извъкването на метода, преди да е плиключило изпълнението на метода.

F12 - отвежда ни до дефиницията на метод или клас. Чрез F10/F11 се връщаме обратно до текущния ред.

Полезни техники за дебъгване

Проследяване на стойност

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

Прекъсване при изпълнено условие / Conditional Breakpoint

Задаване на конкретно условие, при което програмата да спре изпълнението си.Опциите се появяват при задържан десен клавиш над точката на прекъсване. Това може да бъде полезно в цикли, когато кодът ни трябва да се изпълнвява например 100 пъти, а нас ни интересува единствено случая когато променливата е със стойност 50.Други полезни опции за избор на условие са : Location, HitCount, Filter, WhenHit, EditLabel. Последното позволява именуване на точките на прекъсване, което прави навигацията между тях много по-лесна.

Друг начин за изпъление на точно определен ред е задавайки опцията Set Next Statement с десен бутон върху променливата. След това вече можем да го изпълним чрез Go to Next Statement.

Immediate Window

Този прозорец ни позволява в движение да тестваме директно в него резултата от операции или присвояване.

Debug>Window>Immediate Window

Добавяне в списък за наблюдение / Add Watch, QuickWatch

Чрез Add Watch добавяме избраната променлива или израз в списъка от локални променливи в прозореца Watch, чрез което можем да следим как се променят стойностите й при изпълнението на програмата. тези стойности могат да бъдат и временно променени, за да се проследни изпълнението при определената стойност - например при i=3

Проследяване на извиканите методи / Call Stack

В дебъг режим ot меню Debug>Windows>Call Stacks можем да проследяваме всеки метод колко пъти е бил извикван.

Насоки

Следните насоки могат да подпомогнат по-лесното откриване на проблемите в кода

Възпроизвеждане на проблема, стъпката по стъпка, за да се установи на какво точно се дължи той. През колкото повече стъпки преминава дадена задача, толкова повече различни причини за грешка може да има.

Известно количество параноя при дебъгването не е излишно. Не трябва да се приема факата, че всичко работя така, както се очаква

Да се оправя само по един един проблем наведнъж.

Да се разучат възможностите на конкретния дебъгер.

Да се тества отново - когато си сигурен, че проблемът вече е отстранен ,тествай го отново при различни случай, за да се увериш, че наистина работи коректно.

още насоки за дебъгване

неделя, 7 юли 2013 г.

Алгоритми за сортиране

Blog of Syssboxx

Сортирането е едно от основните действия, извършвани с данните при обработката им.Подтикната от домашното за масиви, в което присъстваха доста задачи за сортиране на масиви чрез различни алгоритми, реших да потърся информация за всеки от тях. Тук предлагам кратко обобщение на някой от най-известните алгоритми за сортиране на масиви и имплементацията им. Постепенно ще допълвам статията с други, не чак толкова популярни алгоритми.

Selection Sort

Този алгоритъм за сортиране е известен на български още като сортиране чрез пряка селекция.

Принципът му на действие се състои в :

1.Намиране на най-малкият елемент от масива

2.Размяна на стойностите на този елемент с първия елемент от масива

3.Тези действия се повтарят докато се изчерпят всички елементи и масивът бъде подреден в нарастващ ред

Merge Sort

Merge Sort e "разделяй и владей алгоритъм, базиран на сравнение."

1.Първоначално неподредения масив се разделя на две части.

2.След това всяка от получените части се разделя още на два подмасива, докато останат само единични елементи.

3.Всеки два съседни елемента се сравняват и елементите в двойката се обединяват и пореждат във възходящ ред.(Merge)

4.След изчерпване на единичните елементи се преминава към сравняване с елементите от съседната двойка.Съседните подмасиви се сравняват, подреждат и обединяват докато не бъдат подредени всички подмасиви и остане само един масив - подреденият.

Quick Sort

Принципът на действие на бързото сортиране не състои в следното :

1.Избира се елемент спрямо който ще се сравняват останалите елементи в масива т. нар. "pivot". За такъв елемент може да бъде избран - първия или последния елемент, медианата или произволен елемент от масива.

2.Всеки елемент се сранява с "pivot" елемента и се пренаредждат, така че елементите,по-малки от него се поставят вляво от него, а по-големите - вдясно от него.

3.Тези действия се повтарят рекурсивно - избира се нов "pivot" елемент за всяка подредица и отново се сравняват останалите елементи с него.

4.Получените подредици се сливат и получаваме подредения масив.

source

Bubble Sort

Методът на мехурчето е един от най-известните алгоритмни за сортиране :

1.Той сравнява последователно всичка двойка съседни елементи една с друга.

2.Ако се окаже, че вторият елемент е по-голям местата им се разменят.

Въпреки, че методът на мехурчето е един от най-семплите методи за сортиране ефективността му бързо намалява при употреба в големи редици от данни. Не е ефективен и при редици, подредени в обратен ред.

Insertion Sort

Този метод е подобен на методът на мехурчето, но е по-ефективен и намалява броя на свавняванията.

1.Даден елемент се сравнява съсъс всички по-големи елементи, докато не се открие елемент, по-малък от него.По този начин при всяка проверка първия елемент от неподредения подмасив се прехвърля в подредения подмасив, и с вмъква на определеното му място.

За редици от n елемента ще са нужни n-1 pроверки, за да се сортира целия масив. Подходящ е за сортиране на редици до 30 елемента.

Алгоритмите в действие

И накрая ето еднa доста забавна поредица от видеа,която визиализира алгоритмите на сортиране чрез танци :)

Selection Sort

Merge Sort

Quick Sort

Bubble Sort

Insertion Sort


to be continued ...

понеделник, 3 юни 2013 г.

[C#] Conditional Statements

Blog of Syssboxx

Споделям решенията си на по-интересниte задачи от темата за условни конструкции

Convert Number To String

Write a program that converts a number in the range [0...999] to a text corresponding to its English pronunciation.

Exemples :

0 - > "zero"

273 - > "two hundred seventy-three"

400 - > "four hundred"

501 - > "five hundred and one"

711 - > "seven hundred and eleven"

source

Sum of subset

We are given 5 integer numbers. Write a program that checks if the sum of some subset of them is 0.

Example: 3, -2, 1, 1, 8 -> 1+1-2=0.

петък, 31 май 2013 г.

[C#] Console Input / Output

Blog of Syssboxx

Споделям решенията си на по-интересниte задачи от темата за вход и изход от конзолата

Редица на Фибоначи / Fibonacci Sequence

Write a program to print the first 100 members of the sequence of Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, …

source

Сума от числа с плаваща запетая с точност 0.001 / Sum of floating point numbers with accuracy 0.001

Write a program to calculate the sum (with accuracy of 0.001): 1 + 1/2 - 1/3 + 1/4 - 1/5 + ...

source

Game Falling Rocks

Implement the "Falling Rocks" game in the text console. A small dwarf stays at the bottom of the screen and can move left and right (by the arrows keys). A number of rocks of different sizes and forms constantly fall down and you need to avoid a crash.

Rocks are the symbols ^, @, *, &, +, %, $, #, !, ., ;, - distributed with appropriate density. The dwarf is (O).

Implement collision detection and scoring system.

Най-интересната програмка до момента.Целта на играта е джуджето да се спаси от падащите скали.

За символите на различите скали и техните цветове използвам 2 масива,от които на случаен принцип генерирам елемент с определен символ и цвят.След това отново чрез рандом генератор генерирам символите, които се появяват в игралното поле. Създавам обекти и свойства за джуджето и скалите, като движението на джуджето се управлява с клавишите за лява и дясна стрелка, а движението на скалите чрез създаване на нови обекти за новите координати,копиране на свойствата им в тях и изчистване на старите. Играта е предвидена с 5 живота. Съответно при сблъсък играчът губи един живот и се увеличава скоростта на падащите скали.От друга страна символът 'О' дава бонус и носи +1 допълнителен живот.Играта завършва при 0 останали живота (Game Over) или натрупани 50 бонуса (WIN).

сряда, 29 май 2013 г.

[C#] Primitive Data Types

Blog of Syssboxx

Споделям решенията си на по-интересните задачи от темата за примитивните типове данни.Задачите, които съм подбрала са :

Сравняване на числа с плаваща запетая с точност до 0.000001

Write a program that safely compares floating-point numbers with precision of 0.000001. Examples: (5.3 ; 6.01)  false; (5.00000001 ; 5.00000003)  true

source

Принтиране на равнобедрен триъгълник (съставен от символ за копирайт)

Write a program that prints an isosceles triangle of 9 copyright symbols ©.Note: the © symbol may be displayed incorrectly.

source

Размяна на стойности на две променливи

Declare two integer variables and assign them with 5 and 10 and after that exchange their values.

Проекти и домашни

Blog of Syssboxx

В тази категория ще слагам основно по-интересните задачи от домашните и проектите, правени по време на обучението ми в Академията на Телерик, заедно с разяснения по тях, където съм преценила,че има нужда. Проектите по програмиране ще са основно на C#,а по уеб дизайн - съответно с HTML,CSS и Javascript.