Команда random&randomize.

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Команда random&randomize.

Сообщение deka47 » 07.10.2012 22:51:33

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

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

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

Я так и не понял разницу между этими двумя командами, что та, что та выдавала мне разные цифры, пожалуйста, обьясните мне.

И еще один вопрос не по теме, вот я написал программу:
var A, B, C : integer;
r: boolean;
begin
Randomize;
repeat
A:= 1+ Random(10); B:= 1+ Random(10);
Write('Сколько будет ', A,' x ',B, ' ? ');
readln (c);
if с=0 then break;
r:=c=a*b;
if r
then Writeln('Молодец правильно')
else Writeln('Ошибка, повтори таблицу умножения');
until false;
writeln ('Good bye!');
end.

Все работает, но как сделать так, чтобы она выключалась при вводе команды "Stop", а не "0". Я это сделать не могу, потому что пытаюсь присвоить "с" типу integer тип string. Вводить другую сменную "q", к примеру, тоже как-то не вариант, потому что я там не могу просто заменить if с=0 then break; на if q='Stop' then break; я не знаю где мне поставить readln(q) или что сделать, чтобы я смог выключать ее словом, а не цифрой?

Огромное Вам спасибо, с уважением начинающий программист Владислав.
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26

Re: Команда random&randomize.

Сообщение andrey_k3 » 08.10.2012 00:18:02

может не совсем красиво, но как вариант:
var A, B, C : integer;

q:string;

r: boolean;
begin
Randomize;
repeat
A:= 1+ Random(10); B:= 1+ Random(10);
Write('Сколько будет ', A,' x ',B, ' ? ');

readln (q); //считываем вводимые символы в строку
if q='stop' then break else c:= strtoint(q); //если не stop - конвертируем в число

r:=c=a*b;
if r
then Writeln('Молодец правильно')
else Writeln('Ошибка, повтори таблицу умножения');
until false;
writeln ('Good bye!');
end.
andrey_k3
новенький
 
Сообщения: 22
Зарегистрирован: 17.05.2012 09:52:32

Re: Команда random&randomize.

Сообщение Vadim » 08.10.2012 02:47:34

deka47 писал(а):Вот в чем проблема, я запускал много раз, мне всегда с 5 команд random выводило разные числа и они не повторялись.

1. Это вопрос к разработчикам FreePascal ;)
2. Нужно ввести дополнительную переменную, типа String и сравнивать её с константой 'stop'.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Команда random&randomize.

Сообщение Максим » 08.10.2012 03:35:47

deka47 писал(а):Вот в чем проблема, я запускал много раз, мне всегда с 5 команд random выводило разные числа и они не повторялись.

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

Результат выполнения вашей программы с убранным вызовом Randomize это прекрасно демонстрирует:
Код: Выделить всё
i:\Fptest>randomizetest.exe
How much is 6 x 6 ? 36
OK
How much is 8 x 9 ? 72
OK
How much is 7 x 9 ? 63
OK
How much is 6 x 9 ? 54
OK
How much is 5 x 7 ? 35
OK
How much is 7 x 4 ? 28
OK
How much is 5 x 3 ? 15
OK
How much is 9 x 1 ? 0
Good bye!

i:\Fptest>randomizetest.exe
How much is 6 x 6 ? 36
OK
How much is 8 x 9 ? 72
OK
How much is 7 x 9 ? 63
OK
How much is 6 x 9 ? 54
OK
How much is 5 x 7 ? 35
OK
How much is 7 x 4 ? 28
OK
How much is 5 x 3 ? 15
OK
How much is 9 x 1 ? 9
OK
How much is 10 x 3 ? 0
Good bye!

i:\Fptest>randomizetest.exe
How much is 6 x 6 ? 36
OK
How much is 8 x 9 ? 72
OK
How much is 7 x 9 ? 63
OK
How much is 6 x 9 ? 54
OK
How much is 5 x 7 ? 35
OK
How much is 7 x 4 ? 28
OK
How much is 5 x 3 ? 15
OK
How much is 9 x 1 ? 9
OK
How much is 10 x 3 ?
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 597
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Команда random&randomize.

Сообщение deka47 » 09.10.2012 00:40:35

Всем спасибо, понял как сделать остановку словом и разницу между процедурами!
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26

Re: Команда random&randomize.

Сообщение sign » 09.10.2012 05:05:22

deka47, пользуйтесь оформлением своих примеров посредством команды Code.
Смотрите, насколько читабельней ваш пример:
Код: Выделить всё
var A, B, C : integer;
  r: boolean;
begin
  Randomize;
  repeatA:= 1+ Random(10);
    B := 1+ Random(10);
    Write('Сколько будет ', A,' x ',B, ' ? ');
    readln (c);
    if с=0 then break;
    r := c=a*b;
    if rthen Writeln('Молодец правильно')
    else Writeln('Ошибка, повтори таблицу умножения');
  until false;
  writeln ('Good bye!');
end.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Команда random&randomize.

Сообщение Paster Fob » 09.10.2012 07:59:29

deka47Для вопросов связанных с обучением по книге "Песни о Паскале",есть специальный раздел на форуме
http://freepascal.ru/forum/viewforum.php?f=45
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Команда random&randomize.

Сообщение deka47 » 10.10.2012 22:28:45

Спасибо, буду пользоваться этой функцией.
Извините, создал тему и аж потом увидел, что есть раздел с этой книгой и уже не хотел дублировать.
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26


Вернуться в Книга "Песни о Паскале"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru