1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
1

Зацикливание в программе после операторов for для i и j

10.01.2013, 14:45. Показов 2451. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите,почему происходит зацикливание в программе после операторов for для i и j,зацикливание обозначил {!}.написана в делфи,программа описания координат молекул воды.матрица хх берётся из файла.вот исходник:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
program Kursovaja;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var
  c,en,kn,a,emean,anstep,prop,prop1,anconf,ancon,nstep,nconfi,nprint,ran,ncon,eold,temp,kt,u,ann:real;nall,new,im,k,l,i,j:integer;
  xold:array [1..6] of real;
  inn:array [1..6] of integer;
  xhqold:array[1..4,1..3] of real;
  xhq:array [1..1000,1..4,1..3] of real;
  xx:array [1..1000,1..6] of real;
  eij,enew,ener:array [1..1000] of real;
  f1,f2,f3,f4,f5:file of real;
//       common /a/xx(1000,6)/m/delta,psi,per/d/r(4,4)
//       common r2oo/c/xhq(1000,4,3)/r/im,inn,in(6)
const
       mprint=25000;
       per=31.0734;
       delta=0.15;
       psi=0.1;
       nn=1000;
                FUNCTION urand(ISEED:integer):real;
          var IA,IC,IM:integer;
          begin
          IA:=7141;IC:=54773;IM:=259200;
          ISEED:=(ISEED*IA+IC) mod IM;
          urand:=frac(ISEED)/frac(IM);
          end;
                procedure distan(m,n,nall:integer);
        var a,b,c,d:real;r2,cut{60.347}:real;k,g,h:integer;
            a1:array [1..3] of real;
            xx:array [1..1000,1..3] of real;
            r:array [1..4,1..4] of real;
            xhq:array [1..1000,1..4,1..3] of real;
//      common /a/xx(500,6)/m/delta,psi,per/d/r(4,4),r2oo
//        common /c/xhq(500,4,3)
        begin
        cut:=60.347;
        r2:=0;
        nall:=0;
        for g:=1 to 4 do begin
        for h:=1 to 4 do
        r[g,h]:=0;
        end;
        for k:=1 to 3 do begin
        a:=xx[m,k]-xx[n,k];
        b:=abs(a);
        c:=abs(a+per);
        d:=abs(a-per);
        a1[k]:=a;
        if c<b then if c<d then a1[k]:=a+per;
        if d<b then if d<c then a1[k]:=a-per;
        r2:=r2+sqr(a1[k]);
        end;
        if r2>cut then
        nall:=1;
        for k:=1 to 3 do begin
        a:=a1[k];
        for g:=1 to 4 do begin
        for h:=1 to 4 do
        r[g,h]:=r[g,h]+sqr((a+xhq[m,g,k]-xhq[n,h,k]));
        end;
        end;
        for g:=1 to 4 do begin
        for h:=1 to 4 do
        r[g,h]:=sqrt(r[g,h]);
        end;
        end;
        function potent(l,m:integer):real;
        var potent,pot,r6,aoo{238661.8},coo{268.914},rr,s,r12,r1{2.016},r2,ru2{9.7888} :real;
        q:array [1..4] of real;
        i,j:integer;
        r:array [1..4,1..4] of real;
        begin
             aoo:=238661.8;
             coo:=268.914;
             q[1]:=0.2357;
             q[2]:=0.2357;
             q[3]:=-0.2357;
             q[4]:=-0.2357;
             r1:=2.016;
             r2:=1;
             r12:=4.064256;
             ru2:=9.7888;
//             common /d/r(4,4),r2oo
             r6:=r2*r2*r2;
             r12:=sqr(r6);
             pot:=aoo/r12-coo/r6;
             u:=0;
             if(r2>r12) then begin
             for i:=1 to 4 do begin
             for j:=1 to 4 do
             u:=u+332*q[i]*q[j]/r[i,j];
               if(r2<ru2) then begin
               rr:=sqrt(r2);
               s:=(sqr(rr-r1))*(7.3701-2*rr)/1.37764;
              end
               else
               s:=1;
               end;
               u:=u*s;
               end;
               potent:=pot+u;
               end;
            procedure cohh(n:integer);
//            common /a/xx(500,6)/c/xhq(500,4,3)
            var a,b:array [1..3] of real;r2{0.46184},r1{0.5773},c,d:real; i:integer;
            xhq:array [1..1000,1..4,1..3] of real;
            begin
            r1:=0.5773;
            r2:=0.46184;
            for i:=1 to 3 do begin
            u:=xx[n,i+3];
            a[i]:=cos(u);
            b[i]:=sin(u);
             c:=a[3]+b[3];
             d:=a[3]-b[3];
            end;
      xhq[n,1,1]:=((a[1]*a[2]*d-b[1]*c)*r1+a[1]*b[2]*r1);
      xhq[n,1,2]:=((b[1]*a[2]*d+a[1]*c)*r1+b[1]*b[2]*r1);
      xhq[n,1,3]:=((-b[2])*d*r1+a[2]*r1);
      xhq[n,2,1]:=((-a[1]*a[2]*d-b[1]*c)*r1+a[1]*b[2]*r1);
      xhq[n,2,2]:=((-b[1]*a[2]*d+a[1]*c)*r1+b[1]*b[2]*r1);
      xhq[n,2,3]:=(b[2]*d*r1+a[2]*r1);
      xhq[n,3,1]:=(a[1]*a[2]*c+b[1]*d-a[1]*b[2])*r2;
      xhq[n,3,2]:=(b[1]*a[2]*c-a[1]*d-b[1]*b[2])*r2;
      xhq[n,3,3]:=(-b[2]*c-a[2])*r2;
      xhq[n,4,1]:=(-a[1]*a[2]*c-b[1]*d-a[1]*b[2])*r2;
      xhq[n,4,2]:=(-b[1]*a[2]*c+a[1]*d-b[1]*b[2])*r2;
      xhq[n,4,3]:=(b[2]*c-a[2])*r2;
      end;
      procedure move(new:integer;xold:array of real);
//        common /a/xx(500,6)/m/delta,psi,per/r/im,inn,in(6)
        var pi2{6.28318}:real;
        i,iy:integer;
        per1,per2,per3,d,a:real;
        begin
        pi2:=6.28318;
        per1:=per/2;
        per2:=-per1;
        per3:=per;
        d:=delta;
        new:=round(1000*random(1000))+1;
        for i:=1 to 6 do begin
        if i=3 then begin
        xold[3]:=xx[new,3];
        iy:=inn[3];
        a:=xx[new,3]+psi*(2*urand(iy)-1);
        inn[3]:=iy;
        if(a>=pi2) then a:=a-per;
        if(a<0) then a:=a+per;
        xx[new,3]:=a;
        end else begin
        xold[i]:=xx[new,i];
        iy:=inn[i];
        a:=xx[new,i]+d*(2*urand(iy)-1);
        inn[i]:=iy;
        if(a>=per1) then a:=a-per3;
        if(a<per2) then a:=a+per3;
        xx[new,i]:=a;
        end;
        end;
        end;
 
begin
       temp:=298.15;
       kt:=1.985e-3*temp;
       nprint:=0;
       ncon:=0;
       nstep:=0;
       nconfi:=0;
       assign(f1,'mcst1000.txt');
       reset(f1);
       for i:=1 to nn do begin
       for j:=1 to 6 do
       read(f1,xx[i,j]);
       end;
       write(xx[nn,6]);
       readln;
       close(f1);
//       format(2(5i10/),i10)
         for i:=1 to nn do
         cohh(i);
         l:=0;
         for i:=1 to nn do begin
         for j:=1 to nn do begin
         if(j<i) then begin
         u:=0;
         l:=l+1;
        distan(i,j,nall);
         if nall<>1 then begin
         u:=potent(i,j);
         eij[l]:=u;
         end
         else
         eij[l]:=0;
         end;
         end;
         end;
{!}
       repeat
       repeat
           nstep:=nstep+1;
           nprint:=nprint+1;
       {процедура не происходит из-за отсутствия new} move(new,xold);
             eold:=ener[new];
       for i:=1 to 4 do begin
        for j:=1 to 3 do
        xhqold[i,j]:=xhq[new,i,j];
        end;
         cohh(new);
         en:=0;
        for i:=1 to nn do begin
        if i<>new then begin
        u:=0;
        distan(i,new,nall);
        end;
        if nall<>1 then begin
         u:=potent(i,new);
         en:=en+u;
         end;
         enew[i]:=u;
         end;
{!}
           if en>eold then begin
           ran:=urand(im);
           a:=(eold-en)/kt;
           a:=exp(a);
           if a<=ran then begin
           for i:=1 to 6 do
           xx[new,i]:=xold[i];
           for i:=1 to 4 do begin
           for j:=1 to 3 do
           xhq[new,i,j]:=xhqold[i,j];
           end;
           end;
           end;
        until false;
{!}
               nconfi:=nconfi+1;
               ncon:=ncon+1;
               {for i:=1 to nn do
//               if(i-new) then
               kn:=((new-1)*(new-2))/(2+i);
//               else
               kn:=((i-1)*(i-2))/(2+new);
               ener[i]:=ener[i]-eij[kn]+enew[i];
//               (eij[kn]):=enew[i];
}               ener[new]:=en;
               if ncon<mprint then c:=0;
               until false;
            emean:=0;
            for i:=1 to nn do
       emean:=emean+ener[i];
//       ann:=frac(nn);
       emean:=emean/nn;
       prop:= {frac}(nconfi)/nstep;
       prop1:= {frac}(ncon)/nprint;
       anstep:={frac}(nstep)/nn;
       anconf:={frac}(nconfi)/nn;
       ancon:={frac}(ncon)/nn;
       assignfile(f2,'dannye.txt');
      rewrite(f2);
      write (f2,nstep,anstep,nconfi,anconf,ncon,ancon,{prop,prop1,}emean,nstep,nconfi);
//    format(2,'полное число',10x,'в среднем на частицу'/1x,'рассмотр. конфиг.=',i8,5X,f10.2/1x,'принятых конфиг.=',i8,5x,f10.2/1x,'принято на отрезке-',i8,5x,f10.2/))
//    format(1x,'пропорция принятых конфиг.=',f7.3/1x,'на отрезке=',f7.3,/1x,'средняя энергия частицы=',f8.4/)
       close(f2);
       assignfile(f3,'coordsOiUgly.txt');
       rewrite(f3);
       for i:=1 to nn do begin
       for j:=1 to 6 do
       write (f3,xx[i,j]);
       end;
       close(f3);
       assignfile(f4,'coordsHiQ.txt');
       rewrite(f4);
       for i:=1 to nn do begin
       for j:=1 to 4 do begin
       for k:=1 to 3 do
       write(f4,xhq[i,j,k]);
       end;
       end;
       assign(f5,'energiya.txt');
       rewrite(f5);
       for i:=1 to nn do
       write(f5,ener[i]);
       close(f5)
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2013, 14:45
Ответы с готовыми решениями:

Зацикливание в программе
Здравствуйте! Помогите, пожалуйста. У меня в программе требует проверить, нечетное ли...

Зацикливание в программе
Задание: Протабулировать функцию, использовав цикл с предусловием. Аргументы и результаты вывести...

В программе происходит зацикливание
Есть код простой и несложный. Проблема в том что в цикле while по отдельности условия выполняются,...

Где в программе перегрузка операторов?
Подскажите где в этой программе перегрузка операторов и для чего она вообще нужна? ...

44
46 / 46 / 1
Регистрация: 13.08.2012
Сообщений: 456
10.01.2013, 15:43 2
casey_artem, что ето?
Delphi
1
2
repeat
repeat
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 16:04  [ТС] 3
это повтор 1 пока выполняется неравенство a<=ran, 2-ncon<mprint.могу скинуть исходник фортрана-я оттуда переписывал
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 16:10 4
Два Repeat у тебя есть. Два Until False тоже есть. Это зацикливание до бесконечности. Где выход по условию? Или в Until, или If Then Break.

Не по теме:

Чтобы увидеть ответ - нужно обновлять страницу.

0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 16:17  [ТС] 5
поправка-не выполняется

Добавлено через 3 минуты
не много не понял.until false после условия,т.е. если условие не выполняется-это false,когда же оно выполнится repeat прекращается
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 16:18 6
Да, после Until - условие завершения цикла.
Но если поставишь: Until True; Пройдёт только один цикл.
0
46 / 46 / 1
Регистрация: 13.08.2012
Сообщений: 456
10.01.2013, 16:20 7
Delphi
1
2
3
4
repeat
repeat
until ncon<mprint 
until a>ran
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 16:28  [ТС] 8
Вот исходник.Может процедуру повтора я неправильно описал..

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
c Потенциал ST2, число частиц в ячейке. N=1000, T=298.15 К
c Обозначения xx - массив координат молекул. Для каждой молекулы первые
c три – декартовы координаты атома O, следующие - три угла Эйлера.
c eij - матрица потенциальной энергии хранится в виде
c вектора N*(N-1)/2, xhq - матрица декартовых координат атомов Н и зарядов q,
c r(4,4) - расстояния между зарядами двух молекул.
c Остальные массивы вспомогательные, см. пояснения по тексту программы
real xold(6),enew(1000),temp/298.15/,kt,eij(499500),ener(1000)
; ,xhqold(4,3)
common /a/xx(1000,6)/m/delta,psi,per/d/r(4,4),r2oo/c/xhq(1000,4,3; )/r/im,inn,in(6)
c mprint - частота сброса конфигураций на диск
mprint=25000
kt=1.985e-3*temp
c период ячейки рассчитывается по экспериментальному значению. плотности
c макс. смещение по координате и углу, число молекул
per=31.0734
delta=.15
psi=.1
nn=1000
c считывание файла текущей конфигурации, и чисел для датчика случ.чисел
open(2,file='mcst1000.dat',access='sequential',form='unformatted')
read(2)((xx(i,j),j=1,6),i=1,nn),ener
close(2,status='keep')
open(2,file='mcst1000.ran',status='old',access
* ='sequential',form='formatted')
c первые числа -случайные, nstep - полное число рассмотренных конфиг.,
c nconfi - полное число принятых конфиг., numwr - номер записи на диск.
read(2,111) im,inn,in,nstep,nconfi,numwr
close(2,status='keep')
111 format(2(5i10/),i10)
c расчет декартовых координат всех центров взаимодействия
do 1 i=1,nn
1 call cohh(i)
c расчет матрицы энергии парных взаимодействий
l=0
do 44 i=1,nn
do 44 j=1,nn
if(j.ge.i) goto 44
u=0.
l=l+1
call distan(i,j,nall)
if(nall.eq.1) then
eij(l)=0.
go to 44
endif
u=potent(i,j)
eij(l)=u
44 continue
c Основной блок операторов
31 continue
c счетчики шагов
nprint=0
ncon=0
2 nstep=nstep+1
nprint=nprint+1
c выбор и сдвиг молекулы
call move(new,xold)
c сохранение старых характеристик
eold=ener(new)
do 3 i=1,4
do 3 j=1,3
3 xhqold(i,j)=xhq(new,i,j)
c расчет координат сдвинутой молекулы
call cohh(new)
c расчет энергии новой конфигурации
en=0.
do 4 i=1,nn
if(i.eq.new) goto 4
u=0.
call distan(i,new,nall)
if(nall.eq.1) go to 13
u=potent(i,new)
en=en+u
13 continue
enew(i)=u
4 continue
c алгоритм принятия - отвержения конфигурации
if(en.le.eold) goto 7
ran=urand(im)
a=(eold-en)/kt
a=exp(a)
if(a.gt.ran) goto 7
do 5 i= 1,6
5 xx(new,i)=xold(i)
do 6 i=1,4
do 6 j=1,3
6 xhq(new,i,j)=xhqold(i,j)
c отвергнута
goto 2
c конфигурация принята, пересчет энергетических матриц
7 nconfi=nconfi+1
ncon=ncon+1
do 21 i=1,nn
if(i-new) 20,21,22
20 k=((new-1)*(new-2))/2+i
goto 23
22 k=((i-1)*(i-2))/2+new
23 ener(i)=ener(i)-eij(k)+enew(i)
eij(k)=enew(i)
21 continue
ener(new)=en
if(ncon.lt.mprint) goto 2
c поготовка печати и печать промежуточных результатов
emean=0.
do 8 i=1,nn
8 emean=emean+ener(i)
ann=float(nn)
emean=emean/2./ann
prop= float(nconfi)/nstep
prop1= float(ncon)/nprint
anstep=float(nstep)/ann
anconf=float(nconfi)/ann
ancon=float(ncon)/ann
write(*,104) nstep,anstep,nconfi,anconf,ncon,ancon
write(*,104) nstep,anstep,nconfi,anconf,ncon,ancon
104 format(1x,'полное число',10x,'в среднем на частицу'/1x,
* 'рассмотр. конфиг.=',i8,5X,f10.2/1x,'принятых конфиг.=',i8,5x,
* f10.2/1x,'принято на отрезке-',i8,5x,f10.2/)
write(*,105) prop,prop1,emean
105 format(1x,'пропорция принятых конфиг.=',f7.3/1x,'на отрезке=',
*f7.3,/1x,'средняя энергия частицы=',f8.4/)
open(2,file='mcst1000.dat',access
* ='sequential',form='unformatted')
write(2)((xx(i,j),j=1,6),i=1,nn),ener
close(2,status='keep')
numwr=numwr+1
write(*,*) '-ЎЌЅр Ї ЏЈсЈ=',numwr
open(2,file='mcst1000.ran',access
* ='sequential',form='formatted')
write(2,111) im,inn,in,nstep,nconfi,numwr
close(2,status='keep')
c вывод результатов в файл для дальнейшей статистической обработки
c снять комментарии после выхода на равновесный участок
c open(4,file='st1000.dat',
c * access='direct',form='unformatted',recl=24004)
c write(4,rec=numwr) numwr,xx
c close(4,status='keep')
c программа зациклена, снимать по Ctrl-C
goto 31
stop
end
c Подпрограмма выбора и сдвига молекулы
subroutine move(new,xold)
common /a/xx(1000,6)/m/delta,psi,per
;/r/im,inn,in(6)
real pi2/6.28318/,xold(6)
integer nn/1000/
per1=per/2.
per2=-per1
per3=per
d=delta
new=ifix(nn*urand(inn))+1
do 1 i=1,6
xold(i)=xx(new,i)
iy=in(i)
a=xx(new,i)+d*(2.*urand(iy)-1.)
in(i)=iy
if(a.ge.per1) a=a-per3
if(a.lt.per2) a=a+per3
xx(new,i)=a
if(i.ne.3) goto 1
d=psi
per1=pi2
per2=0.
per3=pi2
1 continue
return
end
c Подпрограмма расчета расстояния между двумя молекулами
c cut - квадрат радиуса обрезания потенциала.
subroutine distan(m,n,nall)
real a1(3),cut/60.347/
common /a/xx(1000,6)/m/delta,psi,per/d/r(4,4),r2oo
* /c/xhq(1000,4,3)
nall=0
r2oo=0.
do i=1,4
do j=1,4
r(i,j)=0.
end do
end do
do 1 k=1,3
a=xx(m,k)-xx(n,k)
b=abs(a)
c=abs(a+per)
d=abs(a-per)
a1(k)=a
if((c.lt.b).and.(c.lt.d)) a1(k)=a+per
if((d.lt.b).and.(d.lt.c)) a1(k)=a-per
r2oo=r2oo+a1(k)**2
if(r2oo.ge.cut) then
nall=1
return
endif
1 continue
do 2 k=1,3
a=a1(k)
do 3 i=1,4
do 3 j=1,4
3 r(i,j)=r(i,j)+(a+xhq(m,i,k)-xhq(n,j,k))**2
2 continue
do i=1,4
do j=1,4
r(i,j)=sqrt(r(i,j))
end do
end do
return
end
c Подпрограмма расчета энергии взаимодействия двух молекул воды (ST2)
function potent(l,m)
real aoo/238661.8/,coo/268.914/,q(4)/0.2357,0.2357,
* -.2357, -.2357/,rl/2.016/,rl2/4.064256/,
* ru2/9.7888/
common /d/r(4,4),r2oo
r6oo=r2oo**3
r12oo=r6oo**2
pot=aoo/r12oo-coo/r6oo
u=0.
if(r2oo.gt.rl2) then
do 1 i=1,4
do 1 j=1,4
1 u=u+332.*q(i)*q(j)/r(i,j)
c сглаживающая функция s
if(r2oo.lt.ru2) then
rr=sqrt(r2oo)
s=(rr-rl)**2*(7.3701-2.*rr)/1.37764
else
s=1.
endif
u=u*s
endif
potent=pot+u
return
end
c Подпрограмма расчета декартовых координат центров взаимодействия
с молекулы
subroutine cohh(n)
common /a/xx(1000,6)/c/xhq(1000,4,3)
real a(3),b(3),r2/.46184/,r1/.5773/
do 1 i=1,3
u=xx(n,i+3)
a(i)=cos(u)
1 b(i)=sin(u)
c=a(3)+b(3)
d=a(3)-b(3)
do 2 i=1,2
xhq(n,i,1)=((-1)**(i+1)*(a(1)*a(2)*d-b(1)*c)*r1+a(1)
; *b(2)*r1)
xhq(n,i,2)=((-1)**(i+1)*(b(1)*a(2)*d+a(1)*c)*r1+b(1)
; *b(2)*r1)
2 xhq(n,i,3)=((-1)**i*b(2)*d*r1+a(2)*r1)
xhq(n,3,1)=(a(1)*a(2)*c+b(1)*d-a(1)*b(2))*r2
xhq(n,3,2)=(b(1)*a(2)*c-a(1)*d-b(1)*b(2))*r2
xhq(n,3,3)=(-b(2)*c-a(2))*r2
xhq(n,4,1)=(-a(1)*a(2)*c-b(1)*d-a(1)*b(2))*r2
xhq(n,4,2)=(-b(1)*a(2)*c+a(1)*d-b(1)*b(2))*r2
xhq(n,4,3)=(b(2)*c-a(2))*r2
return
end
c Датчик случайных чисел
FUNCTION urand(ISEED)
PARAMETER(IA=7141,IC=54773,IM=259200)
ISEED=MOD(ISEED*IA+IC,IM)
urand=FLOAT(ISEED)/FLOAT(IM)
RETURN
END
Добавлено через 2 минуты
повтор исправил,всё равно зацикливание.Самое первое происходит при приравнивании массива eij кооринаты l к 0.в исходнике написано именно l но почему-не знаю.Пробовал ставить i или j-идёт,но естественно результаты искажает
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 16:33 9
Выложи весь проект Delphi в архиве. Легче походить по шагам, чем разобраться в таком коде по листу. Скрепка в панели редактора.
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 16:39  [ТС] 10
В архиве файлы,которые программа выводит(проверял при закрытии операторскими скобками циклов)
Вложения
Тип файла: rar new.rar (89.3 Кб, 3 просмотров)
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 16:44  [ТС] 11
Прошу извинить,массив eij должен быть размера 499500.но зацикливание остаётся..
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 16:53 12
Буду смотреть. Только сначала код упорядочу, чтобы он читабельным стал. А ты, если можешь, написал бы описание алгоритма. Хотя-бы примерно.
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 16:58  [ТС] 13
Алгоритм
Миниатюры
Зацикливание в программе после операторов for для i и j  
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 17:02  [ТС] 14
есть ещё одна загвоздка- в функции potent вводятся данные l и m,но в самой функции они нигде не используются.в общем в этой функции считаются только как констант некоторые величины,но где взять переменную r2oo я не знаю,в базе её нет.поэтому в программе прировнял к 1
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 17:04 15
Ладно, будут вопросы - буду спрашивать. Думаю, раньше чем через час вопросов не появится.
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 17:08  [ТС] 16
Спасибо Вам большое.
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 17:11 17
Да пока не за что. Блок-схема слишком общая. А не зная конфигурации этих файлов, как этот сдвиг происходит и как считаются энергии - довольно сложно разобраться в чужом коде.
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 17:16  [ТС] 18
в архиве файл mcst1000-конфигурация(координаты молекул воды),программа считывает их оттуда,энергия приравнена к 5.проблема лишь в циклах...
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
10.01.2013, 17:16 19
И там какие-нибудь видимые результаты, кроме бинарных файлов, должны быть? Как проверить, что программа нормально отработала?
0
1 / 1 / 0
Регистрация: 01.11.2012
Сообщений: 58
10.01.2013, 17:20  [ТС] 20
нет,программа выводит в разные файлы новые координаты и энергии.там всего 4 файла должны выводиться,но такие данные как ncon я закомментировал,т.к. они не считаются без готовой конфигурации.самое главное-энергия и координаты.)
0
10.01.2013, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2013, 17:20
Помогаю со студенческими работами здесь

Перегрузка операторов +, -,*.(в готовой программе)
Здравствуйте, я не понимаю как реализовать перегрузку операторов в готовой программе #include...

Как посчитать количество операторов в программе?
Для оценки надежности по модели Шумана. Может есть какие-нить утилиты которые это делают? Или...

Перегрузка операторов в уже сделанной программе
Мне нужно перегрузить некоторые операторы : void operator = (int); // Включить и выключить сеть...

посчитать сколько раз в программе операторов “cоut”.
нужна помощь необходимо посчитать сколько в программе операторов сout


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru