Разобрать код - QBasic
Формулировка задачи:
Помогите разобрать код ниже. Что в нем происходит? Хочу переписать программу с qBasic на VB.
Не очень понятно что происходит здесь:
Я попытался перевести код в VB, но в результат неправильный выходит
Здесь аналогично не понятно
Помогите привести это к коду Visual Basic
Листинг программы
- 70 REM // Ввод исxодныx данныx //
- 80 S1$="BaSO4":S2$="CaCl2":S3$="CaSO4": REM // Формулы соединений //
- 110 T1=1853:T2=1045:T3=1723 : REM // Темперaтуры плaвления соединений //
- 120 N1=6:N2=3:N3=6:EEE=.0001 : REM // Число aтомов в молекуле //
- 127 REM // Haчaло рaсчетa Тэ12, Тэ13, Тэ23 //
- 130 TT1=T1:TT2=T2:NN1=N1:NN2=N2:GOSUB 1010:TE12=TE1:X112=X1:X212=X2
- 140 TT1=T1:TT2=T3:NN1=N1:NN2=N3:GOSUB 1010:TE13=TE1:X113=X1:X313=X2
- 150 TT1=T2:TT2=T3:NN1=N2:NN2=N3:GOSUB 1010:TE23=TE1:X223=X1:X323=X2
- 160 GOSUB 2010:REM // рaсчет Тэ123 //
- 170 GOSUB 3010:REM // Построение конц. треугольникa и погрaн. кривыx //
- 180 GOSUB 3300:REM // Вывод дaнныx нa экрaн //
- 200 END
- 1010 REM Опред. состaвa и темп. плaвления эвтектики в 2-х комп.сист.
- 1205 X2=0:PP=1:EEE=.0001
- 1215 PP=PP/10
- 1220 X2=X2+PP
- 1245 X1=EXP(NN1*(1-TT1*(1-LOG(X2)/NN2)/TT2))
- 1250 Y=X1+X2-1
- 1260 IF ABS(Y)<EEE THEN GOTO 1355 ELSE 1270
- 1270 IF Y<0 THEN GOTO 1220 ELSE 1290
- 1290 X2=X2-PP:GOTO 1215
- 1355 TE1=TT1/(1-LOG(X1)/NN1)
- 1400 RETURN
- 2010 REM Опред. состaвa и темп. плaвления эвтектики в 3-х комп.сист.
- 2205 X2=0:PP=1:EEE=.0001
- 2215 PP=PP/10
- 2220 X2=X2+PP
- 2245 X1=EXP(N1*(1-T1*(1-LOG(X2)/N2)/T2))
- 2247 X3=EXP(N3*(1-T3*(1-LOG(X2)/N2)/T2))
- 2250 Y=X1+X2+X3-1
- 2260 IF ABS(Y)<EEE THEN GOTO 2355 ELSE GOTO 2270
- 2270 IF Y<0 THEN GOTO 2220 ELSE GOTO 2290
- 2290 X2=X2-PP:GOTO 2215
- 2355 TE123=T1/(1-LOG(X1)/N1)
- 2370 X1123=X1:X2123=X2:X3123=X3
- 2400 RETURN
- 3010 REM Построение конц. треугольникa и кривыx ликвидусa
- 3020 CLS
- 3030 SCREEN 2
- 3040 SS=SQR(3)/2
- 3050 CC=.5
- 3060 X1=100:Y1=160
- 3070 X2=400:Y2=160
- 3080 X3=250:Y3=160-300*SS/2.3
- 3090 LINE(X1,Y1)-(X2,Y2)
- 3100 LINE(X1,Y1)-(X3,Y3)
- 3110 LINE(X2,Y2)-(X3,Y3)
- 3130 XAB=100+300*X212*CC:YAB=160-(300*X212*SS)/2.3
- 3140 XAC=100+300*X313:YAC=160
- 3150 XBC=400-300*X223*CC:YBC=160-(300*X223*SS)/2.3
- 3160 XABC=100+300*X2123*CC+300*X3123:YABC=160-(300*X2123*SS)/2.3
- 3170 LINE(XAB,YAB)-(XABC,YABC)
- 3180 LINE(XAC,YAC)-(XABC,YABC)
- 3190 LINE(XBC,YBC)-(XABC,YABC)
- 3200 RETURN
- 3300 LOCATE 4,40:PRINT S1$;"-";S2$
- 3305 LOCATE 4,55:PRINT "X(";S1$;")=";
- 3306 PRINT USING "###.#";X112*100;:PRINT " мол.%"
- 3310 LOCATE 5,55:PRINT "X(";S2$;")=";
- 3315 PRINT USING "###.#";X212*100;:PRINT " мол.%"
- 3316 LOCATE 6,55:PRINT "Te2=";:PRINT USING "####";TE12;:PRINT " K"
- 3320 LOCATE 7,40:PRINT S1$;"-";S3$
- 3325 LOCATE 7,55:PRINT "X(";S1$;")=";
- 3326 PRINT USING "###.#";X113*100;:PRINT " мол.%"
- 3330 LOCATE 8,55:PRINT "X(";S3$;")=";
- 3335 PRINT USING "###.#";X313*100;:PRINT " мол.%"
- 3336 LOCATE 9,55:PRINT "Te2=";:PRINT USING "####";TE13;:PRINT " K"
- 3340 LOCATE 10,40:PRINT S2$;"-";S3$
- 3345 LOCATE 10,55:PRINT "X(";S2$;")=";
- 3346 PRINT USING "###.#";X223*100;:PRINT " мол.%"
- 3350 LOCATE 11,55:PRINT "X(";S3$;")=";
- 3355 PRINT USING "###.#";X323*100;
- 3356 PRINT " мол.%":LOCATE 12,55:PRINT "Te2=";
- 3357 PRINT USING "####";TE23;:PRINT " K"
- 3370 LOCATE 14,55:PRINT S1$;"-";S2$;"-";S3$
- 3380 LOCATE 15,55:PRINT "X(";S1$;")=";
- 3385 PRINT USING "###.#";X1123*100;:PRINT " мол.%"
- 3386 LOCATE 16,55:PRINT "X(";S2$;")=";:PRINT USING "###.#";X2123*100;:PRINT " мол.%"
- 3390 LOCATE 17,55:PRINT "X(";S3$;")=";
- 3395 PRINT USING "###.#";X3123*100;:PRINT " мол.%"
- 3400 LOCATE 18,55:PRINT "Te3=";:PRINT USING "####";TE123;:PRINT " K"
- 3420 LOCATE 5,30:PRINT S2$
- 3425 LOCATE 22,12:PRINT S1$:LOCATE 22,50:PRINT S3$
- 3430 RETURN
Листинг программы
- 1245 X1=EXP(NN1*(1-TT1*(1-LOG(X2)/NN2)/TT2))
- 1250 Y=X1+X2-1
- 1260 IF ABS(Y)<EEE THEN GOTO 1355 ELSE 1270
- 1270 IF Y<0 THEN GOTO 1220 ELSE 1290
- 1290 X2=X2-PP:GOTO 1215
- 1355 TE1=TT1/(1-LOG(X1)/NN1)
- 1400 RETURN
Листинг программы
- X2 = 0
- X2 = X2 + PP
- X1 = Math.Exp(N1 * (1 - T1 * (1 - Math.Log(X2) / N2) / T2))
- Y = X1 + X2 - 1
- If Math.Abs(Y) < 0.0001 Then TE1 = T1 / (1 - Math.Log(X1) / N1) Else If Y < 0 Then X2 = X2 + 0.1 Else X2 = X2 - 0.1
Листинг программы
- 2245 X1=EXP(N1*(1-T1*(1-LOG(X2)/N2)/T2))
- 2247 X3=EXP(N3*(1-T3*(1-LOG(X2)/N2)/T2))
- 2250 Y=X1+X2+X3-1
- 2260 IF ABS(Y)<EEE THEN GOTO 2355 ELSE GOTO 2270
- 2270 IF Y<0 THEN GOTO 2220 ELSE GOTO 2290
- 2290 X2=X2-PP:GOTO 2215
- 2355 TE123=T1/(1-LOG(X1)/N1)
- 2370 X1123=X1:X2123=X2:X3123=X3
- 2400 RETURN
Решение задачи: «Разобрать код»
textual
Листинг программы
- 70 REM // Ввод исxодныx данныx //
- 80 S1$="BaSO4":S2$="CaCl2":S3$="CaSO4": REM // Формулы соединений //
- 110 T1=1853:T2=1045:T3=1723 : REM // Темперaтуры плaвления соединений //
- 120 N1=6:N2=3:N3=6:EEE=.0001 : REM // Число aтомов в молекуле //
- 127 REM // Haчaло рaсчетa Тэ12, Тэ13, Тэ23 //
- 130 TT1=T1:TT2=T2:NN1=N1:NN2=N2:GOSUB 1010:TE12=TE1:X112=X1:X212=X2
- 140 TT1=T1:TT2=T3:NN1=N1:NN2=N3:GOSUB 1010:TE13=TE1:X113=X1:X313=X2
- 150 TT1=T2:TT2=T3:NN1=N2:NN2=N3:GOSUB 1010:TE23=TE1:X223=X1:X323=X2
- 160 GOSUB 2010:REM // рaсчет Тэ123 //
- 170 GOSUB 3010:REM // Построение конц. треугольникa и погрaн. кривыx //
- 180 GOSUB 3300:REM // Вывод дaнныx нa экрaн //
- 200 END
Объяснение кода листинга программы
- Ввод исходных данных:
S1$=
BaSO4
:S2$=CaCl2
:S3$=CaSO4
(строки 70-80) T1=1853:T2=1045:T3=1723 (строки 110-120) N1=6:N2=3:N3=6:EEE=.0001 (строки 120-127) - Начало расчета: Тэ12, Тэ13, Тэ23 (строка 130)
- Расчет Тэ12: TT1=T1:NN1=N1:GOSUB 1010:TE12=TE1:X112=X1:X212=X2 (строки 130-140)
- Расчет Тэ13: TT1=T1:NN1=N1:NN2=N3:GOSUB 1010:TE13=TE1:X113=X1:X313=X2 (строки 140-150)
- Расчет Тэ23: TT1=T2:TT2=T3:NN1=N2:NN2=N3:GOSUB 1010:TE23=TE1:X223=X1:X323=X2 (строки 150-160)
- Расчет Тэ123: GOSUB 2010 (строка 160)
- Построение концентрического треугольника и пограничных кривых: GOSUB 3010 (строка 170)
- Вывод данных на экран: GOSUB 3300 (строка 180)
- Конец работы: END (строка 200)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д