悬赏求解决SUBSCRIPT OUT OF RANGE,BASIC.

zzppxx_321 2007-06-13 12:45:59
BASIC做的一个灰色模型程序,运行后提示"SUBSCRIPT OUT OF RANGE",指针在2090行.求高手解决.源代码如下:
10 REM****************************************************
20 REM* ****灰色状态方程计算程序***** *
30 REM* NAME:GM(1,N) *
40 REM****************************************************
100 CLS : PRINT "********GM(1,N)*********"
110 DIM Y(10, 60): GOSUB 5000
120 OPEN "i", #1, WJ$
130 INPUT #1, GS, T0, TN
140 MN = TN - T0 + 1
150 FOR I = 1 TO GS
160 INPUT #1, MC$(I)
170 FOR J = 1 TO MN
180 INPUT #1, Z(I, J)
190 NEXT: NEXT
200 CLOSE
210 PRINT : PRINT "ZHI BIAO SHU:"; GS, "QI SHI SHI XU"; T0, "ZHONG ZHI SHI XU"; TN
220 PRINT : INPUT "JIAN MO QI SHI NIAN $ XUHAO T1="; T1
230 INPUT "JIAN MO ZHONG ZHI NIAN & XUHAO T2="; T2
240 PRINT "JIAN MO QI ZHI NIAN & XU HAO)"; T1; "---"; T2
250 M = T2 - T0 + 1: M0 = T1 - T0 + 1
260 GOTO 1370
270 DIM A(M, N), B(N, M), C(N, N * 2), D(N, N * 2), E(N, 1), X(N), X0(N, M), X1(N, M), G(M), XX(N, MN)
280 GOTO 1370
290 FOR I = 1 TO N
300 FOR J = M0 TO M - 1
310 A(J, I) = B(J, I)
320 NEXT J
330 NEXT I
340 PRINT "***************A(i,j)******************"
350 FOR I = M9 TO M - 1
360 FOR J = 1 TO N
370 PRINT A(I, J); " ";
380 NEXT J
390 PRINT
400 NEXT I
410 PRINT "************AtA**************"
420 FOR I = 1 TO N
430 FOR K = 1 TO N
440 C(I, K) = 0
450 FOR J = M0 TO M - 1
460 C(I, K) = C(I, K) + B(I, J) * A(J, K)
470 NEXT J
480 PRINT C(I, K); " ";
490 IF I = K THEN 520
500 C(I, K + N) = 0
510 GOTO 530
520 C(I, K + N) = 1
530 NEXT K
540 PRINT
550 NEXT I
560 PRINT "***********(AtA)-1************"
570 FOR I = 1 TO N - 1
580 FOR K = I + 1 TO N
590 FOR J = 1 + I TO 2 * N
600 C(K, J) = C(K, J) - C(I, J) / C(I, I) * C(K, I)
610 NEXT J
620 NEXT K
630 NEXT I
640 FOR I = 1 TO N
650 FOR J = 1 TO N * 2
660 D(I, J) = C(I, J) / C(I, I)
670 NEXT J
680 NEXT I
690 FOR I = N TO 2 STEP -1
700 FOR K = I - 1 TO 1 STEP -1
710 FOR J = N * 2 TO I STEP -1
720 D(K, J) = D(K, J) - D(I, J) / D(I, I) * D(K, I)
730 NEXT J
740 NEXT K
750 NEXT I
760 FOR I = 1 TO N
770 FOR J = N + 1 TO N * 2
780 PRINT D(I, J); " ";
790 NEXT J
800 PRINT
810 NEXT I
820 PRINT "************Yn************"
830 FOR I = M0 TO M - 1
840 Y(I, 1) = X0(1, I + 1)
850 PRINT Y(I, 1); " ";
860 NEXT I
870 PRINT
880 PRINT "**********AtYn***********"
890 FOR I = 1 TO N
900 E(I, 1) = 0
910 FOR J = M0 TO M - 1
920 E(I, 1) = E(I, 1) + B(I, J) * Y(J, 1)
930 NEXT J
940 PRINT E(I, 1)
950 NEXT I
960 PRINT "***********XI SHU XIANG LIANG*************"
970 FOR I = 1 TO N
980 X(I) = 0
990 FOR J = N + 1 TO N * 2
1000 X(I) = X(I) + D(I, J) * E(J - N, 1)
1010 NEXT J
1020 IF I > 1 THEN 1050
1030 PRINT "^a="; X(I)
1040 GOTO 1060
1050 PRINT "^b"; I - 1; "="; X(I)
1060 NEXT I
1070 PRINT "------------ZHUANG TAI FANG CHENG HAN SHU---------------"
1080 PRINT "^X1(t=1)=("; X0(1, M0); ")";
1090 FOR I = 2 TO N
1100 PRINT "-"; X(I) / X(1); "x"; I;
1110 NEXT I
1120 PRINT ")e "; -X(1); "t "
1130 FOR I = 2 TO N
1140 PRINT "+"; X(I) / X(1); "x"; I; " ";
1150 NEXT I
1160 PRINT
1170 PRINT "---------------^X1(i)-----------------------"
1180 FOR J = M0 TO M
1190 GOSUB 1850
1200 G = S * EXP(-X(1) * (J - 1))
1210 FOR I = 2 TO N
1220 G(J) = G + (X(I) / X(1)) * X1(I, J)
1230 G = G(J)
1240 NEXT I
1250 PRINT "^x1("; T1 - M0 + J; ")="; G(J); "------"; X1(1, J)
1260 NEXT J
1270 PRINT "--------NI HE ZHI---------NI HE CHA----------%---------"
1280 FOR T = M0 TO M - 1
1290 X = G(T + 1) - G(T)
1300 E = XX(1, T + 1) - X
1310 P = E / XX(1, T + 1)
1320 IF T1 - M0 + T + 1 < T2 - 4 THEN 1350
1330 PRINT "^X0("; T1 - M0 + T + 1; ")="; X; "------"; XX(1, T + 1)
1340 PRINT " e="; E; " q="; P * 100; "%"
1350 NEXT T
1360 GOTO 1910
1370 PRINT "----------YUAN SHI SHU JU-----------"
1380 FOR I = 1 TO GS
1390 PRINT MC$(I); " ";
1400 FOR J = 1 TO MN
1410 'READ Z(I, J)
1420 IF J < M0 THEN 1440
1430 PRINT Z(I, J); " ";
1440 NEXT J: PRINT
1450 NEXT I
1460 PRINT "QING AN REN YI JIAN JI XU------"
1470 AA$ = INKEY$: IF AA$ = "" THEN 1470
1480 GOSUB 1970
1490 PRINT : INPUT "SHU JU PING HUA MA?(y/n)"; DD$
1500 IF DD$ = "Y" OR DD$ = "y" THEN 1510 ELSE GOTO 1620
1510 PRINT : PRINT "----------JIAN MO SHU JU-----------"
1520 FOR I = 1 TO N
1530 X0(I, M0) = (3 * XX(I, M0) + XX(I, M0 + 1)) / 4
1540 PRINT X0(I, M0); " ";
1550 FOR J = M0 + 1 TO M - 1
1560 X0(I, J) = (XX(I, J - 1) + 2 * XX(I, J) + XX(I, J + 1)) / 4
1570 PRINT X0(I, J); " ";
1580 NEXT J
1590 X0(I, M) = (XX(I, M - 1) + 3 * XX(I, M)) / 4
1600 PRINT X0(I, M)
1610 NEXT I: GOTO 1670
1620 PRINT : PRINT "--------------JIAN MO SHU JU----------------"
1630 FOR I = 1 TO N: FOR J = 1 TO M
1640 X0(I, J) = XX(I, J): IF J < M0 THEN 1660
1650 PRINT X0(I, J); " ";
1660 NEXT J: PRINT : NEXT I
1670 PRINT "----------X1(i,j)------------"
1680 FOR I = 1 TO N
1690 T = 0
1700 FOR J = M0 TO M
1710 T = T + X0(I, J)
1720 X1(I, J) = T
1730 PRINT X1(I, J); " ";
1740 NEXT J: PRINT
1750 NEXT I
1760 FOR I = 1 TO N
1770 FOR J = M0 TO M - 1
1780 IF I <> 1 THEN 1810
1790 B(I, J) = -(X1(I, J + 1) + X1(I, J)) / 2
1800 GOTO 1820
1810 B(I, J) = X1(I, J + 1)
1820 NEXT J
1830 NEXT I
1840 GOTO 290
1850 S0 = X0(1, M0)
1860 FOR I = 2 TO N
1870 S = S0 - X1(I, J) * X(I) / X(1)
1880 S0 = S
1890 NEXT I
1900 RETURN
1910 PRINT "---------------END----------------"
1920 INPUT "DAYINJIEGUOMA?(Y/N)"; D$
1930 IF D$ = "Y" OR D$ = "y" THEN GOSUB 2120
1940 INPUT "GEN HUAN BIAN LIANG & SHI DUAN JI SUAN MA?(Y/N)"; JX$
1950 IF JX$ = "Y" OR IX$ = "y" THEN 210
1960 END
...全文
667 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzppxx_321 2007-06-14
  • 打赏
  • 举报
回复
继续求助
难道就没人帮忙看看吗?~~~~~
zzppxx_321 2007-06-13
  • 打赏
  • 举报
回复
我的邮箱:zzppxx_321@163.com
zzppxx_321 2007-06-13
  • 打赏
  • 举报
回复
1970 CLS : LOCATE 1, 50: PRINT SPC(25);
1980 LOCATE 1, 50: PRINT "XU HAO BIAN LIANG MING CHENG"
1990 FOR I = 1 TO GS
2000 LOCATE I + 1, 50: PRINT SPC(25);
2010 LOCATE I + 1, 50: PRINT I; : LOCATE I + 1, 60: PRINT MC$(I)
2020 NEXT
2030 PRINT "QING SHU RU ZHUANG TAI FANG CHENG DE BIAN LIANG ZONG SHU:N="; : INPUT "", N
2040 FOR I = 1 TO N
2050 IF I = 1 THEN 2060 ELSE 2070
2060 PRINT "QING SHU RU ZHU DAO BIAN LIANG DE XU HAO:"; : INPUT "", KK(I): GOTO 2080
2070 PRINT "QING SHU RU DI"; I - 1; "GE GUAN LIAN BIAN LIANG DE XU HAO:"; : INPUT "", KK(I)
2080 FOR J = 1 TO M
2090 XX(I, J) = Z(KK(I), J)
2100 NEXT: NEXT: RETURN
2110 END
2120 LPRINT "************["; WJ$; "]GM(1,N)ZHUANG TAI FANG CHENG**********"
2130 LPRINT "JIAN MO QI ZHI XU HAO:"; T1; "------"; T2
2140 LPRINT "------------YUAN SHI SHU JU-------------"
2150 FOR I = 1 TO N
2160 LPRINT MC$(KK(I)); " ";
2170 FOR J = 1 TO MN
2180 IF J < M0 THEN 2200
2190 LPRINT XX(I, J); " ";
2200 NEXT J: LPRINT
2210 NEXT I
2220 LPRINT "------------XI SHU XIANG LIANG---------------"
2230 FOR I = 1 TO N
2240 IF I > 1 THEN 2270
2250 LPRINT "^a="; X(I)
2260 GOTO 2280
2270 LPRINT "^b"; I - 1; "="; X(I)
2280 NEXT I
2290 LPRINT "---------------ZHUANG TAI FANG CHENG SHI JIAN HAN SHU------------------"
2300 LPRINT "^X1(t+1)=("; X0(1, M0);
2310 FOR I = 2 TO N
2320 LPRINT "-"; X(I) / X(1); "x"; I;
2330 NEXT I
2340 LPRINT ")e"; -X(1); "t";
2350 FOR I = 2 TO N
2360 LPRINT "+"; X(I) / X(1); "x"; I; " ";
2370 NEXT I
2380 LPRINT
2390 LPRINT "-----NI HE ZHI------NI HE CHA-------%-----"
2400 FOR T = M0 TO M - 1
2410 X = G(T + 1) - G(T)
2420 E = XX(1, T + 1) - X
2430 P = E / XX(1, T + 1)
2440 IF T1 - M0 + T + 1 < T2 - 4 THEN 2470
2450 LPRINT "^X0("; T1 - M0 + T + 1; ")="; X; "---------"; XX(1, T + 1);
2460 LPRINT " e="; E; " q="; P * 100; "%"
2470 NEXT T
2480 LPRINT "********************************************"
2490 RETURN
5000 REM**************************************
5010 REM**********SHU JU WEN JIAN*************
5090 CLS : PRINT "SHU JU WEN JIAN"
5100 LOCATE 3, 10: PRINT "SHU JU SHU RU FANG SHI XUAN ZE:"
5110 LOCATE 4, 12: PRINT "1:ZHI JIE SHU RU"
5120 LOCATE 5, 12: PRINT "2:DIAO YONG SHU JU WEN JIAN"
5130 LOCATE 6, 10: INPUT "QING XUAN ZE:"; XZ$
5140 IF XZ$ = "1" THEN 5220 ELSE IF XZ$ = "2" THEN 5150 ELSE 5100
5150 INPUT "QU DONG PAN:"; Q$
5160 INPUT "WEN JIAN MIN:"; WJ$
5170 WJ$ = Q$ + ":\" + WJ$ + ".DAT"
5180 IF XZ$ = "2" THEN GOSUB 5790: GOSUB 5540
5190 IF XZ$ = "2" AND A$ = "4" THEN GOSUB 5890
5200 IF XZ$ = "1" THEN GOSUB 5430
5210 RETURN
5220 CLS
5230 INPUT "QING SHU RU ZHI BIAO GE SHU:"; GS
5240 INPUT "SHU JU QI SHI SHI XU:"; T0
5250 INPUT "SHU JU ZHONG ZHI SHI XU:"; TN
5260 N = TN - T0 + 1
5270 FOR K = 1 TO GS
5280 CLS : PRINT "QING SHU RU DI"; K; "GE ZHI BIAO DE MIN CHENG"; : INPUT "", MC$(K)
5290 FOR I = 1 TO INT((N - 1) / 12) + 1
5300 IF N - (I - 1) * 12 < 12 THEN MIN = N - (I - 1) * 12 ELSE MIN = 12
5310 CLS
5320 LOCATE 1, 20: PRINT MC$(K)
5330 LOCATE 2, 5: PRINT "SHIXU SHUJU SHIXU SHUJU "
5340 FOR J = 1 TO MIN
5350 IF J > 6 THEN 5380
5360 LOCATE 2 + J, 5: PRINT T0 + J + 12 * (I - 1) - 1: LOCATE 2 + J, 15: INPUT "", Y(K, J + (I - 1) * 12)
5370 GOTO 5390
5380 LOCATE J - 4, 35: PRINT T0 + J + 12 * (I - 1) - 1: LOCATE J - 4, 45: INPUT "", Y(K, J + (I - 1) * 12)
5390 NEXT
5400 NEXT: NEXT
5410 K1 = 1: K2 = GS: GOSUB 5540
5420 CLS : GOTO 5150
5430 OPEN "O", #1, WJ$
5440 PRINT #1, GS, T0, TN
5450 FOR I = 1 TO GS
5460 PRINT #1, MC$(I); ",";
5470 FOR J = 1 TO N
5480 IF J = N THEN 5500
5490 PRINT #1, Y(I, J); ","; : GOTO 5510
5500 PRINT #1, Y(I, J)
5510 NEXT: NEXT
5520 CLOSE
5530 RETURN
5540 CLS : INPUT "SHI FU XU YAO DUI YUANSHI SHUJU JINXING XIUGAI(Y/N):"; SF$
5550 IF SF$ = "Y" OR SF$ = "y" THEN 5560 ELSE 5780
5560 FOR K = 1 TO GS
5570 FOR I = 1 TO INT((N - 1) / 12) + 1
5580 IF N - 12 * (I - 1) < 12 THEN MIN = N - 12 * (I - 1) ELSE MIN = 12
5590 CLS : LOCATE 1, 20: PRINT MC$(K)
5600 LOCATE 2, 5: PRINT "SHIXU SHUJU SHIXU SHUJU"
5610 FOR J = 1 TO MIN
5620 IF J > 6 THEN 5640
5630 LOCATE 2 + J, 5: PRINT T0 + J + 12 * (I - 1) - 1: LOCATE 2 + J, 15: PRINT Y(K, J + (I - 1) * 12): GOTO 5650
5640 LOCATE J - 4, 35: PRINT T0 + J + 12 * (I - 1) - 1: LOCATE J - 4, 45: PRINT Y(K, J + (I - 1) * 12)
5650 NEXT
5660 LOCATE 9, 2: PRINT "NA YI SHI XU DE SHULIE XUYAO XIUGAI?(WUCUOANHUICHE): ";
5670 LOCATE 9, 44: INPUT "", SK
5680 IF SK = 0 THEN 5760
5690 IF SK < T0 + 12 * (I - 1) - 1 OR SK > T0 + MIN + (12 * (I - 1)) - 1 THEN 5660
5700 HH = SK - T0 + 1 - 12 * (I - 1)
5710 IF HH > 6 THEN 5740
5720 LOCATE 2 + HH, 5: PRINT T0 + HH + 12 * (I - 1) - 1: LOCATE 2 + HH, 15: PRINT " "
5730 LOCATE 2 + HH, 5: PRINT T0 + HH + 12 * (I - 1) - 1: LOCATE 2 + HH, 15: INPUT " ", Y(K, HH + (I - 1) * 12): GOTO 5660
5740 LOCATE HH - 4, 35: PRINT T0 + HH + 12 * (I - 1) - 1: LOCATE HH - 4, 45: PRINT " "
5750 LOCATE HH - 4, 35: PRINT T0 + HH + 12 * (I - 1) - 1: LOCATE HH - 4, 45: INPUT " ", Y(K, HH + (I - 1) * 12): GOTO 5660
5760 NEXT: NEXT
5770 IF XZ$ = "2" THEN GOSUB 5430
5780 RETURN
5790 OPEN "i", #1, WJ$
5800 INPUT #1, GS, T0, TN
5810 N = TN - T0 + 1
5820 FOR K = 1 TO GS
5830 INPUT #1, MC$(K)
5840 FOR I = 1 TO N
5850 INPUT #1, Y(K, I)
5860 NEXT: NEXT
5870 CLOSE
5880 RETURN
5890 '--------------ZHI BIAO ZENG JIAN---------------
5900 CLS : LOCATE 3, 1: PRINT " 1.ZENG JIA ZHIBIAO"
5910 PRINT " 2.JIAN SHAO ZHIBIAO"
5920 PRINT " 3.BU BIAN": PRINT
5930 INPUT "QINGXUANZE:", A3
5940 IF A3 = 3 THEN 6250 ELSE IF A3 = 1 THEN 5950 ELSE IF A3 = 2 THEN 6120 ELSE BEEP: GOTO 5900
5950 CLS : INPUT "ZENGJIAZHIBIAOGESHU:", ZG
5960 FOR K = GS + 1 TO ZG + GS
5970 CLS : PRINT "DI"; K; "GE ZHI BIAO MIN CHENG"; : INPUT "", MC$(K)
5980 FOR I = 1 TO INT((N - 1) / 12) + 1
5990 IF N - (I - 1) * 12 < 12 THEN MIN = N - (I - 1) * 12 ELSE MIN = 12
6000 CLS
6010 LOCATE 1, 20: PRINT MC$(K)
6020 LOCATE 2, 5: PRINT "SHIXU SHUJU SHIXU SHUJU "
6030 FOR J = 1 TO MIN
6040 IF J > 6 THEN 6070
6050 LOCATE 2 + J, 5: PRINT T0 + J + 12 * (I - 1) - 1: LOCATE 2 + J, 15: INPUT "", Y(K, J + (I - 1) * 12)
6060 GOTO 6080
6070 LOCATE J - 4, 35: PRINT T0 + J + 12 * (I - 1) - 1: LOCATE J - 4, 45: INPUT "", Y(K, J + (I - 1) * 12)
6080 NEXT
6090 NEXT: NEXT
6100 K1 = GS + 1: K2 = GS + ZG: GOSUB 5540: GS = GS + ZG: GOSUB 5430
6110 GOTO 6250
6120 '------------------------------
6130 CLS : INPUT "SHAN CHU ZHI BIAO GE SHU:", SG
6140 FOR I = 1 TO SG: CLS : FOR K = 1 TO GS STEP 2
6150 IF K = GS THEN 6170
6160 LOCATE (K + 1) / 2, 3: PRINT K; "."; MC$(K): LOCATE (K + 1) / 2, 43: PRINT K + 1; "."; MC$(K + 1): GOTO 6180
6170 LOCATE (K + 1) / 2, 3: PRINT K; "."; MC$(K)
6180 NEXT
6190 PRINT "QING SHURU DI"; I; "GE SHANCHU ZHIBIAO DE BIANHAO:"; : INPUT "", BH: GS = GS - 1
6200 FOR K = BH TO GS: MC$(K) = MC$(K + 1)
6210 FOR J = 1 TO N
6220 Y(K, J) = Y(K + 1, J)
6230 NEXT: NEXT: NEXT
6240 GOSUB 5430
6250 RETURN
  • 打赏
  • 举报
回复
居然还有那么多GOTO...

楼主直接扔掉这个程序重新写一个就是了.这个程序不能说不好,因为它有它的时代背景,但无疑不适合在今天再去看它了.

程序的算法公式才是灵魂.
  • 打赏
  • 举报
回复
不是什么真正技术问题,就是数组越界,自己调试就是了.

虽然VB里只需要稍改动一下就可以运行BASIC程序,一运行就直接发现哪的错.但楼主居然还把行号也粘出来了,谁有耐心再去删除行号??

用到数组下标的地方就那么几处,加上断点或"?"输出就行了.
kmlxk0 2007-06-13
  • 打赏
  • 举报
回复

SUBSCRIPT OUT OF RANGE : 数组下标越界
VBAdvisor 2007-06-13
  • 打赏
  • 举报
回复
太长,没耐心看。对不起。
SUBSCRIPT OUT OF RANGE
XX(I, J) = Z(KK(I), J)
在Debug窗口看看,是XX或者Z或KK数组越界,再检查2090上面的语句。
good luck!
YaDa 2007-06-13
  • 打赏
  • 举报
回复
我在83年使用过的克罗米克机,就是这样的程序,没有结构化语句,连标号也没有,非常痛苦。
zzppxx_321 2007-06-13
  • 打赏
  • 举报
回复
已经发过去了,麻烦看看啊
谢谢
WM_JAWIN 2007-06-13
  • 打赏
  • 举报
回复
把代码发到cbanor at 21cn.com 过来,我晚上帮你See See
WM_JAWIN 2007-06-13
  • 打赏
  • 举报
回复
你的程序不会是在DOS下跑的那个Quick Basic吧??
VirtualDesktop 2007-06-13
  • 打赏
  • 举报
回复
大爷啊。。你下标越界了啊。。好好检查下程序
zzppxx_321 2007-06-13
  • 打赏
  • 举报
回复
是XX(I, J)下标越界,但是我看不出来,继续求~~

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧