您的位置:程序门 -> vb -> 基础类



悬赏求解决subscript out of range,basic.


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


悬赏求解决subscript out of range,basic.
发表于:2007-06-13 00: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
发表于:2007-06-13 00:46:411楼 得分:0
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
发表于:2007-06-13 00:47:062楼 得分:0
我的邮箱:zzppxx_321@163.com
发表于:2007-06-13 08:39:123楼 得分:0
太长,没耐心看。对不起。
subscript   out   of   range
xx(i,   j)   =   z(kk(i),   j)
在debug窗口看看,是xx或者z或kk数组越界,再检查2090上面的语句。
good   luck!
发表于:2007-06-13 09:09:304楼 得分:0

subscript   out   of   range   :   数组下标越界
发表于:2007-06-13 09:29:135楼 得分:0
不是什么真正技术问题,就是数组越界,自己调试就是了.

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

用到数组下标的地方就那么几处,加上断点或 "? "输出就行了.
发表于:2007-06-13 09:33:346楼 得分:0
居然还有那么多goto...

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

程序的算法公式才是灵魂.
发表于:2007-06-13 14:05:297楼 得分:0
是xx(i,   j)下标越界,但是我看不出来,继续求~~
发表于:2007-06-13 14:07:588楼 得分:0
大爷啊。。你下标越界了啊。。好好检查下程序
发表于:2007-06-13 15:44:019楼 得分:0
你的程序不会是在dos下跑的那个quick   basic吧??
发表于:2007-06-13 15:47:0410楼 得分:0
把代码发到cbanor   at   21cn.com   过来,我晚上帮你see   see
发表于:2007-06-13 16:10:3411楼 得分:0
已经发过去了,麻烦看看啊
谢谢
发表于:2007-06-13 16:17:5612楼 得分:0
我在83年使用过的克罗米克机,就是这样的程序,没有结构化语句,连标号也没有,非常痛苦。
发表于:2007-06-14 17:24:1213楼 得分:0
继续求助
难道就没人帮忙看看吗?~~~~~


快速检索

最新资讯
热门点击