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.

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

поред карта от тестето със случайна друга карта, а не винаги първата. Така<br />

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

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

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

карти). Втората идея изглежда по-надеждна. Нека я имплементираме.<br />

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

static void PerformSingleExchange(List cards, int index)<br />

{<br />

int randomIndex = rand.Next(1, cards.Count);<br />

Card firstCard = cards[index];<br />

Card randomCard = cards[randomIndex];<br />

cards[index] = randomCard;<br />

cards[randomIndex] = firstCard;<br />

}<br />

static void ShuffleCards(List cards)<br />

{<br />

for (int i = 0; i < cards.Count; i++)<br />

{<br />

PerformSingleExchange(cards, i);<br />

}<br />

}<br />

Стартираме програмата и получаваме много по-добро разбъркване на<br />

тестето от 52 карти, отколкото преди:<br />

(9 HEART)(5 CLUB)(3 CLUB)(7 SPADE)(6 CLUB)(5 SPADE)(6 HEART)(4<br />

CLUB)(10 CLUB)(3 SPADE)(K DIAMOND)(10 HEART)(8 CLUB)(A CLUB)(J<br />

DIAMOND)(K SPADE)(9 SPADE)(7 CLUB)(10 DIAMOND)(9 DIAMOND)(8 HEART)(6<br />

DIAMOND)(8 SPADE)(5 DIAMOND)(4 HEART)(10 SPADE)(J CLUB)(Q SPADE)(9<br />

CLUB)(J HEART)(K CLUB)(2 HEART)(7 HEART)(A HEART)(3 DIAMOND)(K<br />

HEART)(A SPADE)(8 DIAMOND)(4 SPADE)(3 HEART)(5 HEART)(Q HEART)(4<br />

DIAMOND)(2 SPADE)(A DIAMOND)(2 DIAMOND)(J SPADE)(7 DIAMOND)(Q<br />

DIAMOND)(2 CLUB)(6 SPADE)(Q<br />

CLUB)<br />

Изглежда, че най-сетне картите са подредени случайно и са различни при<br />

всяко изпълнение на програмата. Няма видими дефекти (например повтарящи<br />

се или липсващи карти или карти, които често запазват началната си<br />

позиция). Програмата работи бързо и не зависва. Изглежда сме се справили<br />

добре.<br />

Нека вземем другата примерна задача: сортиране на числа. Как да си<br />

направим сериозен тест за обичайния случай? Ами най-лесното е да<br />

генерираме поредица от 100 или дори 1000 случайни числа и да ги<br />

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

подредени по големина. Друг тест, който е удачен при сортирането на числа

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

Saved successfully!

Ooh no, something went wrong!