IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Поиогите исправить ошибку, Программа останавливается аварийно.
darkden
сообщение 9.04.2013 19:45
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +


Сам я в Паскале сику слабо, я физик. Использую Free Pascal на Win 7
Имеется программа необходимая для расчёта вероятности событий.

program sochets_m;
var
   i, j, n, m, l: integer;
   k1,k2: LongInt;
   a: array[0 .. 100] of integer;
   s, t: string;
   d: set of byte;

begin
   write('vvedite N i M: ');
   read(n, m);
   if n<10 then l:=2 else if n<100 then l:=3 else l:=4;
      {form. per. soch.}
   for i:=0 to m do a[i]:=i;
   k1:=0;
   k2:=0;
   repeat
         s:='';
         d:=[];
         for i:=1 to m do begin
            d:=d+[a[i]];
            str(a[i]:l,t);
            s:=s+t
         end;
         if
            (1 in d) and (2 in d) and (3 in d) and (4 in d) or {1}
            (2 in d) and (3 in d) and (4 in d) and (5 in d) or {2}
            (3 in d) and (4 in d) and (5 in d) and (6 in d) or {3}
            (4 in d) and (5 in d) and (6 in d) and (7 in d) or {4}
            (5 in d) and (6 in d) and (7 in d) and (8 in d) or {5}
            (6 in d) and (7 in d) and (8 in d) and (9 in d) or {6}
            (7 in d) and (8 in d) and (9 in d) and (10 in d) or {7}
            (8 in d) and (9 in d) and (10 in d) and (11 in d) or {8}
            (9 in d) and (10 in d) and (11 in d) and (12 in d) or {9}
            (10 in d) and (11 in d) and (12 in d) and (13 in d) or {10}
            (11 in d) and (12 in d) and (13 in d) and (14 in d) or {11}
            (12 in d) and (13 in d) and (14 in d) and (15 in d) or {12}
            (13 in d) and (14 in d) and (15 in d) and (16 in d) or {13}
            (14 in d) and (15 in d) and (16 in d) and (17 in d) or {14}
            (15 in d) and (16 in d) and (17 in d) and (18 in d) or {15}
            (16 in d) and (17 in d) and (18 in d) and (19 in d) or {16}
            (17 in d) and (18 in d) and (19 in d) and (20 in d) or {17}
            (18 in d) and (19 in d) and (20 in d) and (21 in d) or {18}
            (19 in d) and (20 in d) and (21 in d) and (22 in d) or {19}
            (20 in d) and (21 in d) and (22 in d) and (23 in d) or {20}
            (21 in d) and (22 in d) and (23 in d) and (24 in d) or {21}
            (22 in d) and (23 in d) and (24 in d) and (25 in d) or {22}
            (23 in d) and (24 in d) and (25 in d) and (26 in d) or {23}
            (24 in d) and (25 in d) and (26 in d) and (27 in d) or {24}
            (25 in d) and (26 in d) and (27 in d) and (28 in d) or {25}
            (26 in d) and (27 in d) and (28 in d) and (29 in d) or {26}
            (27 in d) and (28 in d) and (29 in d) and (30 in d) or {27}
            (28 in d) and (29 in d) and (30 in d) and (31 in d) or {28}
            (29 in d) and (30 in d) and (31 in d) and (32 in d) or {29}
            (30 in d) and (31 in d) and (32 in d) and (33 in d) or {30}
            (31 in d) and (32 in d) and (33 in d) and (34 in d) or {31}
            (32 in d) and (33 in d) and (34 in d) and (35 in d) or {32}
            (33 in d) and (34 in d) and (35 in d) and (36 in d) or {33}
            (34 in d) and (35 in d) and (36 in d) and (37 in d) or {34}
            (35 in d) and (36 in d) and (37 in d) and (38 in d) or {35}
            (36 in d) and (37 in d) and (38 in d) and (39 in d) or {36}
            (37 in d) and (38 in d) and (39 in d) and (40 in d) or {37}
            (38 in d) and (39 in d) and (40 in d) and (41 in d) or {38}
            (39 in d) and (40 in d) and (41 in d) and (42 in d) or {39}
            (40 in d) and (41 in d) and (42 in d) and (43 in d) or {40}
            (41 in d) and (42 in d) and (43 in d) and (44 in d) or {41}
            (42 in d) and (43 in d) and (44 in d) and (45 in d) or {42}
            (43 in d) and (44 in d) and (45 in d) and (46 in d) or {43}
            (44 in d) and (45 in d) and (46 in d) and (47 in d) or {44}
            (45 in d) and (46 in d) and (47 in d) and (48 in d) or {45}
            (46 in d) and (47 in d) and (48 in d) and (49 in d) or {46}
            (47 in d) and (48 in d) and (49 in d) and (50 in d) or {47}
            (48 in d) and (49 in d) and (50 in d) and (51 in d) or {48}
            (49 in d) and (50 in d) and (51 in d) and (52 in d) or {49}
            (50 in d) and (51 in d) and (52 in d) and (1 in d) or {50}
            (51 in d) and (52 in d) and (1 in d) and (2 in d) or {51}
            (52 in d) and (1 in d) and (2 in d) and (3 in d) {52}
         then begin
            Inc(k2);
            Writeln(k2:10,'     ',s)
         end;
         i:=m;
         while a[i]=n-m+i do dec(i);
         inc(a[i]);
         for j:=i+1 to m do a[j]:=a[j-1]+1;
         Inc(k1);
    until i=0;
    Writeln('Total combinations: ',k1);
    Writeln('X combinations: ',k2);
    end.


Ввожу константы N и M. Программа начинает подсчёт неизвестных «Total combinations» и «X combinations». Программа должна работать для окончательного расчёта несколько суток на моём компе, но по истечению примерено часов 30 останавливается оварийно с ошибкой:

C:\fpc\2.6.0\bin\i386-win32\fig41x.exe
Exited with exitcode = 215
Runtime error 215 $ 00402213

Что нужно исправить что бы программа заканчивалась полным расчётом неизвестных?


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
TarasBer
сообщение 11.04.2013 16:17
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Что нужно исправить что бы программа заканчивалась полным расчётом неизвестных?

В первую очередь - условие в if.


ok := false;

for k := 1 to 52 do begin
  ad := [k, k mod 52+1, (k+1) mod 52+1, (k+2) mod 52+1];
  if d and ad = ad then begin
    ok := true;
    break;
  end;
end;
if ok then begin...



Но проблема не в этом.
Проблема в том, что ошибка 215 означает арифметическое переполнение.
Полагаю, у тебя неправильно тасуется колода в
Код

inc(a[i]);
for j:=i+1 to m do a[j]:=a[j-1]+1;

Например, 1 2 3 4 перейдёт в 2 3 4 5, а надо в 2 3 4 1.
a[m] где устанавливается?

Ещё почему ты по массиву идёшь то 0 to m, то 1 to m?

Сообщение отредактировано: TarasBer - 11.04.2013 16:17


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
darkden
сообщение 12.04.2013 10:01
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +



Ещё почему ты по массиву идёшь то 0 to m, то 1 to m?
[/quote]

Спосибо! Ещё раз извините меня за мою безграмотность. Программу писал не я, умельцы с этого сайта. Около 4 лет назад я пользовался этой программой но ошибки не выскакивало, хотя был Win XP а не 7.
Как я понял необходимо заменить:

  
if n<10 then l:=2 else if n<100 then l:=3 else l:=4;
      {form. per. soch.}
   for i:=0 to m do a[i]:=i;
   k1:=0;
   k2:=0;
   repeat
         s:='';
         d:=[];
         for i:=1 to m do begin
            d:=d+[a[i]];
            str(a[i]:l,t);
            s:=s+t
         end;
         if


на

ok := false;

for k := 1 to 52 do begin
  ad := [k, k mod 52+1, (k+1) mod 52+1, (k+2) mod 52+1];
  if d and ad = ad then begin
    ok := true;
    break;
  end;
end;
if ok then begin...


Что нужно ещё заменить что бы колода тасовалось правильно?
Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 30.07.2025 6:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"