Спаситеее. Генератор случайных чисел

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Спаситеее. Генератор случайных чисел

Re: Спаситеее. Генератор случайных чисел

Небо Принстона » 06 апр 2007, 11:58

Большое человеческое спасибо. Наверное минут за пять программу написали, но все равно - помощь неоценима. Добавила там еще счетчик, а то количество попыток неправильно выдавал :)

Re: Спаситеее. Генератор случайных чисел

Хыиуду » 27 мар 2007, 10:49

А я и говорю, левые штучки. Впрочем, у меня на ТурбоПаскале 7.0, сколько себя помню, так и было.

Re: Спаситеее. Генератор случайных чисел

BBB » 27 мар 2007, 10:18

Хыиуду писал(а):Мне припоминалось, что при выходе из цикла for значение индекса равно последнему значению плюс один. Потому что цикл, если не ошибаюсь, ассемблерно реализован примерно так (в переводе опять же на Паскаль):

Код: Выделить всё

i:=startvalue-1;
lab1: i:=i+1;
  if i>endvalue then goto lab2;
  {выполнение команд цикла}
  goto lab1;
lab2: {идти дальше по программе}
Снова. Насколько я помню, это (значение счетчика цикла по его выходу) никем не гаратировано. То, что в какой-то реализации какого-то языка получается такой результат, не гарантирует, что вдругой реализации даже этого де языка результат будет такой же. Пожалуй, это можно назвать "недокументированной особенностью". А, как известно, полагаться на недокументированные штучки - это риск.

Re: Спаситеее. Генератор случайных чисел

Хыиуду » 27 мар 2007, 10:06

Мне припоминалось, что при выходе из цикла for значение индекса равно последнему значению плюс один. Потому что цикл, если не ошибаюсь, ассемблерно реализован примерно так (в переводе опять же на Паскаль):

Код: Выделить всё

i:=startvalue-1;
lab1: i:=i+1;
  if i>endvalue then goto lab2;
  {выполнение команд цикла}
  goto lab1;
lab2: {идти дальше по программе}

Счетчик цикла For по выходу из цикла

BBB » 27 мар 2007, 09:55

Хыиуду писал(а):Странно, неужели они логику одного из фундаментальных операторов поменяли?
Что-то припоминается мне из теории Паскаля, что про счетчик цикла for по выходе из цикла говорится, что его значение никак не гарантировано. Т.е. при программировании не следует делать никаких допущений о значении этой переменной.

Re: Спаситеее. Генератор случайных чисел

Хыиуду » 26 мар 2007, 14:10

Странно, неужели они логику одного из фундаментальных операторов поменяли?

Re: Спаситеее. Генератор случайных чисел

somewhere » 26 мар 2007, 13:52

На Дельфи - согласен, но вот (uses crt ;) в проге, говорит о Паскале - а там немного по-другому.

Re: Спаситеее. Генератор случайных чисел

Хыиуду » 26 мар 2007, 12:10

У меня ровно с тем же кодом (только выводил через Memo1.Lines.Add() ) получилось
1
2
3
4
Дельфи 7.0

Re: Спаситеее. Генератор случайных чисел

somewhere » 26 мар 2007, 11:30

&quot писал(а):А в чем ошибка? Это как раз из серии "левые штучки". Если выход из цикла будет естественным путем, а не через break, значение count будет равно 4. Можно проверить.
Вот это уже точно "левые" штучки. Видно ты с чем-то путаешь

Код: Выделить всё

var i:byte;
begin
 for i:=1 to 3 do
  writeln(i);
Writeln(i);
end.
Results

Код: Выделить всё

1
2
3
3

Re: Спаситеее. Генератор случайных чисел

Хыиуду » 26 мар 2007, 10:47

А в чем ошибка? Это как раз из серии "левые штучки". Если выход из цикла будет естественным путем, а не через break, значение count будет равно 4. Можно проверить.
А насчет Begin согласен - мой косяк. Это уже начинаются заглюки с Python, где нету бегинов и эндов, а операторные скобки делаются путем добавления пробелов в начале строки.

Вернуться к началу