Урок 11. Случайные числа

Тема: Язык программирования Logo

Когда программа выполняется, черепаха-исполнитель читает ее строки одна за другой сверху вниз. Исключение в этот порядок вносят изученные нами конструкции если, повтори, пока, а также некоторые другие, с которыми мы еще не знакомы. В этом случае части программы могут пропускаться, повторяться, или даже исполнитель-черепаха может перемещаться в другую часть кода (здесь имеются в виду подпрограммы).

Поведение программы может быть заранее известным, если извне она не получает никаких сведений. Например, на языке Лого, пользователь никак не влияет на ход программы, если в ней отсутствует команда спроси. Когда эта команда присутствует, то в зависимости от того, что ввел пользователь, можно организовать разный проход исполнителя-черепахи по коду (вспомните конструкцию если-иначе).

Однако существует еще один способ внести "неожиданность" в поведение черепахи. Можно использовать команду случайное, которая генерирует случайное число. Это случайное число можно присвоить переменной, а затем использовать переменную в вычислениях и конструкциях если, повтори, пока. Поэтому ход программы может быть разным.

Случайные числа генерируются в определенном диапазоне, т.е. от какого-то значения, до какого-то другого значения. Например, если задан диапазон от 0 до 100, то генератор случайных чисел выдаст любое число, которое будет не меньше 0 и не больше 100. На языке программирования Logo желаемый диапазон указывается после команды случайное. Сначала пишется нижняя граница (например, 0), а после запятой — верхняя (например, 50). Числа-границы также входят в диапазон.

Рассмотрим такой пример.

сброс
 
повтори 15 {
	$x = случайное 20, 380
	$y = случайное 20, 380
	$r = случайное 0, 255
	$g = случайное 0, 255
	$b = случайное 0, 255	
	цвет_пера $r, $g, $b
	повтори 19 {
		иди $x, $y 
		вперёд 20
		налево 20
}

Использование генератора случайных чисел

Здесь внешний цикл повтори повторяется 15 раз. Все эти 15 раз случайно генерируются значения пяти переменных ($x, $y, $r, $g, $b), т.е. в каждом обороте цикла значения этих переменных создаются заново. После того, как переменные обретают свои новые значения, устанавливается цвет пера. Каждый раз он будет различным. Далее 19 раз черепаха возвращается в одну и ту же точку и рисует линию, после чего поворачивает на 20 градусов. В результате получается что-то вроде звездочки, состоящей из 19 лучей. Поскольку в программе происходит 15 "оборотов" внешнего цикла, то на холсте получается 15 звездочек в случайных местах и случайного цвета.

Задание 1

Спишите приведенную выше программу. Посмотрите, как она работает. Измените ее так, чтобы на холсте отображалось всего 10 звездочек по 12 лучей, и все они были только в верхней половине холста.

Округление случайного числа

Из предыдущего примера должно стать понятно, что случайные числа генерируются. Однако мы не увидели их истинного значения. На самом деле полученные случайные числа представлены дробными величинами. Это видно из примера ниже.

сброс
 
$число = случайное 0, 100
напиши $число
 
иди 200, 250
 
$число = округли $число
напиши $число
 
иди 200, 300

Задание 2
Спишите код и посмотрите, что получится на холсте.

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

А зачем вообще округлять числа, если до этого у нас и так все прекрасно работало. Дело в том, что бывают ситуации, когда непременно нужно получить случайное целое число. Например, в программе ниже сравниваются два целых числа: случайное и полученное от пользователя. Если бы одно из них было дробным, а другое нет, то совпадение их значений было бы очень маловероятным.

сброс 
 
сообщение "Я компьютер. Сейчас загадаю число от 1 до 5"
сообщение "Отгадай его!"
 
$компьютерное_число = случайное 1,5
$компьютерное_число = округли $компьютерное_число
 
$мое_число = спроси "Напиши число от 1 до 5"
 
пока $компьютерное_число != $мое_число {
	сообщение "Не угадал!"
	$мое_число = спроси "Напиши число от 1 до 5"
}
 
сообщение "Молодец. Угадал!"

Задание 3
Объясните, что делает эта программа. Спишите и проверьте, как она работает.

Задание 4

Придумайте и напишите программу, при выполнении которой черепаха рисует на холсте зеленый треугольник, синий квадрат или серый круг. Выбор фигуры должен происходить случайным образом.

Подсказки:

  1. В какой-нибудь переменной храните случайно полученное число от 1 до 3.
  2. Используйте конструкцию если.

Примерный ответ к заданию 4:

сброс 
иди 150,200
 
$фигура = случайное 1,3
$фигура = округли $фигура
 
если $фигура == 1 {
	цвет_пера 0,230,0
	направление -90
	повтори 3 {
		назад 100
		налево 120
	}
}
 
если $фигура == 2 {
	цвет_пера 0,0,230
	повтори 4 {
		вперёд 100
		направо 90
	}
}
 
если $фигура == 3 {
	цвет_пера 70,70,70
	повтори 36 {
		вперёд 10
		направо 10
	}
}