forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Перетасовка колоды(код готов, есть проблемы) (http://forum.boolean.name/showthread.php?t=9311)

KeipL 03.10.2009 13:10

Перетасовка колоды(код готов, есть проблемы)
 
Доброго времени суток!
В данный момент пишу пасьянс Медичи на МП.
Столкнулся с тем, что не знаю алгоритма перемешивания(!), а действительно зачам перемешивать если всю жизнь решал задачки на сортировку?..

Полазив в интернете таи нашел плодотворную статью.
{На данном этапе задача программы - только сортировать колоду}

Вот код.

Код:

Program Medichy;
var
        i,z:integer;
        s,o:string;
        k:array[1..37] of string;
Begin
randomize;
//наполнение массива
k[1]:='6 пик';
k[2]:='7 пик';
k[3]:='8 пик';
k[4]:='9 пик';
k[5]:='10 пик';
k[6]:='валет пик';
k[7]:='дама пик';
k[8]:='король пик';
k[9]:='туз пик';

k[10]:='6 треф';
k[11]:='7 треф';
k[12]:='8 треф';
k[13]:='9 треф';
k[14]:='10 треф';
k[15]:='валет треф';
k[16]:='дама треф';
k[17]:='король треф';
k[18]:='туз треф';

k[19]:='6 бубен';
k[20]:='7 бубен';
k[21]:='8 бубен';
k[22]:='9 бубен';
k[23]:='10 бубен';
k[24]:='валет бубен';
k[25]:='дама бубен';
k[26]:='король бубен';
k[27]:='туз бубен';

k[28]:='6 червей';
k[29]:='7 червей';
k[30]:='8 червей';
k[31]:='9 червей';
k[32]:='10 червей';
k[33]:='валет червей';
k[34]:='дама червей';
k[35]:='король червей';
k[36]:='туз червей';
//проверка
Showcanvas;
        setcolor(15,99,10);
        drawtext('ccc', 10, 10);
        Repaint;
//"сортировка"       
for i:=1 to 36 do
begin
        z:=random(36);
        o:=k[i];
        k[i]:=k[z];
        k[z]:=o;
end;
//вывод
for i:=1 to 36 do
begin
        setcolor(00,00,00);
        drawtext(k[i], 10, i*10);
end;

Repaint;
 Delay(5000);
End.

Код рабочий.
Проблема:
в 1 из 10 запусков мидлета - просто белый экран
в 3 из 10 запусков мидлета -белый экран и надпись "ссс"
остальное - работающие правильно случаи.
Внимание вопрос:
Почему мидлет так выкаблучивается? И как его отучить?).

Dj_Alex 03.10.2009 13:24

Ответ: Перетасовка колоды(код готов, есть проблемы)
 
random(36) выдает случайные значения от 0 до 35, т.к. 0 элемента в массиве нет, то мидлет виснет.
правильнее будет random(36)+1

KeipL 03.10.2009 13:36

Ответ: Перетасовка колоды(код готов, есть проблемы)
 
Благодарю, совсем уже в Универе с С++ замотался, паскаль подзабываю уже...


Часовой пояс GMT +4, время: 13:47.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot