Лекция 15.Генерирование случайных чисел автор: Садовский Ефим Моисеевич1. Повторение. Цикл For. Цикл While. Общий вид. Достоинства и недостатки.
2. Генерирование случайных чисел. Очень часто в программах компьютер должен задумать случайное число, то есть число, которое не повторяется и которое не знает даже создатель программы. Особенно актуально это для игр. Чтобы поведение компьютера нельзя было предсказать, он должен выбирать, например, случайное направление движения. Если Вы в теле программы напишете две строчки: randomize; x:=random(50); то переменной Х присвоится случайное число от 0 до 49. Почему две строки? Первый оператор randomize обеспечивает несовпадение случайных чисел («перетасовать колоду карт»), если его опустить, то числа на двух соседних компьютерах будут появляться в одинаковой последовательности. Оператор randomize достаточно написать в программе один раз (например, в начале, после первого begin), сколько бы случайных чисел не генерировалось в программе.
3. Диапазон случайного числа. Как регулировать диапазон случайного числа? Например, нам нужно число от 1 до 10. Если мы наберем x:=random(10), то компьютер задумает число от 0 до 9 (обратите внимание, что число в скобках не включается в диапазон!) Правильно записать так: x:=random(10)+1. В этом случае нижняя и верхняя граница увеличиваются на 1 (получим: от 1 до 10). Если нам нужно число от 5 до 17, то вычисляем разницу: 17-5=12. Прибавляем 1. 12+1=13. Смело набираем: x:=random(13), а затем прибавляем нижнюю границу. Правильно записать так: x:=random(13)+5. Проверяем: random(13) – случайное число от 0 до 12. Прибавляем 5 к нижней и верхней границе: 0+5=5, 12+5=17. Получим от 5 до 17. Правильно.
Попробуйте самостоятельно: 1. Записать случайное число от 14 до 39, от 37 до 93. Ответ: x:=random(26)+14 и x:=random(57)+37. 2. Попробуем написать простенькую игру: «Кости». Компьютер и человек «кидают» по 2 игральных кубика. У кого больше очков, тот выиграл. Игра идет до 10 побед.Program kosti;
var k1,k2,x1,x2,s1,s2:integer;
begin
randomize;
k1:=0;
k2:=0;
while (k1<>10) and (k2<>10) do
begin
writeln('Мой бросок:');
x1:=random(6)+1;
x2:=random(6)+1;
s1:=x1+x2;
writeln('Выпало: ',x1,' и ',x2,' Всего очков - ',s1);
writeln('Ваш бросок:');
x1:=random(6)+1;
x2:=random(6)+1;
s2:=x1+x2;
writeln('Выпало: ',x1,' и ',x2,' Всего очков - ',s2);
if s1>s2 then
begin
k1:=k1+1;
writeln('Я выиграл!');
end;
if s1<s2 then
begin
k2:=k2+1;
writeln('Вы выиграли!');
end;
if s1=s2 then
writeln('Ничья!');
writeln('Счет: ',k1,':',k2);
readln;
end;
if k1=10 then writeln('УРА! Моя победа!!!');
if k2=10 then writeln('Как ты мог?! Опять обманул бедный компьютер!');
readln;
end. Переменные k1 и k2 – для подсчета количества побед, s1 и s2 – количество выпавших очков на двух кубиках. x1 и x2 – случайные числа от 1 до 6 (числовой аналог кубика). Внимание! Обратите внимание на пустой оператор readln. Он служит для остановки выполнения программы в нужном месте. Для продолжения пользователь должен нажать Enter.
4. Решение задач. 1. Компьютер бросает кубик до тех пор, пока сумма выпавших очков не превысит S. Сколько раз брошен кубик? 2. Компьютер подбрасывает монету 5000 раз. Сколько раз «выпал» «орел» и сколько «решка»? 3. Игра «Угадай число». Компьютер задумывает случайное число от 1 до 100. Вы пытаетесь его угадать. При каждой попытке он выводит подсказку «больше» или «меньше». После того, как число угадано, на экран выводится количество попыток.
random, random, random, random, random, random, random, random, pascal, pascal, pascal, pascal random
|