Dec 16 12:13 1996 exp29.for Page 1 1 C EXPERIMENTO 29 2 INTEGER*2 HAB(30,30),REL(30,30),MOV2(30,30) 3 INTEGER B(8)/'.','-','+', '*',' ',' ',' ','@'/ 4 INTEGER ESC(30,30) 5 INTEGER*2 P8X(10),P8Y(10) 6 INTEGER XMAX,YMAX 7 INTEGER*2 DM,VID1,VID2,VID3,VID4,VID8,DT,TMAX,TESC,T 8 INTEGER*2 XHR1,XHR2,YHR1,YHR2,X,Y 9 INTEGER*2 XH1,XH2,YH1,YH2 10 INTEGER*2 X8,Y8,D1,D2,D,X81,X82,X83,Y81,Y82,X8A,Y8A,XPF8,YPF8 11 INTEGER*2 XPF0,YPF0 12 INTEGER*2 X1,Y1,X11,X12,X13,Y11,Y12,X1A,Y1A 13 INTEGER*2 X2,Y2,XD2,YD2,XD21,YD21,XPF2,YPF2,X21,X22,X23,Y21,Y22 14 INTEGER*2 X2A,Y2A,C2,XPFA2,YPFA2,C23,C24 15 INTEGER*2 X3,Y3,C3,X31,X32,X33,Y31,Y32,X3A,Y3A 16 INTEGER*2 X4,Y4,C4,X41,X42,X43,Y41,Y42,X4A,Y4A 17 INTEGER VMIN4,VMAX4 18 XMAX=30 19 YMAX=30 20 VID1=3 21 VID2=60 22 VID3=30 23 VMIN4=5 24 VMAX4=50 25 VID8=300 26 MIDX2=-1 27 MADX2=1 28 MIDY2=-1 29 MADY2=1 30 NMAX2=8 31 MIDX8=-1 32 MADX8=1 33 MIDY8=-1 34 MADY8=1 35 MIX8=8 36 MAX8=23 37 MIY8=8 38 MAY8=23 39 N1=0 40 NUM1=0 41 NUM8=4 42 P8X(1)=20 43 P8Y(1)=10 44 P8X(2)=10 45 P8Y(2)=10 46 P8X(3)=20 47 P8Y(3)=20 48 P8X(4)=10 49 P8Y(4)=20 50 N8=0
Dec 16 12:13 1996 exp29.for Page 2 51 DT=1 52 TESC=DT 53 TMAX=300 54 T=1 55 NIM1=735 56 NAL1=NAL(0,0,NIM1) 57 C 58 C ********************************************************************** 59 C 60 C HACER UNO HAB(X,Y),REL(X,Y) Y MOV2(X,Y) 61 1000 XHR1=1 62 XHR2=XMAX 63 YHR1=1 64 YHR2=YMAX 65 DO 1020 Y=YHR1,YHR2 66 DO 1010 X=XHR1,XHR2 67 HAB(X,Y)=1 68 REL(X,Y)=1 69 MOV2(X,Y)=0 70 1010 CONTINUE 71 1020 CONTINUE 72 C 73 C ********************************************************************** 74 C 75 C UBICAR LOS 8'S 76 DO 1810 I=1,NUM8 77 X=P8X(I) 78 Y=P8Y(I) 79 HAB(X,Y)=8 80 REL(X,Y)=VID8 81 1810 CONTINUE 82 C 83 C ********************************************************************** 84 C 85 C ADVANCE DEL PELOJ 86 1800 CONTINUE 87 DO 1720 Y=1,YMAX 88 DO 1710 X=1,XMAX 89 IF(HAB(X,Y).EQ.1) GO TO 1705 90 IF(HAB(X,Y).EQ.0) GO TO 1703 91 IF(REL(X,Y).NE.0)REL(X,Y)=REL(X,Y)-1 92 C DETECTAR SI HAY ELEMENTOS QUE DEBEN DECAER 0 1'S QUE DEBEN MOVERSE 93 IF(REL(X,Y).GT.0) GO TO 1705 94 IF(HAB(X,Y).EQ.2) NUM1=NUM1+1 95 IF(HAB(X,Y).EQ.3) NUM1=NUM1+1 96 IF(HAB(X,Y).EQ.4) NUM1=NUM1+1 97 HAB(X,Y)=1 98 REL(X,Y)=1 99 GO TO 1705 100 1703 CONTINUE
Dec 16 12:13 1996 exp29.for Page 3 101 C MOVIMIENTO DE LOS 1'S (MEDIANTE MOVIENTO DE LOS 0'S) 102 XPF0=NAL(1,XMAX,0) 103 YPF0=NAL(1,YMAX,0) 104 IF(HAB(XPF0,YPF0).NE.1) GO TO 1710 105 HAB(X,Y)=1 106 REL(X,Y)=1 107 IF(NUM1.GT.0) GO TO 1702 108 HAB(XPF0,YPF0)=0 109 REL(XPF0,YPF0)=0 110 GO TO 1710 111 1702 NUM1=NUM1-1 112 GO TO 1710 113 1705 CONTINUE 114 1710 CONTINUE 115 1720 CONTINUE 116 NUM1A=NUM1 117 1100 CONTINUE 118 C 119 C ********************************************************************** 120 C 121 C MOVIMIENTO DE LOS 8'S 122 1200 CONTINUE 123 DO 1820 I=1,NUM8 124 X=P8X(I) 125 Y=P8Y(I) 126 NAX8=NAL(MIDX8,MADX8,0) 127 NAY8=NAL(MIDY8,MADY8,0) 128 XPF8=X+NAX8 129 YPF8=Y+NAY8 130 IF(HAB(XPF8,YPF8).NE.1) GO TO 1820 131 IF((HAB(XPF8,Y).EQ.4).AND.(HAB(X,YPF8).EQ.4)) GO TO 1820 132 IF((XPF8.LT.MIX8).OR.(XPF8.GT.MAX8)) GO TO 1820 133 IF((YPF8.LT.MIY8).OR.(YPF8.GT.MAY8)) GO TO 1820 134 HAB(X,Y)=1 135 HAB(XPF8,YPF8)=8 136 REL(XPF8,YPF8)=REL(X,Y) 137 REL(X,Y)=1 138 P8X(I)=XPF8 139 P8Y(I)=YPF8 140 1820 CONTINUE 141 C 142 C ********************************************************************** 143 C 144 1821 CONTINUE 145 C RECORRER HAB(X,Y) 146 XH1=1 147 XH2=XMAX 148 YH1=1 149 YH2=YMAX 150 DO 1220 Y=YH1,YH2
Dec 16 12:13 1996 exp29.for Page 4 151 DO 1210 X=XH1,XH2 152 IF(HAB(X,Y).EQ.0) GO TO 1210 153 IF(HAB(X,Y).EQ.1) GO TO 1210 154 IF(HAB(X,Y).EQ.2) GO TO 200 155 IF(HAB(X,Y).EQ.3) GO TO 300 156 IF(HAB(X,Y).EQ.4) GO TO 400 157 IF(HAB(X,Y).EQ.8) GO TO 1 158 GO TO 2990 159 C 160 C ********************************************************************** 161 C 162 C ELEMENTO 8 163 1 X8=X 164 Y8=Y 165 C RECORRER EL ENTORNO DE ESTE 8 166 D=1 167 X81=X8-D 168 X82=X8+D 169 Y81=Y8-D 170 Y82=Y8+D 171 DO 20 Y8A=Y81,Y82 172 X83=2 173 IF((Y8A.EQ.(Y8-D)).OR.(Y8A.EQ.(Y8+D))) X83=1 174 DO 10 X8A=X81,X82,X83 175 IF(HAB(X8A,Y8A).EQ.0) GO TO 10 176 IF(HAB(X8A,Y8A).EQ.1) GO TO 3 177 GO TO 10 178 3 IF((HAB(X8A,Y8).EQ.4).AND.(HAB(X8,Y8A).EQ.4)) GO TO 10 179 GO TO 100 180 C 181 C ********************************************************************** 182 C 183 C ELEMENTO 1 184 100 X1=X8A 185 Y1=Y8A 186 IF(D.NE.1) GO TO 10 187 C RECORRER EL ENTORNO DE ESTE 1 188 X11=X1-1 189 X12=X1+1 190 Y11=Y1-1 191 Y12=Y1+1 192 DO 120 Y1A=Y11,Y12 193 X13=1 194 IF(Y1A.EQ.Y1) X13=2 195 DO 110 X1A=X11,X12,X13 196 IF(HAB(X1A,Y1A).NE.1) GO TO 110 197 IF((HAB(X1A,Y1).EQ.4).AND.(HAB(X1,Y1A).EQ.4)) GO TO 110 198 HAB(X1A,Y1A)=2 199 REL(X1A,Y1A)=VID2 200 HAB(X1,Y1)=0
Dec 16 12:13 1996 exp29.for Page 5 201 REL(X1,Y1)=0 202 GO TO 10 203 110 CONTINUE 204 120 CONTINUE 205 10 CONTINUE 206 20 CONTINUE 207 GO TO 1210 208 C 209 C ********************************************************************** 210 C 211 C ELEMENTO 2 212 200 X2=X 213 Y2=Y 214 C TRANSFORMACION DE ESTE 2 215 208 C2=0 216 C23=0 217 C24=0 218 C RECORRER EL ENTORNO DE ESTE 2 219 X21=X2-1 220 X22=X2+1 221 Y21=Y2-1 222 Y22=Y2+1 223 DO 220 Y2A=Y21,Y22 224 X23=1 225 IF(Y2A.EQ.Y2) X23=2 226 DO 210 X2A=X21,X22,X23 227 IF(HAB(X2A,Y2A).EQ.2) C2=C2+1 228 IF(HAB(X2A,Y2A).EQ.3) C23=1 229 IF(HAB(X2A,Y2A).EQ.4) C24=C24+1 230 210 CONTINUE 231 220 CONTINUE 232 C SI NO HAY MAS DE UN 4 Y HAY UN 2 O UNO O MAS 3'S, ESTE 2 SE TRANSFORMA 233 IF(.NOT.((C24.LE.1).AND.((C2.EQ.1).OR.(C23.EQ.1)))) GO TO 221 234 HAB(X2,Y2)=3 235 REL(X2,Y2)=VID3 236 GO TO 1210 237 C MOVIMIENTO DE ESTE 2 238 221 N2=0 239 IF(MOV2(X2,Y2).NE.1) GO TO 223 240 MOV2(X2,Y2)=0 241 GO TO 1210 242 223 NAX2=NAL(MIDX2,MADX2,0) 243 NAY2=NAL(MIDY2,MADY2,0) 244 XPF2=X2+NAX2 245 YPF2=Y2+NAY2 246 IF((HAB(XPF2,YPF2).EQ.4).OR.(HAB(XPF2,YPF2).EQ.3)) GO TO 223 247 IF((XPF2.LT.2).OR.(XPF2.GT.(XMAX-1))) GO TO 1210 248 IF((YPF2.LT.2).OR.(YPF2.GT.(YMAX-1))) GO TO 1210 249 IF((HAB(XPF2,Y2).EQ.4).AND.(HAB(X2,YPF2).EQ.4)) GO TO 205 250 IF(HAB(XPF2,YPF2).EQ.1) GO TO 203
Dec 16 12:13 1996 exp29.for Page 6 251 205 N2=N2+1 252 IF(N2.GE.NMAX2) GO TO 1210 253 GO TO 223 254 203 HAB(X2,Y2)=1 255 HAB(XPF2,YPF2)=2 256 REL(XPF2,YPF2)=REL(X2,Y2) 257 REL(X2,Y2)=1 258 IF((XPF2.GT.X2).OR.(YPF2.GT.Y2)) MOV2(XPF2,YPF2)=1 259 GO TO 1210 260 C 261 C ********************************************************************** 262 C 263 C ELEMENTO 3 264 300 X3=X 265 Y3=Y 266 C RECORRER EL ENTORNO DE ESTE 3 267 C MOLINETE SINISTROGIRO 268 X31=X3+1 269 Y31=Y3+1 270 C3=0 271 MAR3=0 272 IF((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)) MAR3=1 273 305 CONTINUE 274 X3A=X31 275 Y3A=Y31 276 IF((X31.GE.X3).AND.(Y31.LT.Y3)) X3A=X31-1 277 IF((X31.LE.X3).AND.(Y31.GT.Y3)) X3A=X31+1 278 IF((Y31.LE.Y3).AND.(X31.LT.X3)) Y3A=Y31+1 279 IF((Y31.GE.Y3).AND.(X31.GT.X3)) Y3A=Y31-1 280 X31=X3A 281 Y31=Y3A 282 IF((.NOT.((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4))) 283 2.AND.(MAR3.EQ.1)) C3=C3+1 284 IF(((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)).AND.(C3.EQ.0)) 285 2 MAR3=1 286 IF(((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)).AND.(C3.GT.0)) 287 2 MAR3=0 288 IF(.NOT.((C3.GT.0).AND.(C3.LT.6).AND.(MAR3.EQ.0))) GO TO 307 289 C TRANSFORMACION DE ESTE 3 EN 4 290 HAB(X3,Y3)=4 291 REL(X3,Y3)=NAL(VMIN4,VMAX4,0) 292 GO TO 1210 293 307 CONTINUE 294 IF((X31.EQ.X3).AND.(Y31.EQ.(Y3+1))) GO TO 1210 295 GO TO 305 296 C 297 C ********************************************************************** 298 C 299 C ELEMENTO 4 300 400 X4=X
Dec 16 12:13 1996 exp29.for Page 7 301 Y4=Y 302 C RECORRER EL ENTORNO DE ESTE 4 303 C MOLINETE SINISTROGIRO 304 X41=X4+1 305 Y41=Y4+1 306 C4=0 307 MAR4=0 308 IF((HAB(X41,Y41).EQ.4).OR.(HAB(X41,Y41).EQ.3)) MAR4=1 309 405 CONTINUE 310 X4A=X41 311 Y4A=Y41 312 IF((X41.GE.X4).AND.(Y41.LT.Y4)) X4A=X41-1 313 IF((X41.LE.X4).AND.(Y41.GT.Y4)) X4A=X41+1 314 IF((Y41.LE.Y4).AND.(X41.LT.X4)) Y4A=Y41+1 315 IF((Y41.GE.Y4).AND.(X41.GT.X4)) Y4A=Y41-1 316 X41=X4A 317 Y41=Y4A 318 IF((.NOT.((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4))) 319 2.AND.(MAR4.EQ.1)) C4=C4+1 320 IF(((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)).AND.(C4.EQ.0)) 321 2 MAR4=1 322 IF(((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)).AND.(C4.GT.0)) 323 2 MAR4=0 324 IF((C4.GT.0).AND.(C4.LT.6).AND.(MAR4.EQ.0)) GO TO 1210 325 IF((X41.EQ.X4).AND.(Y41.EQ.(Y4+1)))GO TO 408 326 GO TO 405 327 408 CONTINUE 328 C TRANSFORMACION DE ESTE 4 EN 3 329 HAB(X4,Y4)=3 330 REL(X4,Y4)=VID3 331 GO TO 1210 332 C 333 C ********************************************************************** 334 C 335 1210 CONTINUE 336 1220 CONTINUE 337 C 338 C ********************************************************************** 339 C 340 C ESCRIBIR HAB(X,Y) 341 2000 CONTINUE 342 IF(TESC.LT.DT) GO TO 2100 343 TESC=0 344 WRITE(3,2052) NUM1A,T 345 2052 FORMAT('1',///,15X,'NUM1=',I5,45X,'T=',I5,///) 346 DO 2020 Y=1,YMAX 347 DO 2010 X=1,XMAX 348 NN=HAB(X,Y) 349 IF(NN.NE.0) GO TO 2005 350 ESC(X,Y)=B(7)
Dec 16 12:13 1996 exp29.for Page 8 351 GO TO 2010 352 2005 ESC(X,Y)=B(NN) 353 2010 CONTINUE 354 2020 CONTINUE 355 WRITE(3,2092) ((ESC(X,Y),X=1,XMAX),Y=1,YMAX) 356 2092 FORMAT(' ',50X,30A1) 357 C 358 C ********************************************************************** 359 C 360 C AVANCE DEL TIEMPO 361 2100 IF(T.GE.TMAX) GO TO 3000 362 T=T+1 363 TESC=TESC+1 364 GO TO 1800 365 2990 WRITE(3,2992) 366 2992 FORMAT('0',///,3X,'ELEMENTO DESCONOCIDO',//) 367 3000 STOP 368 END Nov 14 16:15 1996 nal.for Page 1 1 INTEGER FUNCTION NAL (LO, HI, SALT) 2 INTEGER LO, HI, SALT 3 INTEGER SEED 4 IF (SALT.NE.0) SEED=SALT 5 NAL = LO + INT((RAN(SEED) * FLOAT(HI-LO)) + 0.5) 6 RETURN 7 END
Copyright © 1997 All Rights Reserved.
Timestamp: Tue Dec 31 18:43:32 GMT 1996