Форум SoftWeb.ru

Форум SoftWeb.ru (https://softweb.ru/index.php)
-   Языки программирования (https://softweb.ru/forumdisplay.php?f=261)
-   -   Из Basic в Delphi (https://softweb.ru/showthread.php?t=25398)

Argenty 10.01.2008 07:56

Из Basic в Delphi
 
Помогите перевести в Delphi кусочек алгоритма с Basic ибо я Basic не учил, а теперь надо перевести целую программу. Посоветуйте книгу.

10 REM Прогр.PETF2 ЛИНИИ2 для пищевого полимера.
11 REM Получена из программы PETF2 16.11.05. Скоррект. 16.02.2006.
12 REM моделирования непрерывного производства ПЭТФ
13 REM Возможна работа с оптим.профилем (чит-ся из файла dat7.dat)
14 REM для этого в строке 90 надо поставить goto 92(обычно goto 100)
16 DATA 5.3e4,2.65e4,6.8e5,6e8,7e7,7e7,.5e6,.5e6,3.6e9,6.8 e5
25 DIM W(11),W1(11),F(11),Y(11),K(11)
30 DATA 15,15,18.5,29.8,29.8,29.8,17.6,17.6,37.8,18.5
40 DATA 0.3,0.15,0.5,2.5,1.25
50 rem DATA 160.5,156,159,159,163,172,181.5,192,200,203,209,21 6,227,237,247
55 DATA 158,156,159,160,164,174,180,190,199,201,209,214,22 8,241,251
60 FOR J=1 TO 10:READ K1(J):NEXT
70 FOR J=1 TO 10:READ E1(J):NEXT
80 READ KK1,KK2,KK3,KK4,KK5
90 DIM T(15),s(15),Y1(15,15),z(14):FOR J=1 TO 15:READ T(J):NEXT:goto 100
91 rem ***чтение оптимального профиля из файла***
92 open "dat7.dat" as #7 len=4
93 for i=1 to 15:field #7,4 as a$:get #7,i:t(i)=cvs(a$):next
94 close #7:for i=1 to 15:print t(i);:next:delay (2)
100 DATA .00199,.1915,.0606,.452,.753,1.07,.977
110 READ RR,DV,EV,CD,CE,ROD,ROE
118 rem давл.РТ в мм рт. ст.,длина реакт.L в м,уровень HD в 13-15 трубах в %
120 PT=760:L=6:R=0.3:HD=70:PI=3.14159:N=11:N2=10:H=.25 :H1=60/H:HH=H
121 rem for i=1 to 3:s(i)=0.211:next i
122 rem for i=4 to 12:s(i)=0.1983:next i
123 rem for i=13 to 15:s(i)=0.2276:next i:s(14)=0.211
124 for i=1 to 12:s(i)=0.2276:next i
125 mmm=32.04:mme=62.07:mmw=18:mma=44:mmd=194
130 DEF FND(X)=.18*(1+.00077*(X-140))
140 DEF FNE(X)=.001*(9.412E-05*X*X+.026*X+55.19235)
145 rem def fne(x)=.0606*(1+.0014*(x-140))
150 DEF FNM(X)=.001*(43.9*(1+.0014*(x-140)))
155 REM DEF FNM(X)=.001*(.000328*X*X+.0307*X+39.74)
160 DEF FNW(X)=.001*(.0000368*X*X+.01496*X+17.736)
162 rem показатели каскада для ЛИНИИ2
170 N3=15:QD=3.47:N4=3.55:TD=160:TE=194:TG=30:TM=25
172 rem кол-во кат.(ацет. марг.) в литр/час для пр-сти по ДМТ 3.46м3/час
173 KTM=60.508
230 CLS:PRINT " РЕЖИМ КОРРЕКЦИИ ВХОДНЫХ ДАННЫХ":PRINT
240 GOSUB 520:GOSUB 590:GOSUB 520:GOSUB 760
310 GOSUB 1620
510 delay (5):goto 2010
520 PRINT:PRINT " ВХОДНЫЕ ДАННЫЕ СТАДИИ ПЭФ"
530 PRINT "уровень в последних трубах,%"TAB(44)HD
540 PRINT "пр-сть по ДМТ"TAB(44) USING "#.##";QD
550 PRINT "соотношение ДМТ:ЭГ"TAB(43)"1:" USING "#.##";N4
555 rem кол-во кат.(ацет. марг.) в литр/час для пр-сти по ДМТ QD
556 KTM1=QD/3.46*KTM
560 PRINT "кол-во катализ. (ацетат марг.) в л/час " USING " ##.###";KTM1
570 PRINT "распределение температур":FOR J=1 TO N3:PRINT T(J);:NEXT
580 PRINT:PRINT:RETURN
590 PRINT "Введите числа,равные 1,для тех входных данных,кот.нуждaются"
600 PRINT "в коррекции,в следующем порядке:уровень,пр-сть по ДМТ,"
610 PRINT "соотн.ДМТ:ЭГ,колич.кат-ра,распр-ие температур.Примеры:1,1,1,1,1"
620 PRINT "- в коррекции нуждаются все данные;1,,,,1 - в коррекции нужда-"
630 PRINT "ются уровень и распределение температур по трубам"
640 INPUT L4,L5,L6,L9,L7
660 IF L4=1 THEN INPUT "уровень = ";HD
661 hr=hd/50:if hr<=1 then s=r^2/15*hr*(12*sqr(2*hr-hr^2)+8*sqr(2*hr)):goto 664
662 s=pi*r^2-r^2/15*(2-hr)*(12*sqr(2*(2-hr)-(2-hr)^2)+8*sqr(2*(2-hr)))
663 rem s(16)=s:s(17)=s:s(18)=s
664 s(13)=s:s(14)=s:s(15)=s
670 IF L5=1 THEN INPUT "пр-сть по ДМТ = ";QD
680 IF L6=1 THEN INPUT "соотн.ДМТ:ЭГ = 1:";N4
690 KTM2=QD/3.46*KTM:IF L9=1 THEN INPUT "кол-во катал-ра Ац.Мн.= ";KTM2
700 IF L7=1 THEN 710 ELSE 750
710 PRINT "распределение температур по трубам"
720 for j=1 to n3
730 PRINT "t("J")= "T(J);:INPUT T1(J):IF T1(J)<>0 THEN T(J)=T1(J)
740 NEXT
750 RETURN
760 FD=QD*1000/H1/FND(TD)
770 FEG=N4*FD
780 QEK=.001*KTM:TEK=20:FEK=QEK*1000/H1/FNE(TEK)
800 FEG=FEG+FEK:QE=FEG*H1*FNE(TE)/1000
810 A1=ROD*FD*FND(TD):A2=ROE*FEG*FNE(TE):C=(CD+CE)/2
820 T=(CD*TD*A1+CE*TE*A2)/(C*(A1+A2)):T(0)=T
840 VV0=FD*FND(T)+FEG*FNE(T):Q0=VV0/1000
850 F=2*FD:FF=FD+FEG:FOR J=1 TO N:W1(J)=0:NEXT :W1(1)=F:W1(4)=FEG
860 MT=0:MG=0:MW=0:MA=0:X=0
870 FOR I=1 TO N3:L2=0:IL=0
880 TT=(T(I)-T(I-1))/L
885 L1=Q0/s(i):L2=L2+L1:IF L2>L THEN 1033
890 T=T(I-1)+TT*L2
895 IF IL=1 THEN FOR J=1 TO N:W1(J)=W1(J)*AA:NEXT
900 FOR J=1 TO N2:K2(J)=K1(J)*EXP(-E1(J)/(T+273)/RR):NEXT J
920 PM=10^(8.505629-1979.38/(290+T))
930 PW=10^(8.02406-1721.35/(235+T))
940 PG=10^(21.61-3729/(T+273)-4.042*LOG(T+273)*.43439)
945 PA=EXP(16.2481-2465.15/(T+273-37.15))
950 GM=PM/PT:GW=PW/PT:GG=PG/PT:GA=PA/PT
980 VV=Q0*1000:FOR J=1 TO N:W(J)=W1(J)/VV:NEXT
990 GOSUB 1220:GOSUB 1130



Добавлено через 23 часа 11 минут
Помогите понять принципы отличия! Написание. coffee:

OSLeroi 09.05.2014 23:16

Re: Из Basic в Delphi
 
Вопрос видимо уже не актуален... Однако, что касается самого Бейсика, как такового, рекомендую всем познакомиться с его основами. Ибо он прост и красив. Попробуйте, к примеру, портировать с бейсика такие программочки на любой другой язык программирования:

c1 = 0
a$ = "░▓▒"
SCREEN 13
CLS
FOR j = 1 TO 4
FOR i = 1 TO 32
c1 = c1 + 1
REM SLEEP (1)
COLOR c1
s = 18 * RND(2) + j
LOCATE s, i + j
PRINT a$
NEXT i
SLEEP (1)
NEXT j

c1 = 0: k = 1
SCREEN 13
CLS
FOR j = 1 TO 100
FOR i = 1 TO 270
c1 = c1 + 1
REM SLEEP (1)
IF c1 > 240 THEN c1 = 1
COLOR c1
s = 240 * RND(2) + j
PSET (s, i + j - k), c1
NEXT i
k = k + 2
REM SLEEP (1)
NEXT j

c1 = 0: k = 1
SCREEN 13
CLS
FOR j = 15 TO 100
FOR i = 15 TO 300
c1 = c1 + 1
REM SLEEP (1)
IF c1 > 240 THEN c1 = 1
COLOR c1
s = 210 * RND(j) + j
ss = 15 - 29 * RND(i)
sss = 15 - 29 * RND(i)
LINE (s, i + j - k)-(s + ss, i + j - k - sss), c1
REM PSET (s, i + j - k), c1
NEXT i
k = k + 2
SLEEP (1)
NEXT j

c1 = 0: k = 1
SCREEN 13
CLS
FOR j = 40 TO 60
FOR i = 45 TO 70
c1 = c1 + 1
IF c1 > 240 THEN c1 = 1
COLOR c1
s = 210 * RND(j) + j
ss = 35 - 69 * RND(i)
sss = 35 - 69 * RND(i)
r = c1 * RND(i) / 3
d = 6 * RND(i)
e = d / 2 - .3
CIRCLE (s + ss, i + j - k - sss), r, c1, , , e
NEXT i
k = k + 1
SLEEP (1)
NEXT j

c1 = 0: k = 1
SCREEN 13
CLS
FOR j = 1 TO 100
FOR i = 1 TO 290
c1 = c1 + 1
IF c1 > 240 THEN c1 = 1
COLOR c1
s = ABS(300 * RND(2) + j)
s2 = ABS(i + j - k - INT(i / 2))
PSET (s, s2), c1
CIRCLE (s2, c1), i, c1
NEXT i
k = k + 2
SLEEP (1)
NEXT j

Ужасно получается, по сравнению с исходниками на бейсике, не так ли? )))

Akfatori 10.10.2014 09:22

Re: Из Basic в Delphi
 
Реализаций Бейсика очень много.
Обратите внимание, даже внешне программа Argenty (очень старинная версия))
отличается от OSLeroi (Вероятно, Qbasic под MS-DOS).
Современные версии, например VB от Microsoft - полноценные универсальные среды программирования
Ни первая, ни вторая программа там работать не будут.
Я в свое время мучительно трудно переводил некоторые проекты на Delphi.

4айник 11.10.2014 13:27

Re: Из Basic в Delphi
 
Цитата:

Сообщение от Akfatori (Сообщение 650239)
Современные версии, например VB от Microsoft - полноценные универсальные среды программирования
Ни первая, ни вторая программа там работать не будут.

если говорить не о VBA, а именно о VB, то Ваше утверждение более чем спорное


Часовой пояс GMT +3, время: 00:40.

Работает на vBulletin® версия 3.8.12 by vBS.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot