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
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
repeat
Readln(C);
if C=0 then break; { завершение цикла, если C=0 }
{ проверяем правильность вычисления }
if A*B=C
then Writeln(’Молодец, правильно!’)
else Writeln(’Ошибка, повтори таблицу умножения!’);
until false; { бесконечный цикл! }