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



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


Блок 49 [49 :0] ( Глава 6. Упражнения 1. 04 из 04 ) (13.) : +SUN 0 + +! 1 0 CNT + +! ; : +MON 2 + +! 1 1 CNT + +! ; : +TUE 4 + +! 1 2 CNT + +! ; : +WED 6 + +! 1 3 CNT + +! ; : +THU 8 + +! 1 4 CNT + +! ; : +FRI 10 + +! 1 5 CNT + +! ; : +SAT 12 + +! 1 6 CNT + +! ; ( Каждое слово имеет cxeuy преобразования стека адр -- n ) ( 14. ) : DAY-AVE ( день - средн. ) DUP DUP 2 * 1WEEK + @ SWAP 2 * 2WЕЕК + @ + SWAP CNT + C@ / ;

Блок 50 [50 :0] ( Глава 6. Упражнения 2. 01 из 01 ) ( 11.) : NEWFILL ( адр n с -- ) ROT SWAP OVER С! DUP ( 2. ) 1+ ROT 1- CMOVE ; : NEWERASE ( адр n -- ) 0 FILL ; ( 3. ) : INITIALIZE ( адр n -- ) 2 * ERASE ; ( 4. ) : ARR-COPY1 ( адр1 адр2 n -- ) 2 * CMOVE ; : ARR-COPY2 ( адр1 адр2 n -- ) MOVE ; ( 5. ) : ARR-EXCH ( адр1 адр2 n --) PAD ! ( Запишем счетчик в PAD) OVER PAD 2 + PAD @ MOVE ( Переносим адр1 в PAD ) DUP ROT PAD @ MOVE ( Переносим адр2 в адр1 ) PAD 2 + SWAP PAD @ MOVE ( Переносим PAD+2 в адр2 ) ;

Блок 51 [51 :0] ( Глава 6. Упражнения 3. 01 из 02 ) ( 1.) CVARIABLE CREATE 1 ALLOT ; 4VARIABLE CREATE 4 ALLOT : ( 2. ) ARRAY CREATE 2 * ALLOT ; ( 3. ) : CARRAY CREATE ALLOT ; : 2ARRAY CREATE 4 * ALLOT ; : 4ARRAY CREATE 8 * ALLOT ; ( 4. ) VARIABLE 1LENGTH VARIABLE 2LENCTH 12 CONSTANT 1->2 : CONVERT1-2 1LENGTH @ 1->2 * 2LENGTH ! ; : CONVBRT2-1 2LENGTH @ 1->2 / 1LEHGTH ! ; ( Сменить коэффициент можно путем замени 12 [см. выше] и рекомпиляции или путем n ' 1->2 ! [79]. или n ' {или [']} >BODY ! [83])

Блок 52 [52 :0] ( Глава 6. Упражнения 3. 02 из 02 ) ( 5.) : X->Y ( x -- у ) A @ * В @ + ; ( Замена операций путем изменения содержимого переменных А и В соответствует n А ! или n В ! .) ( 6.) ( В Форт-79 здесь нет различия. Оба засылают в стек адрес, где запомнено значение. ' >BODY является эквивалентом для Форт-83. ) ( 7.) : SET-FEET ( -- ) 12 ['] TO-INCHES >BODY ! ; : SET-YARDS ( -- ) 36 ['] TO-INCHES >BODY ! ; ( в описании-двоеточии должно использоваться ['] вместо '.)

Блок 53 [53 :0] ( Глава 6. Упражнения 4. 01 из 01 ) ( 1.) : SIR ." Dear Sir:" ; : MADAM ." Dear Madam:" ; : SORM ." Dear Sir or Madam:" ; VARIABLE HELLO : SALUTATION HELLO @ EXECUTE ; ( Смена приветствия путем FIND HELLO ! в Форт-79 или ' HELLO ! в Форт-83. ) ( 2. ) CREATE CHOICES FIND PRINT , FIND CRT , FIND PCRT , ( В Форт-83 используйте ' вместо FIND. ) : CHOOSE ." PRINTER (1), SCREEN(2), OR BOTH(3) " KEY 49 - 0 МАХ 2 MIN 2 * CHOICES + 6 EXECUTE ; ( Нажатие клавиши преобразуется в число от 0 до 2 путем вычитания значения ASCII 1 [49]. 0 МАХ 2 MIN гарантирует, что неверное нажатие клавиши не выведет из строя систему. )




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