2016-01-25 7 views
1

Я пытаюсь распечатать координатные выходы программы в текстовый файл, чтобы использовать его в другой программе, но я ничего не знаю о GWBASIC и его в первый раз используя MS-DOS. Мне нужно, чтобы он открыл текстовый файл с именем plot.txt и распечатал его там, и сохранил его без фактического отображения на GWBASIC. Вот программа, которую я нашел в старом журнале.Как печатать выходные данные .bas-файла с текстом

810 REM MAKE A GLOBULAR 
12 REM 
14 R0=20: R2=R0*R0: R3=R2*R0 
16 P1=3.14159265# 
18 C0=P1*P1*R3/4 
20 R1=R0/SQR(2) 
22 XM=512: YM=512 
24 X2=XM/2: Y2=YM/2: S=5 
26 INPUT "HOW MANY STARS ";T 
27 RANDOMIZE TIMER 
28 CLS: REM CLEAR SCREEN 
30 FOR I=1 TO T 
32 C=C0*RND: R=R1 
34 REM 
36 REM NOW FIND R 
38 FOR K=1 TO 5 
40 GOSUB 100 
42 R=R+(C-C1)/D 
44 NEXT K 
46 REM 3-DIMENSIONAL PLACE 
48 X=RND-.5 
50 Y=RND-.5 
52 Z=RND-.5 
54 S1=SQR(X*X+Y*Y+Z*Z) 
56 IF S1>.5 THEN GOTO 48 
58 REM POINT IS NOW IN SPHERE 
60 R=R*S1: X=X*R: Y=Y*R: Z=Z*R 
62 GOSUB 200 
64 NEXT I 
66 END 
68 REM 
100 REM NEWTON-RAPHSON ITERATION 
105 A=R/R0 
110 C1=ATN(A)*.5*R3 
115 A=1+A*A 
120 C1=C1+R*.5*R2/A 
125 C1=P1*(C1-R*R2/(A*A)) 
130 D=4*P1*R*R/(A*A*A) 
135 RETURN 
140 REM 
200 REM 2-DIMENSIONAL PLOT 
203 SCREEN 9 
205 X=X*S+X2: Y=Y*S+Y2 
210 IF X<0 OR Y<0 THEN 225 
215 IF X>=XM OR Y>=YM THEN 225 
220 PSET(X,Y) 
225 RETURN 
230 REM ------------------------ 
240 REM APPEARED IN ASTRONOMICAL 
250 REM COMPUTING, SKY & TELE- 
260 REM SCOPE, APRIL, 1986 
270 REM ------------------------ 
+0

Этот вопрос довольно широк –

+0

Открыть «plot.txt» для вывода AS # 1: print # 1, «whatever» – Marged

+0

Просто из любопытства: почему вы работаете с dos и basic? Какую версию вы используете, потому что более современные версии поддерживают qbasic – Marged

ответ

1

Вот Python 3 пересказ:

#globular.py 
#Python paraphrase of model.bas from 
#http://www.skyandtelescope.com/wp-content/uploads/model.bas 

from math import pi, sqrt, atan 
from random import uniform, random 

#Global variables: 

r0 = 20.0 
r2 = r0**2 
r3 = r0**3 
c0 = pi**2*r3/4 
r1 = r0/sqrt(2) 

def NRI(c,r): 
    #Newton-Raphson Iteration 
    a = r/r0 
    c1 = atan(a)*0.5*r3 
    a = 1+a**2 
    c1 += r*0.5*r2/a 
    c1 = pi*(c1-r*r2/a**2) 
    d = 4*pi*r**2/a**3 
    return (c1,d) 

def makeStars(t): 
    stars = [] 
    for i in range(t): 
     c = c0*random() 
     r = r1 
     for k in range(5): 
      c1,d = NRI(c,r) 
      r += (c-c1)/d 
     while True: 
      x = uniform(-0.5,0.5) 
      y = uniform(-0.5,0.5) 
      z = uniform(-0.5,0.5) 
      s1 = sqrt(x**2 + y**2 + z**2) 
      if s1 <= 0.5: break 
     r *= s1 
     x *= r 
     y *= r 
     z *= r 
     stars.append((x,y,z)) 
    return stars 

def starsToFile(t,fname): 
    stars = makeStars(t) 
    f = open(fname,'w') 
    for star in stars: 
     print(*star, sep = ', ',file = f) 
    f.close() 

я пропустил часть о печати x и y и вместо этого написал функцию makeStars возвращать список (x,y,z) кортежей, а также связанной с ними функции который принимает такой вывод и отправляет его в текстовый файл. Эта последняя функция - единственная вещь, которая использовала Python 3 вместо Python 2. Если вы используете Python 2, вы можете импортировать функцию печати Python 3 из будущего.

Typing starsToFile(100,'stars.txt') в оболочке Python дал мне текстовый файл, который начинается:

-0.32838465248713156, -0.3294895266926551, -1.2963580524762535 
14.20224408569865, 1.4434961933043464, 6.450969593697097 
1.6525937589658193, -0.24447292610082685, 1.0543647986350608 
1.5707528567123823, 5.190972598268825, -2.0054790217091134 

У меня нет хорошего 3-d рассеивают-график графиков на моих кончиках пальцев, но вот снимок экрана 50 баллов, порождаемая функцией и построены с использованием системы компьютерной алгебры под названием Выведите:

enter image description here

Заключительное замечание: Интересно, если есть опечатка в исходном коде. Линия

C0=P1*P1*R3/4 

кажется мне подозрительным, так как это довольно редко встречается в математике pi появляться в квадрате - хотя это делает случиться. Может быть, там должен быть только 1 фактор pi (который тогда имел бы эффект настройки C0, пропорциональный объему сферы радиуса R0). С другой стороны, я не знаю точно, что здесь происходит, поэтому я его оставил. Если результаты кажутся проблематичными, вы можете экспериментировать с этой линией.

+0

Я впечатлен! Иногда я пропускаю время, когда основная память была измерена в KB ... – Marged

1

Если вы хотите копию вычисленных координат просто добавить эти строки:

1 OPEN "PLOT.TXT" FOR OUTPUT AS #1 
65 CLOSE #1 
221 PRINT #1, X + "," + Y 

Программа будет работать, как и раньше, но в дополнение к этому он выводит координату в файл с именем plot.txt

Поместите их в изображение размером 640x350 (этот размер требуется SCREEN 9), и вы получите тот же результат.

+0

Nice. Вы знаете, как можно запускать такие программы в современных версиях Windows? –

+0

Если вы все еще используете 32-разрядную версию Windows, то должен работать старый добрый qbasic/gwbasic. Альтернативой этому может быть использование dosbox.exe, который даже работает с 64-разрядными версиями Windows. Говорят, что Qb64 поддерживает старые базовые программы в Windows, Linux, Android и MaxOSX, но я не пробовал это сам. Запуск Dos в виртуальной машине тоже работает, но немного преувеличен ;-) – Marged