Читаем Песни о Паскале полностью

Вернемся к нашему экзаменатору, где надо придумать способ формирования случайных чисел в пределах от 1 до 10. Будь под рукой игральный кубик из Монте-Карло, я бы не связывался с компьютером! Впрочем, в библиотеке Паскаля есть такой «кубик» – это функция по имени Random, что переводится как «случайный, беспорядочный». Этой функции необходимо задать один параметр – число N, определяющее предел для случайного числа. В ответ функция возвращает некоторое случайное число в диапазоне от нуля до N-1. Например, в следующем операторе в переменную X попадет некоторое число в диапазоне от 0 до 9.


      X:= Random(10);


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


{ P_15_1 – пятикратный вызов функции Random(100) }

begin

      Writeln( Random(100) );

      Writeln( Random(100) );

      Writeln( Random(100) );

      Writeln( Random(100) );

      Writeln( Random(100) );

      Readln;

end.


Здесь печатаются целые числа, возвращаемые функцией Random. И хотя параметр функции во всех вызовах одинаков (100), результаты получатся разными. При этом все они лежат в диапазоне от 0 до 99. Таким образом, параметр функции Random управляет диапазоном генерируемых чисел.

Запустите эту программу ещё пару раз и сравните результаты. Вы заметили, что они повторяются? Так и должно быть! Все потому, что функция Random создает псевдослучайную последовательность чисел. «Псевдо» – значит «не совсем случайную». Эта особенность функции полезна при отладке программ. Но в экзаменующей программе надо получать разные последовательности чисел, иначе смышленые школяры приноровятся к экзаменатору!

Этого можно добиться применением ещё одной процедуры. Она называется 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.

Перейти на страницу:

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

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы