哦,是这样呀 240 HGR 250 HCOLOR=3 260 HPLOT 5,90 270 HPLOT 7,88 TO 7,86 TO 1,86 TO 1,94 TO 7,92 280 HPLOT 65,70 TO 65,110 TO 60,110 TO 60,70 TO 65,70 290 HCOLOR=3 300 GOSUB 800 310 IF I>1 THEN GO TO 390 320 C1=198:C2=90 330 R0=90 340 FOR X1=-R0 TO R0 350 Y1=INT(SQR(R0^2-X1^2)) 360 HPLOT C1+X1,C2+Y1 370 HPLOT C1+X1,C2-Y1 380 NEXT X1 390 FOR J=1 TO 55 400 HCOLOR=3 410 HPLOT 5+J,90 420 HCOLOR=0 430 HPLOT 5+J-1,90 440 NEXT J 450 K=INT(Y) 460 IF F<0.5 THEN K=-INT(Y) 470 FOR L=1 TO INT(X) 480 IF INT(X)=0 THEN X=1 485 L1=90+L*(K/INT(X)) 490 HPLOT95+L,L1 500 HCOLOR=0 510 HPLOT 95+L-1,90+(L-1)*(K/INT(X)) 520 HPLOT 95+L,L1 530 HCOLOR=3 540 NEXT L 550 IF INT(Y)=0 THEN Y=1 560 HPLOT C1+O*X2,C2+K/INT(Y)*Y2 570 FOR U=0 TO 20 580 D(U)=U*9 590 NEXT U 600 IF L1=D(10) THEN V=10:GOTO 629 605 IF L1>D(10) THEN GOTO 620 610 FOR V=0 TO 9 615 IF L1<D(V) THEN NEXT 618 GOTO629 620 FOR U=11 TO 20 625 IF L1>D(U) THEN NEXT U 628 V=20-U 629 S(V)=S(V)+1 630 PRINT TAB(20);"***";INT(ATN(ABS(10-V)*9/INT(X))*180/3.1415926);"=";S(V);"***" 640 HCOLOR=0 650 GOSUB 800 660 NEXT I 670 FOR V=1 TO 10 680 PRINT INT(ATN(ABS(10-V)*9/INT(X))*180/3.1415926);"=";S(V);"___" 690 NEXT V 695 PRINT"REFLELTED";V1 700 GOTO 120 800 IF INT(X)=0 THEN X=1 805 HPLOT 65+INT(X),0 TO 65+INT(X),180 810 FOR G=0 TO 180 STEP 9 820 HPLOT 65+INT(X),G TO 67+INT(X),G 830 NEXT G 840 RETURN 上面的程序中的绘图命令在VB中用不了,应该怎样将其转换为VB中的绘图语句,使其能在VB中运行。请各位大虾指点指点,本菜鸟感激不尽!!
Option Explicit Dim HCOLOR As LongDim lastx As Long Dim lasty As LongDim x As Long Dim i As Long Dim g As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False) If bset Then lastx = xx lasty = yy Me.PSet (lastx, lasty), HCOLOR Else Me.Line (lastx, lasty)-(xx, yy), HCOLOR lastx = xx lasty = yy End If End SubPrivate Sub sub800() If Int(x) = 0 Then x = 1 End If HPLOT 65 + Int(x), 0, True HPLOT 65 + Int(x), 180 For g = 0 To 180 Step 9 HPLOT 65 + Int(x), g, True HPLOT 67 + Int(x), g Next g End SubPrivate Sub Command1_Click() '哦,是这样呀 'HGR 'HCOLOR = 3 HCOLOR = vbRed
#If 0 Then 310 If i > 1 Then GoTo 390 320 C1 = 198: C2 = 90 330 R0 = 90 340 For X1 = -R0 To R0 350 Y1 = Int(Sqr(R0 ^ 2 - X1 ^ 2)) 360 HPLOT C1 + X1, C2 + Y1 370 HPLOT C1 + X1, C2 - Y1 380 Next X1 390 For j = 1 To 55 400 HCOLOR = 3 410 HPLOT 5 + j, 90 420 HCOLOR = 0 430 HPLOT 5 + j - 1, 90 440 Next j 450 K = Int(y) 460 If F < 0.5 Then K = -Int(y) 470 For L = 1 To Int(x) 480 If Int(x) = 0 Then x = 1 485 L1 = 90 + L * (K / Int(x)) 490 HPLOT95 L, L1 500 HCOLOR = 0 510 HPLOT 95 + L - 1, 90 + (L - 1) * (K / Int(x)) 520 HPLOT 95 + L, L1 530 HCOLOR = 3 540 Next L 550 If Int(y) = 0 Then y = 1 560 HPLOT C1 + O * X2, C2 + K / Int(y) * Y2 570 For U = 0 To 20 580 D(U) = U * 9 590 Next U 600 If L1 = D(10) Then V = 10: GoTo 629 605 If L1 > D(10) Then GoTo 620 610 For V = 0 To 9 615 If L1 < D(V) Then Next 618 GOTO629 620 For U = 11 To 20 625 If L1 > D(U) Then Next U 628 V = 20 - U 629 S(V) = S(V) + 1 630 Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; S(V); "***" 640 HCOLOR = 0 650 GoSub 800 660 Next i 670 For V = 1 To 10 680 Print Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; S(V); "___" 690 Next V 695 Print "REFLELTED"; V1 700 GoTo 120 #End If '上面的程序中的绘图命令在VB中用不了,应该怎样将其转换为VB中的绘图语句,使其能在VB中运行。请各位大虾指点指点,本菜鸟感激不尽!!End SubPrivate Sub Form_Load() Me.ScaleMode = 3 End Sub我也是从gwbasic过来的,怎么这些指令看不懂呢?先写这些,今天先下了。
谢谢了jennyvenus !!!!!!
'Option Explicit Dim HCOLOR As LongDim lastx As Long Dim lasty As Long Dim d(0 To 100) As Long Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False) If bset Then lastx = xx lasty = yy Me.PSet (lastx, lasty), HCOLOR Else Me.Line (lastx, lasty)-(xx, yy), HCOLOR lastx = xx lasty = yy End If End SubPrivate Sub sub800() If Int(x) = 0 Then x = 1 End If HPLOT 65 + Int(x), 0, True HPLOT 65 + Int(x), 180 For g = 0 To 180 Step 9 HPLOT 65 + Int(x), g, True HPLOT 67 + Int(x), g Next g End SubPrivate Sub Command1_Click()label120: HCOLOR = vbRed
If i > 1 Then GoTo label390 End If c1 = 198 c2 = 90 r0 = 90 For x1 = -r0 To r0 y1 = Int(Sqr(r0 ^ 2 - x1 ^ 2)) HPLOT c1 + x1, c2 + y1, True HPLOT c1 + x1, c2 - y1 Next x1 label390: For j = 1 To 55 HCOLOR = vbRed HPLOT 5 + j, 90 HCOLOR = vbGreen HPLOT 5 + j - 1, 90 Next j k = Int(y)
If F < 0.5 Then k = -Int(y) End If
For L = 1 To Int(x) If Int(x) = 0 Then x = 1 End If L1 = 90 + L * (k / Int(x)) HPLOT 95 + L, L1 HCOLOR = vbGreen HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(x)) HPLOT 95 + L, L1 HCOLOR = vbRed Next L
If Int(y) = 0 Then y = 1 End If HPLOT c1 + O * X2, c2 + k / Int(y) * Y2
For U = 0 To 20 d(U) = U * 9 Next U
If L1 = d(10) Then V = 10 GoTo label629 End If
If L1 > d(10) Then GoTo label620 End If
For V = 0 To 9 If L1 < d(V) Then 'NEXT 'V = V + 1 GoTo LABEL_VVVV End If LABEL_VVVV: Next V
GoTo label629label620: For U = 11 To 20 If L1 > d(U) Then 'Next U 'U = U + 1 GoTo LABEL_UUUU End If V = 20 - U label629: s(V) = s(V) + 1 Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; s(V); "***" HCOLOR = vbGreen Call sub800 LABEL_UUUU: Next U
For V = 1 To 10 Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; s(V); "___" Next V Print "REFLELTED"; V1 GoTo label120End SubPrivate Sub Form_Load() Me.AutoRedraw = True Me.ScaleMode = 3 End Sub 还有很多错误
我去看了,可是看不懂,还是不懂得怎样改。上面的代码我昨晚还有前面的一小部分没有写上去,本以为自己可以搞定的,现在看来是没办法了,本人实在太菜了。所以把那部分也附上,希望大虾们多多指点10 INPUT"P=";P 20 INPUT"M=";M 30 INPUT"Z=";Z 40 Z1=2 50 C=6.02E23 60 E=1.6E-19 70 R1=1E-8 80 R=30 90 INPUT"T=";T 100 INPUT"W=";W 110 N=C*P/M 120INPUT"Q=";Q 125 IF Q=0 THEN END 130 FOR I=1 TO Q 140 F=RND 150 A=1.44E-7 160 H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4) 164 IF H>1 THEN V1=V1+1 165 IF H>1 THEN PRINT"NO ENOUGH'W'OR TOOTHICK'T'":NEXT I 170 B=2*ATN(H/SQR(1-H^2)) 180 X=ABS(R*COS(B)):Y=ABS(R*SIN(B)) 190 D=2*3.1415926*RND 200 O=-1 210 IF D<90*3.1415926/180 OR D>270*3.1415926/180 THEN O=1 220 X2=ABS(Y*COS(D)):Y2=ABS(Y*SIN(D)) 230 IF I>1 THEN GOTO 290
'Option Explicit Dim HCOLOR As LongDim lastx As Long Dim lasty As Long Dim d(0 To 100) As Long Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False) If bset Then lastx = xx lasty = yy Me.PSet (lastx, lasty), HCOLOR Else Me.Line (lastx, lasty)-(xx, yy), HCOLOR lastx = xx lasty = yy End If End SubPrivate Sub sub800() If Int(X) = 0 Then X = 1 End If HPLOT 65 + Int(X), 0, True HPLOT 65 + Int(X), 180 For g = 0 To 180 Step 9 HPLOT 65 + Int(X), g, True HPLOT 67 + Int(X), g Next g End SubPrivate Sub Command1_Click() p = InputBox("P=") m = InputBox("M=") z = InputBox("Z=") z1 = 2 C = 6.02E+23 E = 1.6E-19 R1 = 0.00000001 R = 30 t = InputBox("T=") w = InputBox("W=") N = C * p / m label120: Q = InputBox("Q=") If Q = 0 Then End End If For I = 1 To Q F = Rnd A = 0.000000144 H = (N * t / 4 * R ^ 2) * ((z1 * z / 2 * w) ^ 2 * A ^ 2 / F) ^ (1 / 4) If H > 1 Then V1 = V1 + 1 End If If H > 1 Then Debug.Print "NO ENOUGH'W'OR TOOTHICK'T'" End If Next I B = 2 * Atn(H / Sqr(1 - H ^ 2)) X = Abs(R * Cos(B)) Y = Abs(R * Sin(B)) dd = 2 * 3.1415926 * Rnd O = -1 If dd < 90 * 3.1415926 / 180 Or dd > 270 * 3.1415926 / 180 Then O = 1 End If X2 = Abs(Y * Cos(dd)) Y2 = Abs(Y * Sin(dd)) If I > 1 Then GoTo label290 End If HCOLOR = vbRed
If I > 1 Then GoTo label390 End If c1 = 198 c2 = 90 r0 = 90 For X1 = -r0 To r0 Y1 = Int(Sqr(r0 ^ 2 - X1 ^ 2)) HPLOT c1 + X1, c2 + Y1, True HPLOT c1 + X1, c2 - Y1 Next X1 label390: For j = 1 To 55 HCOLOR = vbRed HPLOT 5 + j, 90 HCOLOR = vbGreen HPLOT 5 + j - 1, 90 Next j k = Int(Y)
If F < 0.5 Then k = -Int(Y) End If
For L = 1 To Int(X) If Int(X) = 0 Then X = 1 End If L1 = 90 + L * (k / Int(X)) HPLOT 95 + L, L1 HCOLOR = vbGreen HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(X)) HPLOT 95 + L, L1 HCOLOR = vbRed Next L
If Int(Y) = 0 Then Y = 1 End If HPLOT c1 + O * X2, c2 + k / Int(Y) * Y2
For U = 0 To 20 d(U) = U * 9 Next U
If L1 = d(10) Then V = 10 GoTo label629 End If
If L1 > d(10) Then GoTo label620 End If
For V = 0 To 9 If L1 < d(V) Then 'NEXT 'V = V + 1 GoTo LABEL_VVVV End If LABEL_VVVV: Next V
GoTo label629label620: For U = 11 To 20 If L1 > d(U) Then 'Next U 'U = U + 1 GoTo LABEL_UUUU End If V = 20 - U label629: s(V) = s(V) + 1 Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***" HCOLOR = vbGreen Call sub800 LABEL_UUUU: Next U
For V = 1 To 10 Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___" Next V Print "REFLELTED"; V1 GoTo label120End SubPrivate Sub Form_Load() Me.AutoRedraw = True Me.ScaleMode = 3 End Sub我粗略改完了,没有进行过核对,且不知道那些输入的东西应该输多少,现在运行仍然是溢出。
'Option Explicit Dim HCOLOR As LongDim lastx As Long Dim lasty As Long Dim d(0 To 100) As Long Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False) If bset Then lastx = xx lasty = yy Me.PSet (lastx, lasty), HCOLOR Else Me.Line (lastx, lasty)-(xx, yy), HCOLOR lastx = xx lasty = yy End If End SubPrivate Sub sub800() If Int(X) = 0 Then X = 1 End If HPLOT 65 + Int(X), 0, True HPLOT 65 + Int(X), 180 For g = 0 To 180 Step 9 HPLOT 65 + Int(X), g, True HPLOT 67 + Int(X), g Next g End SubPrivate Sub Command1_Click() On Error Resume Next 'p = InputBox("P=") P = 19 'm = InputBox("M=") M = 197 'z = InputBox("Z=") Z = 79 z1 = 2 C = 6.02E+23 E = 1.6E-19 R1 = 0.00000001 R = 30 't = InputBox("T=") T = 0.00000002 'w = InputBox("W=") W = 4000000 N = C * P / M
label120: 'Q = InputBox("Q=") Q = 200 If Q = 0 Then End End If For I = 1 To Q F = Rnd A = 0.000000144 H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4) If H > 1 Then V1 = V1 + 1 End If If H > 1 Then Debug.Print "NO ENOUGH'W'OR TOOTHICK'T'" End If DoEvents Next I B = 2 * Atn(H / Sqr(1 - H ^ 2)) X = Abs(R * Cos(B)) Y = Abs(R * Sin(B)) dd = 2 * 3.1415926 * Rnd O = -1 If dd < 90 * 3.1415926 / 180 Or dd > 270 * 3.1415926 / 180 Then O = 1 End If X2 = Abs(Y * Cos(dd)) Y2 = Abs(Y * Sin(dd)) If I > 1 Then GoTo label290 End If HCOLOR = vbRed
If I > 1 Then GoTo label390 End If c1 = 198 c2 = 90 r0 = 90 For X1 = -r0 To r0 Y1 = Int(Sqr(r0 ^ 2 - X1 ^ 2)) HPLOT c1 + X1, c2 + Y1, True HPLOT c1 + X1, c2 - Y1 Next X1 label390: For j = 1 To 55 HCOLOR = vbRed HPLOT 5 + j, 90 HCOLOR = vbGreen HPLOT 5 + j - 1, 90 Next j k = Int(Y)
If F < 0.5 Then k = -Int(Y) End If
For L = 1 To Int(X) If Int(X) = 0 Then X = 1 End If L1 = 90 + L * (k / Int(X)) HPLOT 95 + L, L1 HCOLOR = vbGreen HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(X)) HPLOT 95 + L, L1 HCOLOR = vbRed Next L
If Int(Y) = 0 Then Y = 1 End If HPLOT c1 + O * X2, c2 + k / Int(Y) * Y2
For U = 0 To 20 d(U) = U * 9 Next U
If L1 = d(10) Then V = 10 GoTo label629 End If
If L1 > d(10) Then GoTo label620 End If
For V = 0 To 9 If L1 < d(V) Then 'NEXT 'V = V + 1 GoTo LABEL_VVVV End If LABEL_VVVV: Next V
GoTo label629label620: For U = 11 To 20 If L1 > d(U) Then 'Next U 'U = U + 1 GoTo LABEL_UUUU End If V = 20 - U label629: s(V) = s(V) + 1 Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***" HCOLOR = vbGreen Call sub800 LABEL_UUUU: Next U
For V = 1 To 10 Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___" Next V Debug.Print "REFLELTED"; V1 DoEvents GoTo label120End SubPrivate Sub Form_Load() Me.AutoRedraw = True Me.ScaleMode = 3 End Sub 现在每次运行到, B = 2 * Atn(H / Sqr(1 - H ^ 2)) 就溢出,H极大,我在最前面加了on error resume next,程序运行也没有什么改善。
是呀,我也有同感,所以今天我把公式改了一下,将 H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4) 改为 H = ((N * T / 16 * R) * ((z1 * Z / W) ^ 2 * A ^ 2 / F)) ^ (1 / 4) H值变小了,可是好像不能循环,循环语句好像有点问题。麻烦你再改后试试,然后再修改
240 HGR
250 HCOLOR=3
260 HPLOT 5,90
270 HPLOT 7,88 TO 7,86 TO 1,86 TO 1,94 TO 7,92
280 HPLOT 65,70 TO 65,110 TO 60,110 TO 60,70 TO 65,70
290 HCOLOR=3
300 GOSUB 800
310 IF I>1 THEN GO TO 390
320 C1=198:C2=90
330 R0=90
340 FOR X1=-R0 TO R0
350 Y1=INT(SQR(R0^2-X1^2))
360 HPLOT C1+X1,C2+Y1
370 HPLOT C1+X1,C2-Y1
380 NEXT X1
390 FOR J=1 TO 55
400 HCOLOR=3
410 HPLOT 5+J,90
420 HCOLOR=0
430 HPLOT 5+J-1,90
440 NEXT J
450 K=INT(Y)
460 IF F<0.5 THEN K=-INT(Y)
470 FOR L=1 TO INT(X)
480 IF INT(X)=0 THEN X=1
485 L1=90+L*(K/INT(X))
490 HPLOT95+L,L1
500 HCOLOR=0
510 HPLOT 95+L-1,90+(L-1)*(K/INT(X))
520 HPLOT 95+L,L1
530 HCOLOR=3
540 NEXT L
550 IF INT(Y)=0 THEN Y=1
560 HPLOT C1+O*X2,C2+K/INT(Y)*Y2
570 FOR U=0 TO 20
580 D(U)=U*9
590 NEXT U
600 IF L1=D(10) THEN V=10:GOTO 629
605 IF L1>D(10) THEN GOTO 620
610 FOR V=0 TO 9
615 IF L1<D(V) THEN NEXT
618 GOTO629
620 FOR U=11 TO 20
625 IF L1>D(U) THEN NEXT U
628 V=20-U
629 S(V)=S(V)+1
630 PRINT TAB(20);"***";INT(ATN(ABS(10-V)*9/INT(X))*180/3.1415926);"=";S(V);"***"
640 HCOLOR=0
650 GOSUB 800
660 NEXT I
670 FOR V=1 TO 10
680 PRINT INT(ATN(ABS(10-V)*9/INT(X))*180/3.1415926);"=";S(V);"___"
690 NEXT V
695 PRINT"REFLELTED";V1
700 GOTO 120
800 IF INT(X)=0 THEN X=1
805 HPLOT 65+INT(X),0 TO 65+INT(X),180
810 FOR G=0 TO 180 STEP 9
820 HPLOT 65+INT(X),G TO 67+INT(X),G
830 NEXT G
840 RETURN
上面的程序中的绘图命令在VB中用不了,应该怎样将其转换为VB中的绘图语句,使其能在VB中运行。请各位大虾指点指点,本菜鸟感激不尽!!
程序要模拟的是一束粒子与靶碰撞后发生散射,射到接收屏上;对接收屏进行划分区域,对射到各个区域上的粒子进行分别统计,然后将结果打印出来。再次希望各位大虾能帮助我这个菜菜鸟。
程序要模拟的是一束粒子与靶碰撞后发生散射,射到接收屏上;对接收屏进行划分区域,对射到各个区域上的粒子进行分别统计,然后将结果打印出来。再次希望各位大虾能帮助我这个菜菜鸟。
程序要模拟的是一束粒子与靶碰撞后发生散射,射到接收屏上;对接收屏进行划分区域,对射到各个区域上的粒子进行分别统计,然后将结果打印出来。再次希望各位大虾能帮助我这个菜菜鸟。
Dim HCOLOR As LongDim lastx As Long
Dim lasty As LongDim x As Long
Dim i As Long
Dim g As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
If bset Then
lastx = xx
lasty = yy
Me.PSet (lastx, lasty), HCOLOR
Else
Me.Line (lastx, lasty)-(xx, yy), HCOLOR
lastx = xx
lasty = yy
End If
End SubPrivate Sub sub800()
If Int(x) = 0 Then
x = 1
End If
HPLOT 65 + Int(x), 0, True
HPLOT 65 + Int(x), 180
For g = 0 To 180 Step 9
HPLOT 65 + Int(x), g, True
HPLOT 67 + Int(x), g
Next g
End SubPrivate Sub Command1_Click() '哦,是这样呀
'HGR
'HCOLOR = 3
HCOLOR = vbRed
HPLOT 5, 90, True
HPLOT 7, 88
HPLOT 7, 86
HPLOT 1, 86
HPLOT 1, 94
HPLOT 7, 92
HPLOT 65, 70, True
HPLOT 65, 110
HPLOT 60, 110
HPLOT 60, 70
HPLOT 65, 70
HCOLOR = vbRed
Call sub800
#If 0 Then
310 If i > 1 Then GoTo 390
320 C1 = 198: C2 = 90
330 R0 = 90
340 For X1 = -R0 To R0
350 Y1 = Int(Sqr(R0 ^ 2 - X1 ^ 2))
360 HPLOT C1 + X1, C2 + Y1
370 HPLOT C1 + X1, C2 - Y1
380 Next X1
390 For j = 1 To 55
400 HCOLOR = 3
410 HPLOT 5 + j, 90
420 HCOLOR = 0
430 HPLOT 5 + j - 1, 90
440 Next j
450 K = Int(y)
460 If F < 0.5 Then K = -Int(y)
470 For L = 1 To Int(x)
480 If Int(x) = 0 Then x = 1
485 L1 = 90 + L * (K / Int(x))
490 HPLOT95 L, L1
500 HCOLOR = 0
510 HPLOT 95 + L - 1, 90 + (L - 1) * (K / Int(x))
520 HPLOT 95 + L, L1
530 HCOLOR = 3
540 Next L
550 If Int(y) = 0 Then y = 1
560 HPLOT C1 + O * X2, C2 + K / Int(y) * Y2
570 For U = 0 To 20
580 D(U) = U * 9
590 Next U
600 If L1 = D(10) Then V = 10: GoTo 629
605 If L1 > D(10) Then GoTo 620
610 For V = 0 To 9
615 If L1 < D(V) Then Next
618 GOTO629
620 For U = 11 To 20
625 If L1 > D(U) Then Next U
628 V = 20 - U
629 S(V) = S(V) + 1
630 Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; S(V); "***"
640 HCOLOR = 0
650 GoSub 800
660 Next i
670 For V = 1 To 10
680 Print Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; S(V); "___"
690 Next V
695 Print "REFLELTED"; V1
700 GoTo 120
#End If
'上面的程序中的绘图命令在VB中用不了,应该怎样将其转换为VB中的绘图语句,使其能在VB中运行。请各位大虾指点指点,本菜鸟感激不尽!!End SubPrivate Sub Form_Load()
Me.ScaleMode = 3
End Sub我也是从gwbasic过来的,怎么这些指令看不懂呢?先写这些,今天先下了。
Dim HCOLOR As LongDim lastx As Long
Dim lasty As Long
Dim d(0 To 100) As Long
Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
If bset Then
lastx = xx
lasty = yy
Me.PSet (lastx, lasty), HCOLOR
Else
Me.Line (lastx, lasty)-(xx, yy), HCOLOR
lastx = xx
lasty = yy
End If
End SubPrivate Sub sub800()
If Int(x) = 0 Then
x = 1
End If
HPLOT 65 + Int(x), 0, True
HPLOT 65 + Int(x), 180
For g = 0 To 180 Step 9
HPLOT 65 + Int(x), g, True
HPLOT 67 + Int(x), g
Next g
End SubPrivate Sub Command1_Click()label120:
HCOLOR = vbRed
HPLOT 5, 90, True
HPLOT 7, 88
HPLOT 7, 86
HPLOT 1, 86
HPLOT 1, 94
HPLOT 7, 92
HPLOT 65, 70, True
HPLOT 65, 110
HPLOT 60, 110
HPLOT 60, 70
HPLOT 65, 70
HCOLOR = vbRed
Call sub800
If i > 1 Then
GoTo label390
End If c1 = 198
c2 = 90
r0 = 90
For x1 = -r0 To r0
y1 = Int(Sqr(r0 ^ 2 - x1 ^ 2))
HPLOT c1 + x1, c2 + y1, True
HPLOT c1 + x1, c2 - y1
Next x1
label390:
For j = 1 To 55
HCOLOR = vbRed
HPLOT 5 + j, 90
HCOLOR = vbGreen
HPLOT 5 + j - 1, 90
Next j
k = Int(y)
If F < 0.5 Then
k = -Int(y)
End If
For L = 1 To Int(x)
If Int(x) = 0 Then
x = 1
End If
L1 = 90 + L * (k / Int(x))
HPLOT 95 + L, L1
HCOLOR = vbGreen
HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(x))
HPLOT 95 + L, L1
HCOLOR = vbRed
Next L
If Int(y) = 0 Then
y = 1
End If
HPLOT c1 + O * X2, c2 + k / Int(y) * Y2
For U = 0 To 20
d(U) = U * 9
Next U
If L1 = d(10) Then
V = 10
GoTo label629
End If
If L1 > d(10) Then
GoTo label620
End If
For V = 0 To 9
If L1 < d(V) Then
'NEXT
'V = V + 1
GoTo LABEL_VVVV
End If
LABEL_VVVV:
Next V
GoTo label629label620:
For U = 11 To 20
If L1 > d(U) Then
'Next U
'U = U + 1
GoTo LABEL_UUUU
End If
V = 20 - U
label629:
s(V) = s(V) + 1
Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; s(V); "***"
HCOLOR = vbGreen
Call sub800
LABEL_UUUU:
Next U
For V = 1 To 10
Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; s(V); "___"
Next V
Print "REFLELTED"; V1
GoTo label120End SubPrivate Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = 3
End Sub
还有很多错误
20 INPUT"M=";M
30 INPUT"Z=";Z
40 Z1=2
50 C=6.02E23
60 E=1.6E-19
70 R1=1E-8
80 R=30
90 INPUT"T=";T
100 INPUT"W=";W
110 N=C*P/M
120INPUT"Q=";Q
125 IF Q=0 THEN END
130 FOR I=1 TO Q
140 F=RND
150 A=1.44E-7
160 H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4)
164 IF H>1 THEN V1=V1+1
165 IF H>1 THEN PRINT"NO ENOUGH'W'OR TOOTHICK'T'":NEXT I
170 B=2*ATN(H/SQR(1-H^2))
180 X=ABS(R*COS(B)):Y=ABS(R*SIN(B))
190 D=2*3.1415926*RND
200 O=-1
210 IF D<90*3.1415926/180 OR D>270*3.1415926/180 THEN O=1
220 X2=ABS(Y*COS(D)):Y2=ABS(Y*SIN(D))
230 IF I>1 THEN GOTO 290
Dim HCOLOR As LongDim lastx As Long
Dim lasty As Long
Dim d(0 To 100) As Long
Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
If bset Then
lastx = xx
lasty = yy
Me.PSet (lastx, lasty), HCOLOR
Else
Me.Line (lastx, lasty)-(xx, yy), HCOLOR
lastx = xx
lasty = yy
End If
End SubPrivate Sub sub800()
If Int(X) = 0 Then
X = 1
End If
HPLOT 65 + Int(X), 0, True
HPLOT 65 + Int(X), 180
For g = 0 To 180 Step 9
HPLOT 65 + Int(X), g, True
HPLOT 67 + Int(X), g
Next g
End SubPrivate Sub Command1_Click()
p = InputBox("P=")
m = InputBox("M=")
z = InputBox("Z=")
z1 = 2
C = 6.02E+23
E = 1.6E-19
R1 = 0.00000001
R = 30
t = InputBox("T=")
w = InputBox("W=")
N = C * p / m
label120:
Q = InputBox("Q=")
If Q = 0 Then
End
End If
For I = 1 To Q
F = Rnd
A = 0.000000144
H = (N * t / 4 * R ^ 2) * ((z1 * z / 2 * w) ^ 2 * A ^ 2 / F) ^ (1 / 4)
If H > 1 Then
V1 = V1 + 1
End If
If H > 1 Then
Debug.Print "NO ENOUGH'W'OR TOOTHICK'T'"
End If
Next I
B = 2 * Atn(H / Sqr(1 - H ^ 2))
X = Abs(R * Cos(B))
Y = Abs(R * Sin(B))
dd = 2 * 3.1415926 * Rnd
O = -1
If dd < 90 * 3.1415926 / 180 Or dd > 270 * 3.1415926 / 180 Then
O = 1
End If
X2 = Abs(Y * Cos(dd))
Y2 = Abs(Y * Sin(dd))
If I > 1 Then
GoTo label290
End If
HCOLOR = vbRed
HPLOT 5, 90, True
HPLOT 7, 88
HPLOT 7, 86
HPLOT 1, 86
HPLOT 1, 94
HPLOT 7, 92
HPLOT 65, 70, True
HPLOT 65, 110
HPLOT 60, 110
HPLOT 60, 70
HPLOT 65, 70
label290:
HCOLOR = vbRed
Call sub800
If I > 1 Then
GoTo label390
End If c1 = 198
c2 = 90
r0 = 90
For X1 = -r0 To r0
Y1 = Int(Sqr(r0 ^ 2 - X1 ^ 2))
HPLOT c1 + X1, c2 + Y1, True
HPLOT c1 + X1, c2 - Y1
Next X1
label390:
For j = 1 To 55
HCOLOR = vbRed
HPLOT 5 + j, 90
HCOLOR = vbGreen
HPLOT 5 + j - 1, 90
Next j
k = Int(Y)
If F < 0.5 Then
k = -Int(Y)
End If
For L = 1 To Int(X)
If Int(X) = 0 Then
X = 1
End If
L1 = 90 + L * (k / Int(X))
HPLOT 95 + L, L1
HCOLOR = vbGreen
HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(X))
HPLOT 95 + L, L1
HCOLOR = vbRed
Next L
If Int(Y) = 0 Then
Y = 1
End If
HPLOT c1 + O * X2, c2 + k / Int(Y) * Y2
For U = 0 To 20
d(U) = U * 9
Next U
If L1 = d(10) Then
V = 10
GoTo label629
End If
If L1 > d(10) Then
GoTo label620
End If
For V = 0 To 9
If L1 < d(V) Then
'NEXT
'V = V + 1
GoTo LABEL_VVVV
End If
LABEL_VVVV:
Next V
GoTo label629label620:
For U = 11 To 20
If L1 > d(U) Then
'Next U
'U = U + 1
GoTo LABEL_UUUU
End If
V = 20 - U
label629:
s(V) = s(V) + 1
Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***"
HCOLOR = vbGreen
Call sub800
LABEL_UUUU:
Next U
For V = 1 To 10
Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___"
Next V
Print "REFLELTED"; V1
GoTo label120End SubPrivate Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = 3
End Sub我粗略改完了,没有进行过核对,且不知道那些输入的东西应该输多少,现在运行仍然是溢出。
Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***" 和
Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___"
语句没有运行,在窗体上显示出结果。将Debug改成Form1再运行显示的结果都是0.
我将一组输入的数据给你,你运行看看,P=19,M=197,Z=79,T=0.00000002, W=4000000,Q=200
我输入后得不到结果可又不懂调试,相信你一定能进行调试的
'Option Explicit
Dim HCOLOR As LongDim lastx As Long
Dim lasty As Long
Dim d(0 To 100) As Long
Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
If bset Then
lastx = xx
lasty = yy
Me.PSet (lastx, lasty), HCOLOR
Else
Me.Line (lastx, lasty)-(xx, yy), HCOLOR
lastx = xx
lasty = yy
End If
End SubPrivate Sub sub800()
If Int(X) = 0 Then
X = 1
End If
HPLOT 65 + Int(X), 0, True
HPLOT 65 + Int(X), 180
For g = 0 To 180 Step 9
HPLOT 65 + Int(X), g, True
HPLOT 67 + Int(X), g
Next g
End SubPrivate Sub Command1_Click()
On Error Resume Next
'p = InputBox("P=")
P = 19
'm = InputBox("M=")
M = 197
'z = InputBox("Z=")
Z = 79 z1 = 2
C = 6.02E+23
E = 1.6E-19
R1 = 0.00000001
R = 30
't = InputBox("T=")
T = 0.00000002
'w = InputBox("W=")
W = 4000000
N = C * P / M
label120:
'Q = InputBox("Q=")
Q = 200
If Q = 0 Then
End
End If
For I = 1 To Q
F = Rnd
A = 0.000000144
H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4)
If H > 1 Then
V1 = V1 + 1
End If
If H > 1 Then
Debug.Print "NO ENOUGH'W'OR TOOTHICK'T'"
End If
DoEvents
Next I
B = 2 * Atn(H / Sqr(1 - H ^ 2))
X = Abs(R * Cos(B))
Y = Abs(R * Sin(B))
dd = 2 * 3.1415926 * Rnd
O = -1
If dd < 90 * 3.1415926 / 180 Or dd > 270 * 3.1415926 / 180 Then
O = 1
End If
X2 = Abs(Y * Cos(dd))
Y2 = Abs(Y * Sin(dd))
If I > 1 Then
GoTo label290
End If
HCOLOR = vbRed
HPLOT 5, 90, True
HPLOT 7, 88
HPLOT 7, 86
HPLOT 1, 86
HPLOT 1, 94
HPLOT 7, 92
HPLOT 65, 70, True
HPLOT 65, 110
HPLOT 60, 110
HPLOT 60, 70
HPLOT 65, 70
label290:
HCOLOR = vbRed
Call sub800
If I > 1 Then
GoTo label390
End If c1 = 198
c2 = 90
r0 = 90
For X1 = -r0 To r0
Y1 = Int(Sqr(r0 ^ 2 - X1 ^ 2))
HPLOT c1 + X1, c2 + Y1, True
HPLOT c1 + X1, c2 - Y1
Next X1
label390:
For j = 1 To 55
HCOLOR = vbRed
HPLOT 5 + j, 90
HCOLOR = vbGreen
HPLOT 5 + j - 1, 90
Next j
k = Int(Y)
If F < 0.5 Then
k = -Int(Y)
End If
For L = 1 To Int(X)
If Int(X) = 0 Then
X = 1
End If
L1 = 90 + L * (k / Int(X))
HPLOT 95 + L, L1
HCOLOR = vbGreen
HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(X))
HPLOT 95 + L, L1
HCOLOR = vbRed
Next L
If Int(Y) = 0 Then
Y = 1
End If
HPLOT c1 + O * X2, c2 + k / Int(Y) * Y2
For U = 0 To 20
d(U) = U * 9
Next U
If L1 = d(10) Then
V = 10
GoTo label629
End If
If L1 > d(10) Then
GoTo label620
End If
For V = 0 To 9
If L1 < d(V) Then
'NEXT
'V = V + 1
GoTo LABEL_VVVV
End If
LABEL_VVVV:
Next V
GoTo label629label620:
For U = 11 To 20
If L1 > d(U) Then
'Next U
'U = U + 1
GoTo LABEL_UUUU
End If
V = 20 - U
label629:
s(V) = s(V) + 1
Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***"
HCOLOR = vbGreen
Call sub800
LABEL_UUUU:
Next U
For V = 1 To 10
Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___"
Next V
Debug.Print "REFLELTED"; V1
DoEvents
GoTo label120End SubPrivate Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = 3
End Sub
现在每次运行到, B = 2 * Atn(H / Sqr(1 - H ^ 2))
就溢出,H极大,我在最前面加了on error resume next,程序运行也没有什么改善。
H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4)
改为 H = ((N * T / 16 * R) * ((z1 * Z / W) ^ 2 * A ^ 2 / F)) ^ (1 / 4)
H值变小了,可是好像不能循环,循环语句好像有点问题。麻烦你再改后试试,然后再修改