LINUX.ORG.RU

Python и меню / перенос прогы с бейсика...?

 , ,


0

1

Приветствую! есть вот такая мегапрога на бейсике, которую я ныне на питон надумал перенести ( ибо с компиляторами / интерпретаторами под бейсик не всё хорошо - помирающий язык, хоть по мне и удобный и фунциональный)

99 REM ********************************************************************
Cvac = 2.99792458# * 10 ^ 8: REM Gaismas ahtrums vakuumaa in metr/sec^-1

100 REM Programm begin :CLS
101 CLS
g = 0: v = 0: t = 0: h = 0: vp = 0
RESET
PRINT
PRINT "Menu"
PRINT "1.Свободно падающее тело в атмосфере"
PRINT "2.Ускоренно движущееся тело"
PRINT "3.Энциклопедия"
PRINT "4.Quit"
PRINT
INPUT "Ваш выбор"; c
IF c = 1 THEN GOTO 500
IF c = 2 THEN GOTO 102
IF c = 3 THEN GOTO 900
IF c = 4 THEN GOTO 810
GOTO 101
102 CLS : PRINT : PRINT "Menu ": PRINT
PRINT "1.Вычисляем скорость в зависимости от ускорения и расстояния"
PRINT "2.Вычисляем данные для заданной скорости"
PRINT "3.Вычисляем данные по времени"
PRINT "4.Вычисляем данные по расстоянию учитывая разгон и торможение"
PRINT
104 INPUT ; "Ваш выбор"; asad
IF asad = 2 THEN GOTO 400
IF asad = 3 THEN GOTO 770
IF asad = 4 THEN GOTO 800
105 CLS
PRINT
110 INPUT ; "Ускорение в G (Ж)"; a: PRINT : REM G
115 Aconv = a * 9.81
PRINT
120 INPUT ; "Расстояние в Km"; s: PRINT : REM Km
125 Sconv = s * 1000: REM 1024 ;))
130 REM reserved for differenced speed up...
150 Vmax = SQR(Aconv * Sconv)
PRINT
160 PRINT Vmax; " m/s": REM in metr/sec
165 PRINT (Vmax / 1000) * 3600; " Km/h"
170 REM IF INKEY$ <> "" THEN GOTO 170

300 Vmid = ((Vmax / 1000) * 3600) / 2
310 PRINT "Средняя скоpость "; Vmid; " Km/h "
320 PRINT "Потраченное время "; s / Vmid; "h "
325 PRINT "                  "; (s / Vmid) * 3600; "seconds"
PRINT : PRINT
380 INPUT ; " Если хотите продолжить,нажмите Y "; q$
390 IF q$ = "y" OR q$ = "Y" THEN GOTO 100
395 END

400 CLS : PRINT : INPUT "Задайте конечную скорость в km\h "; vd
PRINT
INPUT ; "Ускорение в G (Ж)"; ad
PRINT
INPUT "Введите начальную скорость обьекта"; v0
PRINT
INPUT "Введите частоту вычислений в секундах "; dt

vp = (vd * 1000) / 3600
g = ad * 9.81
410
t = t + dt
v = v0 + g * t
h = (g * t ^ 2) / 2 - v0 * t



IF v >= vp THEN GOTO 450
IF v >= (Cvac - 100) THEN GOTO 445
GOTO 410
445 PRINT "Вы достигли скорости света в вакууме -1 метр/секунду! "
450 PRINT "Пройденный путь "; h / 1000; "Km "
PRINT "                "; (h / 1000) / 150000000; "a.v."
PRINT "                "; ((h / 1000) / 150000000) / 206265; " parsec "
PRINT "Потраченное время "; t / 3600; "h "
PRINT "                  "; (t / 3600) / 24; "Days"
PRINT "                  "; t; "sec "
PRINT "Достигнутая скорость "; (v / 1000) * 3600; "Km/h "
PRINT "                     "; v / 1000; "Km/sec"
PRINT "                     "; v / Cvac; " Lightspeed"

FOR ms = 500 TO 4000 STEP 20
SOUND ms, .1
NEXT ms

 BEEP
470 REM  IF INKEY$ <> "" THEN GOTO 470
INPUT "continue"; pause$
GOTO 101





499 END
500 CLS
505 PRINT
510 INPUT "Введите начальную высоту обьекта"; h0
515 PRINT
520 INPUT "Введите коефициент атмосферного сопротивления обьекта (Земная атмосфера для человека k~0.004 - 0.003)"; k
525 PRINT
530 INPUT "Введите ускорение свободного падения (на Земле ~9.81)"; g
535 PRINT
540 INPUT "Введите начальную скорость обьекта"; v0
542 PRINT
543 INPUT "Введите коефициент точности расчета в секундах"; dt
545 PRINT
547 t = 0: h = h0: v = v0: CLS : PRINT : PRINT "     Скорость тела "; "         Высота тела "; "                   Время падения"
550 GOTO 710
559 CLS : PRINT : PRINT "     Скорость тела "; "         Высота тела "; "                   Время падения"
600 REM skaitljoshanas bloks
610 a = g - k * v ^ 2
620 t = t + dt
630 h = h - v * dt
640 v = v + a * dt
650 REM GOTO 710
660 Vkm = (v / 1000) * 3600: Vout$ = "Km\h"
670 GOTO 710
700 CLS : PRINT
710 REM  PRINT "Скорость тела в"; Vout$; "       Высота тела "; "                   Время падения"
720 PRINT "   "; Vkm; Vout$; "                 "; h; "                      "; t
N = N + 1




730 IF h <= 0 THEN GOTO 750

IF N = 22 THEN GOTO 740
735 GOTO 610
740 REM INPUT "continue"; pause$
745 IF INKEY$ = "" THEN GOTO 745
N = 0: GOTO 559
750 END

770 REM peec laika
CLS : PRINT
INPUT " Введите точность исчислений в секундах "; dt
PRINT
INPUT "Введите продолжительность ускорения в секундах"; tf
PRINT
INPUT "Введите ускорение в G (Ж)"; gz
PRINT
g = gz * 9.81
775
t = t + dt
v = g * t
s = (g * t ^ 2) / 2 - t


REM Vmax = sqrt(g * s)
IF t >= tf THEN GOTO 780
GOTO 775
780 PRINT " Затраченное время:"; t; "sec"
PRINT "                    "; t / 3600; "hour"
PRINT "                    "; (t / 3600) / 24; "day"
PRINT
PRINT "Достигнутая скорость :"; (v / 1000) * 3600; "Km/h"
PRINT "                      "; (v / 1000); "Km/sec"
PRINT "                      "; v; "m/sec"
PRINT "                      "; ((v / 1000) * 3600) / 150000000; "a.v./hour"
PRINT "                      "; (((v / 1000) * 3600) * 24) / 150000000; "a.v./day"
PRINT "                      "; ((((v / 1000) * 3600) * 24) * 30) / 150000000; "a.v./month (30 day)"
PRINT
PRINT "Пройденное расстояние :"; s; "m"
PRINT "                       "; s / 1000; "Km"
PRINT "                       "; (s / 1000) / 150000000; "a.v."

FOR ms = 400 TO 1500
SOUND ms, .01
NEXT ms

785 IF INKEY$ = "" THEN GOTO 785
END

800 REM peec attaaluma,ieskaitot ieskr un bremz
CLS : PRINT





810 CLS : PRINT : PRINT : PRINT
820 PRINT " Copyright by J.Ciemgals from Sten systems (2:5100/16.2) :)  "
830 PRINT " Mathematic science:A.Usachov "
840 IF INKEY$ = "" THEN GOTO 840
END
900 REM enciklopedija
CLS
PRINT
PRINT "       Небольшая справочная,для перехода к следующим страницам,нажмите                   любую клавишу"
PRINT
PRINT
PRINT "                    Расстояния"
PRINT
PRINT " Астрономическая Единица (a.v.) =150,000,000 Km (среднее расстояние от солнца до земли)"
PRINT
PRINT " Парсек (Parsec) = 206265 а.е (a.v) = 3.25 св.год (Light years)"


910 IF INKEY$ = "" THEN GOTO 910





930 GOTO 101

гото на питоне фактически нема, есть у кого мысли как меню с переходами по отдельным блокам реализовать?

попытался фрагмент пока перенести по рассчёту разгона до заданной скорости по заданному ускорению перенести, но он, цволичь, не работает: блок ввода отрабатывает, потом в выводе идёт 
1
2
3
4
5

и всё - никаких текстов, никаких результатов рассчётов...

где я тут умудрился напортачить, и как лучще бейсиковский кусок 

IF v >= vp THEN GOTO 450
IF v >= (Cvac - 100) THEN GOTO 445
GOTO 410
445 PRINT «Вы достигли скорости света в вакууме -1 метр/секунду! »
450 PRINT «Пройденный путь »; h / 1000; «Km »

реализовать?

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

# paatrinajuma kalkulacija
# PRINT "2.Вычисляем данные для заданной скорости"
#  PATRINF.BAS

# light speed in vacuum
Cvac = float (2.99792458) * 10 ** 8
vd = float (raw_input (" input  final speed, in km/h: "))
vd_ms = float (vd) / 3.6
print "Final speed in m/s : : ", vd_ms


ad = float (raw_input (" input acceleration in G's: "))
v0 = float (raw_input (" input initial object speed, in km/h: "))

#determination
dt = float (raw_input (" input  calculation step, in seconds:: "))
v = 0
vp = 0
t = 0
while v >= vp or v >= (Cvac - 100):

    vp = (float (vd) * 1000) / 3600
    g = float (ad) * 9.81
    t = float (t) + dt
    v = float (v0) + g * t
    h = (float (g) * t ** 2) / 2 - v0 * t
else :
    if v >= (Cvac - 100):
        print "Speed of Light -1 m/s reached !!!"
    if v >= vp:
    
        print "Travelled distance:  "; h / 1000; "Km "
        print "                "; (h / 1000) / 150000000; "a.v."
        print "                "; ((h / 1000) / 150000000) / 206265; " parsec "
        print " Time spent: "; t / 3600; "h "
        print "                  "; (t / 3600) / 24; "Days"
        print "                  "; t; "sec "
        print "Reached speed:  "; (v / 1000) * 3600; "Km/h "
        print "                     "; v / 1000; "Km/sec"
        print "                     "; v / Cvac; " Lightspeed"
    
##    
    print '\a'


P.S. Да ниспошлёт Летающий Макаронный Монстр на вас свою благодать, ежели вы мне поможете в решении сиих жутких вопросов...:D

★★

Последнее исправление: wisedraco (всего исправлений: 1)
Ответ на: комментарий от ashot

Не-не-не, если брать бейсики моего возраста, то они не умели опускать номера строк и многобуквенные переменные. А если брать современные, то:

test.bas(1) error 145: Only valid in -lang deprecated or fblite or qb in '99 REM ********************************************************************'
test.bas(2) error 41: Variable not declared, Cvac in 'Cvac = 2.99792458# * 10 ^ 8: REM Gaismas ahtrums vakuumaa in metr/sec^-1'
test.bas(4) error 145: Only valid in -lang deprecated or fblite or qb in '100 REM Programm begin :CLS'
test.bas(5) error 145: Only valid in -lang deprecated or fblite or qb in '101 CLS'
test.bas(6) error 41: Variable not declared, g in 'g = 0: v = 0: t = 0: h = 0: vp = 0'
test.bas(15) error 41: Variable not declared, c in 'INPUT "Ваш выбор"; c'
test.bas(16) error 9: Expected expression, found 'c' in 'IF c = 1 THEN GOTO 500'
test.bas(16) error 3: Expected End-of-Line, found 'c' in 'IF c = 1 THEN GOTO 500'
test.bas(17) error 9: Expected expression, found 'c' in 'IF c = 2 THEN GOTO 102'
test.bas(17) error 3: Expected End-of-Line, found 'c' in 'IF c = 2 THEN GOTO 102'
test.bas(17) error 132: Too many errors, exiting

Ну ладно, пробуем deprecated
fbc -lang deprecated test.bas
test.bas(86) error 10: Expected '=', found 'ms'
SOUND ms, .1
      ^
test.bas(173) error 10: Expected '=', found 'ms'
SOUND ms, .01

Вангую, что досовский qbasic, но он давно сдох, поэтому прогу сначала надо переписать с мёртвого языка на бейсик.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin
	       Welcome to PowerBASIC 2.1
		       -------------------------

    This README file contains information that will be useful
    and of interest to you.  Please read it in its entirety,
    referring to it when you encounter problems not addressed
    in the PowerBASIC 2.0 User's Manual, Reference Guide, or
    the PowerBASIC 2.1 supplementary documentation.


    What's in this file
    -------------------

    1.  How to install PowerBASIC 2.1
    2.  How to get help
    3.  Corrections/additions to the PowerBASIC 2.0 manuals
    4.  Manual corrections/additions from the PowerBASIC 2.0 README file
    5.  Tips about converting Turbo Basic programs to PowerBASIC
    6.  List of files on the disks


    How to install PowerBASIC 2.1
    -----------------------------

    PowerBASIC 2.1 is provided in compressed format on two 360K or one
    720K floppy diskette(s).  Using the INSTALL.EXE program provided,
    you can install PowerBASIC 2.1 onto your hard disk, or onto one, two,
    or three floppy diskettes (depending on the density of the diskettes:
    3 360K, 2 720K, or 1 1.2 or 1.44M).  If you are installing PowerBASIC
    2.1 on a system without a hard disk, you must copy the DOS command
    processor (normally COMMAND.COM) to each PowerBASIC 2.1 distribution
    diskette before beginning the installation process.  To begin, just
    insert distribution disk #1 in your drive, execute INSTALL, and
    follow the program's instructions.

под досом 7.1 ( винь98 се? ) и в досбоксе вполне себе запускается...

wisedraco ★★
() автор топика
Ответ на: комментарий от redgremlin

Не спорю. Я думал ты про всякие вижуалообразные.

ashot ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.