Эксперименты со случайностью ConfNina's Блог / 19.09.2016 Всякий язык программирования имеет средства, позволяющие генерировать случайные числа. Правда, эти числа в компьютере формируются в определенной зависимости друг от друга, поэтому их называют псевдослучайными. В языке программирования Паскаль для генерирования случайных чисел предназначены такие средства: процедура Randomize - включение генератора случайных чисел; функция Random - определение диапазона случайных чисел.В настоящей статье обратим внимание на программирование случайных событий в игровых ситуациях. С одной стороны, это поддерживает интерес детей к задаче, стимулирует к выдвижению гипотез, их проверке и проведению исследований. Учащиеся вновь и вновь запускают программы, изменяют диапазоны, чтобы посмотреть, что получится. В то же время, составление подобных программ способствует формированию интереса к программированию, отработке навыков работы с алгоритмическими структурами.Задача 1. Чиполлино и МоркоуИсточник Эта задача о героях сказки Джанни Родари «Приключения Чиполлино».ИсточникИсточникУсловие задачиСыщик отправляется на поиски Чиполлино. Чиполлино спрятался в начале линейной дороги. В конце дороги находится пропасть. На дороге есть метки на расстоянии одного шага мистера Моркоу. Сыщик спускается на дорогу по канату с вертолёта. Погода туманная, поэтому заранее не известно место приземления сыщика. Он начинает перемещаться по дороге, делая по одному шагу. После приземления сыщик потерял ориентацию, поэтому передвигается хаотично, вперед-назад.Написать программу моделирования ситуации и определения результата поисков мистера Моркоу: найдет ли он Чиполлино или упадет в пропасть.РешениеДействия разработчика программы:1) зададим длину отрезка дороги, которая заканчивается пропастью - вводим pr;2) опустим сыщика с вертолета - случайно сгенерируем число mor в промежутке от 0 до pr;3) обозначим ситуацию "сыщик нашел Чиполлино" (mor=0) так: poisk=1; ситуацию "сыщик упал в пропасть" (mor=pr): poisk=2; вначале будем считать, что poisk=0;4) если окажется, что значение mor не равно 0 или pr, то 4a) выберем направление перемещения сыщика (на шаг вперед или назад) - случайно сгенерируем число h, равное 1 или -1;4б) переместим сыщика на шаг h - изменим значение mor, то есть mor:=mor+h;5) будем повторять действия 3)-4) пока не получим poisk=1 или poisk=2;6) выведем ответ в зависимости от значения переменной poisk.Программа и результаты ее выполнения:В окне вывода при каждом запуске программы выводится информация в четыре строчки:длина дороги (для исследования каждый раз вводится одно и то же значение, в данном случае, 100);место приземления мистера Моркоу;ответ, где окажется сыщик;число шагов, им сделанных (для этого в программе введен счетчик - переменная kol).Дальнейшая работа над программой:допустим, что мистеру Моркоу известно, что существует реальная возможность падения в пропасть. Для страховки он планирует взять с собой парашют. Однако это - определенная ноша для худого и слабого сыщика, который не любит есть кашу. Для принятия решения (брать ли с собой парашют) нужно провести исследование с целью определения вероятности обнаружения Чиполлино и вероятности оказаться упавшим в пропасть. Итак, будем опускать сыщика с вертолета на дорогу несколько раз, затем отправлять его на поиски Чиполлино и всякий раз считать, сколько раз он упал в пропасть и сколько раз нашел Чиполлино. Очевидно, если мы знаем общее число испытаний S и получим, что сыщик нашел Чиполлино S_cip раз, и упал в пропасть S_pr раз, то вероятность удачного поиска будет равна S_cip/S, а вероятность падения в пропасть S_pr/S. Текст программы и результаты ее выполнения:Сколько бы раз ни запускали ученики программу, всегда получалась примерно одинаковая вероятность наступления этих двух ситуаций. - Так что, мистер Моркоу, если Вы находитесь в здравом уме, то возьмите с собой парашют, и кушайте побольше каши!Задача 2. Поиск "черного ящика" Источник ИсточникУсловие задачи:"Черный ящик" упал на земельный участок прямоугольной формы. На его поиски отправляют робота, который может передвигаться по шагам в четырех направлениях: вверх, вправо, влево, вниз. Антенны робота вышли из строя, поэтому ему не известно местонахождение черного ящика и направление движения робот выбирает случайно.Написать программу моделирования движения робота и подсчета числа сделанных им шагов.РешениеДействия разработчика программы:1) изобразим поле поиска и разместим на нём "черный ящик" - случайную точку красного цвета с координатами (xj; yj), как окружность с радиусом 5;2) пусть робот всегда начинает перемещение с середины участка и траектория движения изображается линией зеленого цвета;3) обозначим ситуацию "робот нашел черный ящик" (xr=xj и yr=yj) так: poisk=1; вначале будем считать, что poisk=0;4) если окажется, что значение poisk не равно 0, то 4a) выберем направление перемещения робота - случайно сгенерируем два числа hx, hy, соответствующие направлению вверх, или вправо, или влево, или вниз; так, чтобы точка с координатами (xr+hx; yr+yh) находилась на заданном участке;4б) переместим робота в новую точку - изменим значения xr, yr, то есть xr:=xr+hx; yr:=yr+hy; счетчик h для подсчета числа перемещений робота увеличим на 1;5) будем повторять действия 4), пока не получим poisk=1;6) выведем значение h.Программа и результаты ее работы:Численные данные выводятся в две строчки:координаты "черного ящика";число шагов, сделанных роботом.Дальнейшая работа с программой:решить задачу в предположении, что антенны робота работают правильно и он может оценить направление движение и поэтому двигается не хаотично, а целенаправленно, выбирая нужное направление передвижения к черному ящику.Задачи такого типа доставляют истинное удовольствие ребятам. "Хотим ещё", - говорят они. А не это ли источник радости для учителя?! Pascal исследование программирование случайные числа