Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 16


k0:=0; n:=High(a);

for i:=0 to n do

if a[i]=0 then begin k0:=l;

break;

end;

for i:=0 to n-1 do begin

if a[i]=0 then continue; for j:=i+l to n do

if a[i]=a[j] then begin a[i]:=0;

break; end; end ;

m:=0; for i:=0 to n do

if a[i]<>0 then inc(m);

difference:= m+k0;

end;

begin

write(' Количество разных чисел в этом массиве равно ');

write(difference(a5)};

readln;

end.

Задание 4.10. Перемешивание "колоды карт"

Практически все карточные игры нуждаются в процедуре тасования колоды карт.

Совет 1 (общий)

Для кодировки колоды карт в памяти ЭВМ можно предложить, как минимум, два варианта. Например, можно связать с каждой картой числовой номер из диапазона [0,35] (или [0,51]). Предварительно надо договориться о порядке следования мастей (например, пики, трефы, бубны, черви) и карт внутри каждой масти (например, по силе карты: 6, 7, 8, 9, 10, валет, дама, король, туз). Вместо числового массива можно использовать строковый массив, в котором каждая карта представлена двух-, трехсимвольным обозначением (например, "6Т" — шестерка треф, "104" — десятка червей, "ТП" — туз пик).

Совет 2 (общий)

Одна из наиболее простых идей перемешивания элементов массива заключается в использовании датчика случайных чисел. .По двум очередным случайным числам (i, j) i-й и j-й элементы массива меняются местами. Если эту процедуру повторять достаточно долго, например 10 000 раз, то "колода карт" окажется хорошо перетасованной.

Совет 3 (общий)

Процедуру перемешивания можно ускорить, если в теле цикла обращаться к датчику случайных чисел не два раза, а один, и менять выпавшую i-ю "карту", например с первой или последней.

Совет 4 (общий)

Чтобы избежать повторения расклада при повторных играх, процедура перемешивания должна прибегать к возмущению датчика случайных чисел (оператор randomize).

Программа 4_10.bas

DECLARE SUB MIXER(В() AS INTEGER)

DEFINT A-Z

DIM A(36)

CLS

PRINT "Упорядоченная колода:"




Содержание  Назад  Вперед