Что нового

Компьютерные эксперименты

XM

Знающий
Сообщения
70
Репутация
8
P.S. в предыдущей теме про задачу останова высказались немногие, но тем не менее так никто и не задумался об алгоритме решения той задачи... (Хотя алгоритм поиска совершенных чисел я воспроизвел прямо на AutoIt!)

Предлагаю следующие 2 задачи:
1. Используя входной текстовый файл в качестве образца, сгенерировать несколько осмысленных(!) предложений.

2. Распределение Гаусса
Случайные величины, как известно, подчиняются разным законам распределения. Бросая кубик, мы ожидаем, что каждое из шести указанных на гранях чисел выпадет с одной и той же вероятностью. Бросая два кубика одновременно, разумно ожидать, что сумма выпавших чисел будет чаще равна трем и реже - двум (потому что в первом случае годятся варианты 1-2 и 2-1, а во втором - лишь 1-1).

Для демонстрации нормального (Гауссовского) распределения случайных величин можно использовать доску Гальтона.
Это устройство представляет собой гладкую поверхность (доску), на которой расположено несколько рядов клинышков. Первый ряд состоит лишь из одного клинышка, второй из двух, третий из трех и так далее....

Доска размещается вертикально. Сверху опускается круглая фишка или монетка. С вероятностью 50% она падает налево или направо, после чего попадает на один из клинышков второго ряда. Процесс продолжается, пока фишка не достигнет одного из желобков, расположенных на нижнем краю доски (если доска состоит из N рядов, в итоге фишка может закончить падение в одном из N+1 положений)

При достаточно большом количестве экспериментов распределение фишек в желобках будет в той или иной степени соответствовать нормальному распределению.

Требуется смоделировать этот процесс, причем кол-во рядов доски есть переменная, которую задает пользователь.
Для иллюстрации графика (если у кого он получится) можно (придеться) использовать GDI.

Я эту задачу уже решил (на AutoIt). Интересно посмотреть Ваши решения...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Vendor
предлагаю тебе воспользоваться вот этим ресурсом. уверяю, занятие на многие и многие часы досуга тебе обеспечены ;D
Project Euler. Problems
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Видео: Нормальное распределение. Доска Гальтона.
Написал за 10 минут, дебажил часа два.
Код:
$iRows = 10 ;Кол-во рядов
$iTests = Int(($iRows+1)*100/3) ;Кол-во тестов (Кол-во вариантов в конце - $iRows+1, ($iRows+1)*100 хватит чтобы полностью заполнить прогрессбары, треть от этого наверно нормально


GUICreate('Doska Galtona', $iRows*25+35, 480) ;окно
Dim $aProgessBars[$iRows+1] ;массив для прогрессбаров

For $i = 0 To $iRows Step +1 ;прогрессбары
	$aProgessBars[$i] = GUICtrlCreateProgress($i*25+5, 5, 20, 460, 0x04)
Next

GUISetState()

For $i = 1 To $iTests Step +1 ;тесты
	test()
Next

Do
	Sleep(10)
Until GUIGetMsg() = -3

Func test($iVar = 0, $iCounter = 1) ;тест
	Local $iRet = Random($iVar, $iVar+1, 1) ;монетка может упасть только на ближайшие левый или правый клинышки
	If $iCounter < $iRows Then ;если ещё не последний ряд
		test($iRet, $iCounter+1) ;запустить тест на следующем ряду
	Else ;иначе монетка прошла последний ряд, тогда можно записать результат
		GUICtrlSetData($aProgessBars[$iRet], GUICtrlRead($aProgessBars[$iRet])+1)
	EndIf
EndFunc

ЗЫ
так ошибка и оставалась, исправил.
 
Автор
X

XM

Знающий
Сообщения
70
Репутация
8
Kaster сказал(а):
Vendor
предлагаю тебе воспользоваться вот этим ресурсом. уверяю, занятие на многие и многие часы досуга тебе обеспечены ;D
Да, занятный ресурс, спс! Даже поставлю +1.
Kaster, мы с вами пиво/водку не пили вместе, так что давайте как-то соблюдать субординацию... OK?
P.S. не очень люблю, когда "тыкают"...
 
Верх