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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 16:07   #31
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

На Вашем месте, я бы перечитал пост Виктора..
Удачи
Poma][a вне форума Ответить с цитированием
Старый 13.05.2013, 19:24   #32
DarkDen
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 38
По умолчанию

Все равно выскакивает та же ошибка... токлько теперь раньше...
DarkDen вне форума Ответить с цитированием
Старый 13.05.2013, 21:12   #33
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Взял код от сюда : тыц

Внес некоторые изменения..
Код:
const
	n = 52;
	m = 13;
	RedOne = '1';
	WhiteOne = '2';	
	
type str52 = string[52];

var
	OurComb, AllComb : Int64;
	
procedure Permute(const t,s: str52);
var
  lenS, i, j: Byte;
  ch : char;
begin
  lenS := length(s);
  if lenS=0 then begin
    {writeln(t); уберем вывод} 
    Inc (AllComb);
    i := 1;
    while (i <= Length(s)-1) and 
          ((s[i] <> RedOne) or (s[i+1] <> RedOne))  do 
				Inc (i);
				
	if i <> Length(s) then
		Inc (OurComb);
  end    
  else
    for i:=1 to lenS do begin
      ch := s[i];
      j:=1;
      while s[j]<>ch do inc(j);
      if j=i then
        Permute(t+ch, Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
    end;
end;


var
  s    : str52;
  i : integer;
 
begin
  {cгенерим S, сначала пойдут красные}
  s := '';
  for i := 1 to m do
	s := s + RedOne;
	
  for i := m+1 to n do
	s := s + WhiteOne;
  {сообственно и сами перестановки}
  OurComb := 0;
  AllComb := 0;
  Permute('',s);
  WriteLn (AllComb, ' ', OurComb)
end.
Poma][a вне форума Ответить с цитированием
Старый 13.05.2013, 21:45   #34
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Poma][a, я не понял, как происходит увеличение OurComb (по какому правилу), поэтому написал свою проверку:
Код:
const
  n = 52;
  m = 13;
  k = 4;
  RedOne = '1';
  WhiteOne = '2';

type
  str = string[n];

var
  OurComb, AllComb: Int64;
  s, ms: str;
  i: integer;

procedure Permute(const t, s: str);
var
  lenS, i, j: Byte;
  ch: ansichar;
begin
  lenS := length(s);
  if lenS = 0 then
  begin
    { writeln(t); уберем вывод }
    Inc(AllComb);
    if pos(ms, t + t) > 0 then
      Inc(OurComb);
  end
  else
    for i := 1 to lenS do
    begin
      ch := s[i];
      j := 1;
      while s[j] <> ch do
        Inc(j);
      if j = i then
        Permute(t + ch, Copy(s, 1, i - 1) + Copy(s, i + 1, length(s) - i))
    end;
end;

begin
  { cгенерим S, сначала пойдут красные }
  s := '';
  for i := 1 to k do
    s := s + RedOne;
  ms := s;
  for i := k + 1 to m do
    s := s + RedOne;
  for i := m + 1 to n do
    s := s + WhiteOne;
  { сообственно и сами перестановки }
  OurComb := 0;
  AllComb := 0;
  Permute('', s);
  writeln(AllComb, ' ', OurComb);
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.05.2013, 22:01   #35
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
я не понял, как происходит увеличение OurComb (по какому правилу)
Блин.. Я был уверен что надо вычислить вероятность того что 2 (а не 4) красных шара будут стоять вместе.. Каюсь.. Мой косяк
Poma][a вне форума Ответить с цитированием
Старый 13.05.2013, 23:29   #36
DarkDen
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 38
По умолчанию

Спасибо
Но я понимаю всё меньше и меньше.
Убрали ввод N и M, ясно.
Я заменил код.
Запустил.
Дальше(как я понимаю) идет расчёт комбинаций, но без вывода рсчёта на экран.
Эти визуальные расчёты мне нужны для определения времени расчётов.
Что я понял не так???
Спасибо
DarkDen вне форума Ответить с цитированием
Старый 13.05.2013, 23:37   #37
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Добавил тестовый вывод (не комбинации, а номер рассматриваемой).
На Core i5 M450 займет теоретически 17 часов (1000000 комбинаций в секунду).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.05.2013, 23:47   #38
DarkDen
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 38
По умолчанию

Ну не програмер я, физик. Извините что не дагоняю.
Завтра запущу, может не выкинет ошибку.
Спасибо
DarkDen вне форума Ответить с цитированием
Старый 14.05.2013, 07:37   #39
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Дальше(как я понимаю) идет расчёт комбинаций, но без вывода рсчёта на экран.
Ага. Т.к. вывод на экран - это очень трудоемкое дело.. и может существенно увеличить время работы программы.

Если хотите, то после строки Inc (AllComb) можно написать WriteLn (AllComb), что бы Вы видели что процесс идет..
Poma][a вне форума Ответить с цитированием
Старый 14.05.2013, 08:55   #40
DarkDen
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 38
По умолчанию

Я понял. Спасибо.
DarkDen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить ошибку арифметического переполнения в алгоритме. DarkDen Паскаль, Turbo Pascal, PascalABC.NET 2 11.05.2013 13:16
как исправить ошибку? phasha Помощь студентам 0 11.01.2012 21:32
как исправить ошибку? aiktz Паскаль, Turbo Pascal, PascalABC.NET 3 24.09.2009 18:56
прога на Паскале помогите исправить ошибку:( Jeksik Помощь студентам 4 14.10.2008 18:21