Лунолёты (HP 35s)
Игровые программы из серии «Путь к Земле» для HP 35s
Лунолёт-1
A001 LBL A C:
A002 CLEAR VARS
A003 SF 10
A004 eqn LUNOLET-1
A005 PSE
A006 2250
A007 STO W
A008 400
A009 STO F
A010 1.62
A011 STO G
A012 3660
A013 STO C
A014 29.43
A015 STO J
A016 RCL H A:
A017 0.001
A018 +
A019 x>=0
A020 GTO A043
A021 RCL G
A022 RCL P
A023 RCL D
A024 x
A025 -
A026 RCL H
A027 x
A028 2
A029 x
A030 RCL U
A031 x^2
A032 +
A033 SQRT
A034 RCL U
A035 -
A036 RCL H
A037 2
A038 x
A039 x↔y
A040 /
A041 STO T
A042 GTO A165
A043 RCL H
A044 ABS
A045 0.001
A046 -
A047 x>=0
A048 GTO A071
A049 0
A050 STO H
A051 RCL E
A052 x=0
A053 GTO A070
A054 0
A055 STO E
A056 RCL U
A057 ABS
A058 12.5
A059 -
A060 x>0
A061 GTO A066
A062 eqn LANDING GOOD
A063 PSE
A064 XEQ A206
A065 GTO A204
A066 eqn LANDING BAD
A067 PSE
A068 XEQ A206
A069 GTO A204
A070 GTO A122
A071 1
A072 STO E
A073 RCL P
A074 ABS
A075 100
A076 -
A077 x>0
A078 GTO A088
A079 RCL P
A080 ABS
A081 25
A082 -
A083 x<=0
A084 GTO A094
A085 eqn OVERLOAD
A086 PSE
A087 GTO A094
A088 eqn OVERLOAD
A089 PSE
A090 eqn YOU DIED
A091 PSE
A092 XEQ A206
A093 GTO A204
A094 RCL P
A095 ABS
A096 RCL J
A097 -
A098 x<0
A099 GTO A108
A100 0
A101 STO M
A102 RCL P
A103 ABS
A104 RCL J
A105 -
A106 STO T
A107 GTO A154
A108 RCL F
A109 0.001
A110 -
A111 x>=0
A112 GTO A122
A113 0
A114 STO F
A115 STO M
A116 eqn FUEL ENDED
A117 PSE
A118 RCL C
A119 STO T
A120 XEQ A206
A121 GTO A142
A122 XEQ A206 S:
A123 R/S
A124 INPUT M
A125 100
A126 -
A127 x<=0
A128 GTO A132
A129 eqn ERROR INPUT
A130 PSE
A131 GTO A124
A132 INPUT T
A133 x<>0
A134 GTO A138
A135 eqn ERROR INPUT
A136 PSE
A137 GTO A132
A138 x>0
A139 GTO A142
A140 eqn REVERSE
A141 PSE
A142 RCL T E:
A143 SGN
A144 RCL M
A145 SGN
A146 x
A147 STO D
A148 RCL T
A149 ABS
A150 STO T
A151 RCL M
A152 ABS
A153 STO M
A154 RCL M G:
A155 RCL T
A156 /
A157 STO Q
A158 RCL C
A159 x
A160 RCL W
A161 RCL F
A162 +
A163 /
A164 STO P
A165 RCL R X:
A166 RCL T
A167 +
A168 STO R
A169 RCL P
A170 RCL D
A171 x
A172 RCL G
A173 -
A174 RCL T
A175 x
A176 RCL U
A177 +
A178 STO B
A179 RCL U
A180 +
A181 RCL T
A182 x
A183 2
A184 /
A185 RCL H
A186 +
A187 STO H
A188 RCL B
A189 STO U
A190 RCL F
A191 RCL Q
A192 RCL T
A193 x
A194 -
A195 STO F
A196 x>=0
A197 GTO A016
A198 RCL F
A199 RCL Q
A200 /
A201 STO T
A202 GTO A165
A203 GTO A016
A204 R/S B:
A205 GTO A001
A206 VIEW H
A207 PSE
A208 VIEW U
A209 PSE
A210 RCL R
A211 RCL F
A212 RCL U
A213 RCL H
A214 RTN
---------
CK=213B
LN=792
Запуск: XEQ A
После останова отображается:
- Н - высота, м
- U - вертикальная скорость, м/с
Нажать: R/S
На запрос ввести:
- M - расход топлива, кг
- Т - время маневра, с
- Реверс тяги: ввести время со знаком минус.
Нажать: R/S
После останова отображается:
- Н - высота, м
- U - вертикальная скорость, м/с
- В регистрах стека (прокручивать нажатием кнопки R↓):
- X - высота, м
- Y - вертикальная скорость, м/с
- Z - остаток топлива, кг
- T - суммарное время полета, с
В регистрах памяти:
- H - высота, м
- U - вертикальная скорость, м/с
- F - остаток топлива, кг
- R - суммарное время полета, с
Ограничения:
- Расход топлива за маневр не может превышать 100 кг.
Математическая модель:
C:
PRINT "LUNOLET-1"
G = 1.62
W = 2250
C = 3660
J = 29.43
F = 400
R = 0
H = 0
U = 0
E = 0
A:
IF H < -.001 THEN
T = 2 * H / (SQR(U * U + 2 * H * (G - P * D)) - U)
GOTO X
END IF
IF ABS(H) <= .001 THEN
H = 0
IF E = 1 THEN
E = 0
SELECT CASE ABS(U)
CASE 0 TO 12
PRINT "Landing good"
PRINT H
PRINT U
PRINT F
PRINT R
GOTO B
CASE IS > 12.5
PRINT "Landing bad"
PRINT H
PRINT U
PRINT F
PRINT R
GOTO B
END
END SELECT
END IF
GOTO S
END IF
E = 1
SELECT CASE ABS(P)
CASE 25 TO 100
PRINT "Overload"
CASE IS > 100
PRINT "Overload"
PRINT "You died": GOTO B
END
END SELECT
IF ABS(P) >= J THEN
M = 0
T = ABS(P) - J
GOTO G
END IF
IF F >= .001 THEN GOTO S
F = 0
PRINT "Fuel ended"
M = 0
T = C
PRINT H
PRINT U
GOTO E
S:
PRINT H
PRINT U
PRINT F
PRINT R
INPUT M
IF M > 100 THEN PRINT "Error input": GOTO S
INPUT T
IF T = 0 THEN PRINT "Error input": GOTO S
IF T < 0 THEN PRINT "Reverse"
E:
D = SGN(T) * SGN(M)
T = ABS(T)
M = ABS(M)
G:
Q = M / T
P = Q * C / (W + F)
X:
R = R + T
B = U + (P * D - G) * T
H = H + (U + B) * T / 2
U = B
F = F - Q * T
IF F < 0 THEN T = F / Q: GOTO X
GOTO A
B:
A$ = INPUT$(1)
GOTO C
Лунолёт-2
B001 LBL B C:
B002 CLEAR VARS
B003 SF 10
B004 eqn LUNOLET-2
B005 PSE
B006 2250
B007 STO W
B008 1000
B009 STO F
B010 1.62
B011 STO G
B012 3660
B013 STO C
B014 29.43
B015 STO J
B016 RCL H A:
B017 0.001
B018 +
B019 x>=0
B020 GTO B044
B021 RCL G
B022 RCL P
B023 RCL A
B024 COS
B025 x
B026 -
B027 RCL H
B028 x
B029 2
B030 x
B031 RCL U
B032 x^2
B033 +
B034 SQRT
B035 RCL U
B036 -
B037 RCL H
B038 2
B039 x
B040 x↔y
B041 /
B042 STO T
B043 GTO B176
B044 RCL H
B045 ABS
B046 0.001
B047 -
B048 x>=0
B049 GTO B076
B050 0
B051 STO H
B052 RCL E
B053 x=0
B054 GTO B075
B055 0
B056 STO E
B057 RCL U
B058 x^2
B059 RCL V
B060 x^2
B061 +
B062 SQRT
B063 12.5
B064 -
B065 x>0
B066 GTO B071
B067 eqn LANDING GOOD
B068 PSE
B069 XEQ B234
B070 GTO B232
B071 eqn LANDING BAD
B072 PSE
B073 XEQ B234
B074 GTO B232
B075 GTO B127
B076 1
B077 STO E
B078 RCL P
B079 ABS
B080 100
B081 -
B082 x>0
B083 GTO B093
B084 RCL P
B085 ABS
B086 25
B087 -
B088 x<=0
B089 GTO B099
B090 eqn OVERLOAD
B091 PSE
B092 GTO B099
B093 eqn OVERLOAD
B094 PSE
B095 eqn YOU DIED
B096 PSE
B097 XEQ B234
B098 GTO B232
B099 RCL P
B100 ABS
B101 RCL J
B102 -
B103 x<0
B104 GTO B113
B105 0
B106 STO M
B107 RCL P
B108 ABS
B109 RCL J
B110 -
B111 STO T
B112 GTO B165
B113 RCL F
B114 0.001
B115 -
B116 x>=0
B117 GTO B127
B118 0
B119 STO F
B120 STO M
B121 eqn FUEL ENDED
B122 PSE
B123 RCL C
B124 STO T
B125 XEQ B234
B126 GTO B159
B127 XEQ B234 S:
B128 R/S
B129 INPUT M
B130 100
B131 -
B132 x<=0
B133 GTO B136
B134 XEQ B247
B135 GTO B129
B136 INPUT T
B137 x>0
B138 GTO B141
B139 XEQ B247
B140 GTO B136
B141 INPUT A
B142 RCL H
B143 x>0
B144 GTO B159
B145 RCL A
B146 85
B147 -
B148 x<0
B149 GTO B152
B150 XEQ B247
B151 GTO B141
B152 RCL A
B153 85
B154 +
B155 x>0
B156 GTO B159
B157 XEQ B247
B158 GTO B141
B159 RCL T E:
B160 ABS
B161 STO T
B162 RCL M
B163 ABS
B164 STO M
B165 RCL M G:
B166 RCL T
B167 /
B168 STO Q
B169 RCL C
B170 x
B171 RCL W
B172 RCL F
B173 +
B174 /
B175 STO P
B176 RCL A X:
B177 SIN
B178 RCL T
B179 x
B180 RCL P
B181 x
B182 RCL V
B183 +
B184 STO B
B185 RCL V
B186 +
B187 RCL T
B188 x
B189 2
B190 /
B191 RCL L
B192 +
B193 STO L
B194 RCL B
B195 STO V
B196 RCL A
B197 COS
B198 RCL P
B199 x
B200 RCL G
B201 -
B202 RCL T
B203 x
B204 RCL U
B205 +
B206 STO B
B207 RCL U
B208 +
B209 RCL T
B210 x
B211 2
B212 /
B213 RCL H
B214 +
B215 STO H
B216 RCL B
B217 STO U
B218 RCL F
B219 RCL Q
B220 RCL T
B221 x
B222 -
B223 STO F
B224 x>=0
B225 GTO B016
B226 RCL F
B227 RCL Q
B228 /
B229 STO T
B230 GTO B176
B231 GTO B016
B232 R/S B:
B233 GTO B001
B234 VIEW H
B235 PSE
B236 VIEW U
B237 PSE
B238 VIEW V
B239 PSE
B240 VIEW L
B241 PSE
B242 RCL L
B243 RCL V
B244 RCL U
B245 RCL H
B246 RTN
B247 eqn ERROR INPUT
B248 PSE
B249 RTN
---------
CK=AB9E
LN=885
Запуск: XEQ B
После останова отображается:
- Н - высота, м
- U - вертикальная скорость, м/с
- V - горизонтальная скорость, м/с
- L - пройденное расстояние, м
- Нажать: R/S
- На запрос ввести:
- M - расход топлива, кг
- Т - время маневра, с
- A - угол, градусы
Нажать: R/S
После останова отображается:
- Н - высота, м
- U - вертикальная скорость, м/с
- V - горизонтальная скорость, м/с
- L - пройденное расстояние, м
- В регистрах стека (прокручивать нажатием кнопки R↓):
- X - высота, м
- Y - вертикальная скорость, м/с
- Z - горизонтальная скорость, м/с
- T - пройденное расстояние, м
В регистрах памяти:
- H - высота, м
- U - вертикальная скорость, м/с
- V - горизонтальная скорость, м/с
- L - пройденное расстояние, м
- F - остаток топлива, кг
Ограничения:
- Расход топлива за маневр не может превышать 100 кг.
Математическая модель:
C:
PRINT "LUNOLET-2"
PI# = 3.1415926#
G = 1.62
W = 2250
C = 3660
J = 29.43
F = 1000
H = 0
U = 0
V = 0
A = 0
L = 0
E = 0
A:
IF H < -.001 THEN
T = 2 * H / (SQR(U * U + 2 * H * (G - P * COS(A))) - U)
GOTO X
END IF
IF ABS(H) <= .001 THEN
H = 0
IF E = 1 THEN
E = 0
SELECT CASE SQR(U * U + V * V)
CASE 0 TO 12
PRINT "Landing good"
PRINT H
PRINT U
PRINT V
PRINT L
GOTO B
CASE IS > 12.5
PRINT "Landing bad"
PRINT H
PRINT U
PRINT V
PRINT L
GOTO B
END
END SELECT
END IF
GOTO S
END IF
E = 1
SELECT CASE ABS(P)
CASE 25 TO 100
PRINT "Overload"
CASE IS > 100
PRINT "Overload"
PRINT "You died": GOTO B
END
END SELECT
IF ABS(P) >= J THEN
M = 0
T = ABS(P) - J
GOTO G
END IF
IF F >= .001 THEN GOTO S
F = 0
PRINT "Fuel ended"
M = 0
T = C
PRINT H
PRINT U
PRINT V
PRINT L
GOTO E
S:
PRINT H
PRINT U
PRINT V
PRINT L
INPUT M
IF M > 100 THEN PRINT "Error input": GOTO S
INPUT T
IF T = 0 THEN PRINT "Error input": GOTO S
INPUT A
IF H = 0 THEN
IF A > 85 THEN PRINT "Error input": GOTO S
IF A < -85 THEN PRINT "Error input": GOTO S
END IF
A = A * PI# / 180
E:
T = ABS(T)
M = ABS(M)
G:
Q = M / T
P = Q * C / (W + F)
X:
B = V + P * T * SIN(A)
L = L + (V + B) * T / 2
V = B
B = U + (P * COS(A) - G) * T
H = H + (U + B) * T / 2
U = B
F = F - Q * T
IF F < 0 THEN T = F / Q: GOTO X
GOTO A
B:
A$ = INPUT$(1)
GOTO C
Лунолёт-3
C001 LBL C C:
C002 CLEAR VARS
C003 SF 10
C004 eqn LUNOLET-3
C005 PSE
C006 2250
C007 STO W
C008 3500
C009 STO F
C010 1.62
C011 STO G
C012 3660
C013 STO C
C014 29.43
C015 STO J
C016 1738000
C017 STO R
C018 STO D
C019 x^2
C020 RCL G
C021 x
C022 STO K
C023 RCL H A:
C024 x>=0
C025 GTO C043
C026 RCL T E:
C027 ABS
C028 2
C029 /
C030 RCL H
C031 SGN
C032 x
C033 STO T
C034 XEQ C195
C035 RCL H
C036 ABS
C037 0.001
C038 -
C039 x<0
C040 GTO C026
C041 0
C042 STO H
C043 RCL H
C044 x=0
C045 GTO C047
C046 GTO C071
C047 RCL E
C048 x=0
C049 GTO C070
C050 0
C051 STO E
C052 RCL U
C053 x^2
C054 RCL V
C055 x^2
C056 +
C057 SQRT
C058 12.5
C059 -
C060 x>0
C061 GTO C066
C062 eqn LANDING GOOD
C063 PSE
C064 XEQ C296
C065 GTO C294
C066 eqn LANDING BAD
C067 PSE
C068 XEQ C296
C069 GTO C294
C070 GTO C120
C071 1
C072 STO E
C073 RCL P
C074 ABS
C075 100
C076 -
C077 x>0
C078 GTO C088
C079 RCL P
C080 ABS
C081 25
C082 -
C083 x<=0
C084 GTO C094
C085 eqn OVERLOAD
C086 PSE
C087 GTO C094
C088 eqn OVERLOAD
C089 PSE
C090 eqn YOU DIED
C091 PSE
C092 XEQ C296
C093 GTO C294
C094 RCL P
C095 ABS
C096 RCL J
C097 -
C098 x<0
C099 GTO C108
C100 0
C101 STO M
C102 RCL P
C103 ABS
C104 RCL J
C105 -
C106 STO T
C107 GTO C170
C108 RCL F
C109 0.001
C110 -
C111 x>=0
C112 GTO C120
C113 0
C114 STO F
C115 STO M
C116 eqn FUEL ENDED
C117 PSE
C118 100
C119 STO T
C120 RCL L S:
C121 COS
C122 x>=0
C123 GTO C127
C124 eqn BACK SIDE
C125 PSE
C126 GTO C130
C127 eqn FRONT SIDE
C128 PSE
C129 XEQ C296
C130 R/S
C131 RCL F
C132 x=0
C133 GTO C170
C134 INPUT M
C135 100
C136 -
C137 x<=0
C138 GTO C141
C139 XEQ C316
C140 GTO C134
C141 INPUT T
C142 x>0
C143 GTO C146
C144 XEQ C316
C145 GTO C141
C146 100
C147 -
C148 x<=0
C149 GTO C152
C150 XEQ C316
C151 GTO C141
C152 INPUT A
C153 RCL H
C154 x>0
C155 GTO C170
C156 RCL A
C157 85
C158 -
C159 x<0
C160 GTO C163
C161 XEQ C316
C162 GTO C152
C163 RCL A
C164 85
C165 +
C166 x>0
C167 GTO C170
C168 XEQ C316
C169 GTO C152
C170 RCL M G:
C171 RCL T
C172 /
C173 STO Q
C174 RCL C
C175 x
C176 RCL W
C177 RCL F
C178 +
C179 /
C180 STO P
C181 RCL H
C182 x=0
C183 GTO C186
C184 XEQ C195
C185 GTO C023
C186 RCL P
C187 RCL A
C188 COS
C189 x
C190 RCL G
C191 -
C192 x<=0
C193 GTO C139
C194 GTO C184
C195 RCL P X:
C196 RCL A
C197 SIN
C198 x
C199 RCL U
C200 RCL V
C201 x
C202 RCL D
C203 /
C204 -
C205 RCL T
C206 x
C207 RCL V
C208 +
C209 STO B
C210 RCL V
C211 RCL B
C212 +
C213 RCL T
C214 x
C215 RCL D
C216 2
C217 x
C218 /
C219 RCL O
C220 +
C221 STO O
C222 π
C223 2
C224 x
C225 -
C226 x<0
C227 GTO C229
C228 STO O
C229 RCL O
C230 180
C231 x
C232 π
C233 /
C234 STO L
C235 RCL O
C236 RCL R
C237 x
C238 1000
C239 /
C240 STO N
C241 RCL B
C242 STO V
C243 RCL P
C244 RCL A
C245 COS
C246 x
C247 RCL V
C248 x^2
C249 RCL D
C250 /
C251 +
C252 RCL K
C253 RCL D
C254 x^2
C255 /
C256 -
C257 RCL T
C258 x
C259 RCL U
C260 +
C261 STO B
C262 RCL U
C263 +
C264 RCL T
C265 x
C266 2
C267 /
C268 RCL D
C269 +
C270 STO D
C271 RCL R
C272 -
C273 STO H
C274 RCL B
C275 STO U
C276 RCL K
C277 RCL D
C278 /
C279 SQRT
C280 STO S
C281 RCL F
C282 RCL Q
C283 RCL T
C284 x
C285 -
C286 STO F
C287 x>=0
C288 RTN
C289 RCL F
C290 RCL Q
C291 /
C292 STO T
C293 GTO C195
C294 R/S B:
C295 GTO C001
C296 RCL H
C297 x>0
C298 GTO C 301
C299 0
C300 STO S
C301 VIEW H
C302 PSE
C303 VIEW U
C304 PSE
C305 VIEW V
C306 PSE
C307 VIEW S
C308 PSE
C309 VIEW L
C310 PSE
C311 RCL S
C312 RCL V
C313 RCL U
C314 RCL H
C315 RTN
C316 eqn ERROR INPUT
C317 PSE
C318 RTN
---------
CK=648E
LN=1127
Запуск: XEQ C
После останова отображается:
- Н - высота, м
- U - вертикальная скорость, м/с
- V - горизонтальная скорость, м/с
- S - первая космическая скорость для данной высоты, м/с
- L - пройденное угловое расстояние, градусы
Нажать: R/S
На запрос ввести:
- M - расход топлива, кг
- Т - время маневра, с
- A - угол, градусы
Нажать: R/S
После останова отображается:
- Н - высота, м
- U - вертикальная скорость, м/с
- V - горизонтальная скорость, м/с
- S - первая космическая скорость для данной высоты, м/с
- L - пройденное угловое расстояние, градусы
В регистрах стека (прокручивать нажатием кнопки R↓):
- X - высота, м
- Y - вертикальная скорость, м/с
- Z - горизонтальная скорость, м/с
- T - первая космическая скорость для данной высоты, м/с
В регистрах памяти:
- H - высота, м
- U - вертикальная скорость, м/с
- V - горизонтальная скорость, м/с
- L - пройденное угловое расстояние, градусы
- N - пройденное угловое расстояние, км
- F - остаток топлива, кг
Ограничения:
- Расход топлива за маневр не может превышать 100 кг.
- Время маневра не может превышать 100 с.
- При H=0 блокируется недостаточная для взлета тяга.
- При H=0 блокируется некорректный для взлета угол.
Математическая модель:
C:
PRINT "LUNOLET-3"
PI# = 3.1415926#
G = 1.62
W = 2250
C = 3660
J = 29.43
R = 1738000
F = 3500
V = 0
U = 0
O = 0
A = 0
E = 0
L = 0
H = 0
D = R
K = G * R * R
A:
IF H < 0 THEN
E:
T = ABS(T) / 2 * SGN(H)
GOSUB X
IF ABS(H) < .001 THEN
GOTO E
END IF
H = 0
END IF
IF H = 0 THEN
IF E = 1 THEN
E = 0
SELECT CASE SQR(U * U + V * V)
CASE 0 TO 12
PRINT "Landing good"
PRINT H
PRINT U
PRINT V
PRINT L
GOTO B
CASE IS > 12.5
PRINT "Landing bad"
PRINT H
PRINT U
PRINT V
PRINT L
GOTO B
END
END SELECT
END IF
GOTO S
END IF
E = 1
SELECT CASE ABS(P)
CASE 25 TO 100
PRINT "Overload"
CASE IS > 100
PRINT "Overload"
PRINT "You died": GOTO B
END
END SELECT
IF ABS(P) >= J THEN
M = 0
T = ABS(P) - J
GOTO G
END IF
IF F >= .001 THEN GOTO S
F = 0
PRINT "Fuel ended"
M = 0
T = 100
S:
IF COS(O) >= 0 THEN
PRINT "Front side"
ELSE
PRINT "Back side"
END IF
PRINT H
PRINT U
PRINT V
PRINT L
PRINT S
IF F = 0 THEN GOTO G
INPUT M
IF M > 100 THEN PRINT "Error input": GOTO S
INPUT T
IF T <= 0 THEN PRINT "Error input": GOTO S
IF T > 100 THEN PRINT "Error input": GOTO S
INPUT A
IF H = 0 THEN
IF A > 85 THEN PRINT "Error input": GOTO S
IF A < -85 THEN PRINT "Error input": GOTO S
END IF
A = A * PI# / 180
G:
Q = M / T
P = Q * C / (W + F)
IF H = 0 THEN
IF P * COS(A) - G <= 0 THEN PRINT "Error input": GOTO S
END IF
GOSUB X
GOTO A
X:
B = V + (P * SIN(A) - U * V / D) * T
O = O + (V + B) * T / (2 * D)
L = O * 180 / PI#
V = B
B = U + (P * COS(A) - K / (D * D) + V * V / D) * T
D = D + (U + B) * T / 2
U = B
H = D - R
S = SQR(K / D)
F = F - Q * T
IF F < 0 THEN T = F / Q: GOTO X
RETURN
B:
A$ = INPUT$(1)
GOTO C
blog comments powered by Disqus