Песни о Паскале - страница 33

Шрифт
Интервал

стр.

Этого можно добиться применением ещё одной процедуры. Она называется Randomize (что значит «уравнять шансы» или «перемешать») и не требует параметров. Вызвав эту процедуру единожды в начале программы, мы смешаем карты и заставим функцию Random при повторных запусках программы генерировать разные последовательности чисел. Итак, вставьте вызов процедуры Randomize в начало программы и повторите опыты, запустив программу несколько раз подряд.


>{ P_15_2 – пятикратный вызов функции Random(100) после Randomize }

>Begin

>      Randomize;

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Readln;

>end.


Теперь от успешного финиша проекта нас отделяет один шаг: придумаем способ генерировать числа от 1 до 10 (а не от 0 до 9). Очевидно, что простое арифметическое выражение решает эту проблему.


>      X:= 1+ Random(10);       { генерация чисел от 1 до 10 }


Сейчас вы готовы написать второй вариант экзаменатора, вот каким он может быть (новые операторы, как обычно, выделены курсивом).


>{ P_15_3 – программа-экзаменатор, версия 2 }

>var A, B, C : integer; { сомножители и произведение }

>begin

>      Randomize; { смешиваем «карты» }

>      repeat

>      A:= 1+ Random(10);       B:= 1+ Random(10);

>      Write(’Сколько будет ’, A,’ x ’,B, ’ ? ’);

>      Readln(C);

>      if C=0 then break; { завершение цикла, если C=0 }

>      { проверяем правильность вычисления }

>      if A*B=C

>      then Writeln(’Молодец, правильно!’)

>      else Writeln(’Ошибка, повтори таблицу умножения!’);

>      until false; { бесконечный цикл! }

>end.


Обратите внимание на вывод задания для умножения.


>      Write(’Сколько будет ’, A,’ x ’,B, ’ ? ’);


Здесь процедура Write содержит уже пять параметров: две числовые переменные и три строковые константы. Так, при A=3 и B=7 на экране появится вопрос: «Сколько будет 3 x 7 ?». Остальные операторы программы обойдутся без моих пояснений.

Итоги

• В языках программирования предусмотрены средства для согласованной работы программистов, одно из них – библиотеки процедур и функций.

• Отличие процедур от функций состоит в том, что процедура лишь выполняет оговоренные действия, а функция вдобавок возвращает данные некоторого типа.

• Для генерации случайных последовательностей чисел применяют функцию Random и процедуру Randomize.

• Функция Random(N) возвращает псевдослучайное число, лежащее в пределах от 0 до N-1. При повторных запусках программы эта серия чисел повторяется, если заранее не вызвана процедура Randomize.

• Вызов процедуры Randomize в начале программы приводит к генерации функцией Random разных серий псевдослучайных чисел.

А слабо?

А) В каких пределах будут генерироваться числа следующими выражениями:

10+Random(10);

Random(20);

Random(10) + Random(10);

Random(5) + Random(5) + Random(5) + Random(5);

Проверьте себя на компьютере!

Б) Сколько чисел будет напечатано следующей программой? Испытайте на практике.


>var x : integer;

>begin

>      repeat

>      x := Random(20);

>      Writeln(x);

>      until x=1;

>end.


В) А если в начало предыдущей программы вставить Randomize? Можно ли предсказать результат? Или слабо?

Г) Найдите способ сформировать ряд случайных булевых значений (False, True), напечатайте 20 из них. Подсказка: булевы значения получаются сравнением двух случайных целых чисел.

Д) Сгенерируйте два случайных числа (в диапазоне от 1 до 10) так, чтобы они не совпадали. Сделайте то же самое для трех чисел.

Глава 16

Делу время, а потехе час



Наши программы – и часовой, и экзаменатор – такие любопытные! Все спрашивают что-то: то пароль им подавай, то таблицу умножения! Не поменяться ли с компьютером местами? Теперь мы будем спрашивать, а он – отвечать.

Вот веселая и глупая игра: «вопрос-ответ», суть которой такова. Две колоды карточек – одну с вопросами, а другую с ответами – тасуют и кладут рубашками вверх. Кто-то из сидящей вокруг стола компании берет наугад карточку из «вопросительной» колоды и читает вопрос своему соседу. Тот вынимает наугад карточку из колоды с ответами и оглашает его. К примеру, на вопрос «Как пройти в библиотеку?» можно получить ответ: «Волк, коза и капуста».


стр.

Похожие книги