Язык программирования Форт



Приложение Д. Ответы к упражнениям - часть 7


Блок 31 [31 :0] ( Глава 4. Упражнения 5. 03 из 03 ) ( 10. ) : 2PICK83 2 * DUP PICK SWAP 1- PICK ; ( FORTH-83 ) : 2PICK79 2 * DUP 1+ PICK SWAP PICK ; ( FORTH-79 ) ( 11. ) : S->D ( n -- d ) HI# ; ( 12. ) ( HI# будет содержать 0. ) ( 13. ) : 10^N 1 SWAP 0 DO 10 * LOOP : : BEF. #PT 1- 10^N 0 D/ ; : AFT. 2DUP ВЕF. #PT 1- 10^N 0 D* D- ; ( Таким образом можно разделить целую и дробную части числа двойной длины. )

Блок 32 [32 :0] ( Глава 4. Упражнения 6. 01 из 02 ) ( 1. ) ( 1 UM* выполнит это. Используются числа без знака. ) ( 2. ) : M* ( n n -- d ) 0 ROT 0 D* ; : М+ ( d n -- d ) 0 D+ ; : М- ( d n -- d ) 0 D- ; : М/ ( d n -- d ) 0 D/ DROP ; : M/MOD ( d n -- n n ) 0 D/MOD DROP SWAP DROP ; ( 3. ) ( Как M* так и М/МОD воспринимают числа со знаком, в то время как U* и U/MOD работают с числами без знака.)

Блок 33 [33 :0] ( Глава 4. Улражнения 6. 02 из 02 ) ( 4. ) : ->DOLLARS1 ( d -- n) 100 M/ ; ( MMSFORTH ) : ->DOLLARS2 ( d -- n) 100 0 D/ DROP ; ( Стандарт ) : ->CENTS1 ( d -- n) 2DUP ->DOLLARS1 100 * М- DROP ; ( MMSFORTH ) : -> CENTS2 ( d -- n) 2DUP ->DOLLARS2 100 * 0 D- DROP ; ( Стандарт ) ( 5. ) : FRAC1 2SWAP ROT 0 D/ ROT 0 D* ; ( Стандарт ) : FRAC2 M*/ ; ( MMSFORTH )

Блок 34 [34: 0] ( Глава 4. Упражнения 7. 01 из 01 ) ( 1.) ( а. % 5.5 % 1200 F+ F. б. % 23 % 5 F/ LOG F. в. DEGREES % 55 SIN 2DUP F* % 45 COS 2DUP F* F+ F. г. % 1- SQR F. д. % 3.25 2DUP F* PI F* F. ) ( 2. ) : RECT ( n1 n2 -- ) I-F FDF 5 ROLL I-F FDF DF* DF. ; ( 3.) : NEWFABS ( f1 -- f2 ) 2DUP F* SQR ; ( 4.) : HYPOT ( f1 f2 -- f3 ) 2DUP F* 2SWAP 2DUP F* F+ SQR ; ( 5. ) : TABLE1 0 46 DO I 3 .R ( приращение равно 1 градусу) I I-F SIN 10 F.R I I-F TAN 10 F.R CR ; : TABLE2 0 451 DO I I-F % 10 F/ 2DUP 6 F.R 2DUP SIN 10 F.R TAN 10 F.R CR LOOP ; ( приращение равно одной десятой )

Блок 35 [35 :0] ( Глава 4. Упражнения 6. 01 из 03 ) ( 1. ) а. 5 8 + % 5.5 % 6.5 F+ б. % 35 10 >87 F+ SIN в. % -55 FNEGATE ) ( 2. ) ( г. 5 . % 35 2DUP COS 2SWAP SIN F+ F. ) : 87FABS ( f1 -- f2 ) FDUP F* SQR ; : 87CINT ( f1 -- f2 ) 87> ; : 87I-F ( n -- f ) >87 ; : 87RAD PI % 180 F/ ; : 87L10 % 10 LOG ; ( 3. ) : FACT 1001 2 % 1 DO I >87 F* LOOP F. ; ( Выдает реэултт .4023872600770938Е2568; 100 итераций требует 10.1 секунд.


Содержание  Назад  Вперед