Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2013, 12:08   #21
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Моя реализация кода, вероятность считается от числа выпадений за указанное число бросков. Вероятности для 1000 бросков держатся в районе 0,2.

Код:
program loterry;

const
  number = 1000;// Число розыгрышей

var
  a1, ta1: array [1..80] of integer;
  a2: array [1..80,1..2] of real;
  i, j, k, tmpi: integer;
  tmp: real;

begin
  randomize();
  for k := 1 to number do
  begin
    for i := 1 to 20 do
    begin
      repeat
        j := random(80) + 1;
      until (ta1[j] <> 1);
      a1[j] := a1[j] + 1;
      ta1[j] := 1;
    end;
    for i := 1 to 80 do
      ta1[i] := 0;
  end;
  for i := 1 to 80 do
  begin
    a2[i][1] := a1[i] / number;
    a2[i][2] := i;
  end;
  for i := 1 to 80 - 1 do
    for j := i + 1 to 80 do
      if (a2[j][1] > a2[i][1]) then
      begin
        tmp := a2[i][1];        
        a2[i][1] := a2[j][1];
        a2[j][1] := tmp;
        tmp := a2[i][2];        
        a2[i][2] := a2[j][2];
        a2[j][2] := tmp;
      end;
  writeln('Наибольшая вероятность выпадения у следующих 20 чисел:');
  for i := 1 to 20 do
  begin
    write(FloatToStr(a2[i][2]) + '(' + FloatToStr(a2[i][1]) +'%) ');
  end;  
  readln();
end.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 26.10.2013, 12:25   #22
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
const
	SIZE = 80;
	CNT = 20;

type
	TR = record
		pos : Integer;
		value : Integer 
	end;
	
	TArr = array [1..CNT] of Integer;
	TM = array [1..SIZE] of TR;
	
procedure Generate (var a : TArr);
procedure Swap (var b, c : Integer);
var
	t : Integer;
begin
	t := b;
	b := c;
	c := t
end;

var
	t : array [1..80] of Integer;
	i : Integer;
	

begin
	for i := 1 to SIZE do
		t[i] := i;
		
	for i := 1 to SIZE do 
		Swap (t[i], t[Random(SIZE)+1]);
		
	Move (t, a, CNT)	
end;

procedure GetChance (const a : TArr; const win : TArr; var num : TM);
function WinNum (k : Integer) : Boolean;
var
	i : Integer;
begin
	WinNum := TRUE;
	for i := 1 to CNT do
		if a[i] = k then 
			Exit;
			
	WinNum := FALSE		
end;

var
	i : Integer;
	
begin
	for i := 1 to CNT do
		if WinNum (a[i]) then
			Inc (num[a[i]].value);
end;


procedure SortArr (var a : TM; const n : LongInt);

var
	l, i, m, r : LongInt;
	t : TR;

begin
	for i := 2 to n do begin
		if a[i].value < a[i-1].value then begin

			t := a[i];

			l := 1;
			r := i-1;

			while l <> r do begin
				m := l + (r - l) div 2;
				if t.value > a[m].value then
					l := m + 1
				else
					r := m;
			end;

			Move (a[r], a[r+1], (i - r) * SizeOf (a[1]));

			a[l] := t;
		end;
	end;
end;



var
	num : TM;
	win, attempt : TArr;
	i : Integer;

begin
	Randomize;
	for i := 1 to SIZE do begin
		num[i].pos := i;
		num[i].value := 0
	end;
		
	Generate(win);
			
	for i := 1 to 10 do begin
		Generate (attempt);
		GetChance (attempt, win, num)
	end;
	
	SortArr (num, SIZE);
	for i := SIZE downto 1 do
		WriteLn (num[i].pos : 4, ' : ', num[i].value*10 : 4,'%')
	
end.
Как-то так.. (не тестировал.. посмотрел, что компилируется и что-то выдает..)
Poma][a вне форума Ответить с цитированием
Старый 26.10.2013, 18:08   #23
v.chertov
Новичок
Джуниор
 
Регистрация: 25.10.2013
Сообщений: 10
По умолчанию

ребят, может я что-то недопонял как препод объяснил, он как бы дал текст задачки, я по максимуму его распросил, и что понял писал выше.. не понимаю что не хватате, вы скажите я у него спрошу.
v.chertov вне форума Ответить с цитированием
Старый 26.10.2013, 18:10   #24
v.chertov
Новичок
Джуниор
 
Регистрация: 25.10.2013
Сообщений: 10
По умолчанию

вроде как надо сравнить выпавшие случайные числа и вывести вероятность следующего числа. с наибольшей вероятностью! вроде так.
v.chertov вне форума Ответить с цитированием
Старый 26.10.2013, 18:15   #25
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Если генератор абсолютно случаен - вероятность любого следующего числа будет 1/80. Если же нет, то по набору данных можно выявить закономерности, т.е. те числа, которые падают чаще. У меня в коде примерно так и сделано, там высчитывается отношение выпал_раз/число_розыгрышей.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 26.10.2013, 18:25   #26
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

В посте #9, я уже написал формулу - 10*(20/80) = 2,5.
80 значимых чисел случайно распределены по 20 билетам. В десяти розыгрышах, случайно выбранная цифра выпадет, как минимум в двух билетах и в 50/50, в третьем билете.
Если брать вероятность выпадения этой-же цифры в ряду, она действительно равна 1/80-й, т.к. в ряду цифры не повторяються.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.10.2013, 18:29   #27
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

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

Программа должна сгенерировать выйгрышный ряд из 20 элементов (от 1 до 80).
Далее Ваша программа генерирует 10 тиражей, в которых также 20 элементов (от 1 до 80) и сщитает кол-во "попаданий" (тоесть если число I есть в выйгрышном ряде и в K тиражах, то мы кол-во попаданий будет K)..
Далее выводим это самое кол-во попаданий.. вуаля
Именно так я написал код из #22
Poma][a вне форума Ответить с цитированием
Старый 26.10.2013, 18:36   #28
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ну, если только так. v.chertov, Poma][a правильно ли Вас понял?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.10.2013, 18:49   #29
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Именно так я написал код из #22
а я в #20 !!!!
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 26.10.2013, 18:51   #30
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
а я в #20 !!!!
Ба.. а я и не видел.. почта рассказала об "+1", а об коде молчок..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Паскаль Задачи. примерно 10 буду рад если решите... желательно с блок схемами. Буду сильно благодарен. Азарт Помощь студентам 8 26.03.2009 23:51