реклама
Бургер менюБургер меню

Программист – Программирование на gforth (страница 9)

18

THEN

THEN

LOOP

CR ;

Вывод: 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz

4. Практические примеры

Пример 1: таблица умножения

: multiplication-table

11 1 DO

CR I . ." : "

11 1 DO

I J * .

LOOP

LOOP ;

Пример 2: поиск простых чисел до N

: prime? ( n -- flag )

DUP 2 < IF

DROP 0

ELSE

DUP 2 = IF

DROP -1

ELSE

DUP SQRT 2 DO

DUP I MOD 0= IF

DROP 0 LEAVE

THEN

LOOP

SWAP DROP

THEN

THEN ;

: primes-up-to ( n -- )

CR ." Простые числа до " DUP . ." :" CR

1+ 2 DO

I prime? IF

I .

THEN

LOOP ;

Проверка:

20 primes-up-to

\ Вывод: Простые числа до 20:

\ 2 3 5 7 11 13 17 19

5. Типичные ошибки

Несбалансированные IF/THEN — компилятор выдаст ошибку.

Отсутствие флага для IF — если перед IF нет значения в стеке, возникнет ошибка.

Бесконечные циклы — проверяйте условие выхода:

BEGIN ." Бесконечность" 0 UNTIL \ Никогда не завершится!

Использование I вне DO LOOP — вызовет ошибку.

Изменение счётчика внутри DO LOOP — не влияет на цикл.

6. Отладка конструкций

Используйте .S для проверки стека перед условиями:

: debug-if

." Перед IF стек: " .S

0= IF ." True" ELSE ." False" THEN

CR ;

Упражнение для закрепления

Запустите Gforth.

Определите слово abs, которое возвращает абсолютное значение числа (используйте IF). Протестируйте: 5 abs . и -5 abs ..

Напишите слово print-evens, которое печатает чётные числа от 2 до 20 (используйте любой цикл).

Создайте слово factorial, вычисляющее факториал числа n (используйте DO LOOP). Проверьте: 5 factorial . (ожидаемый результат: 120).

Реализуйте игру «Угадай число»: компьютер загадывает число от 1 до 10, пользователь вводит предположения. Используйте BEGIN WHILE REPEAT для цикла ввода. Подсказки:

для генерации случайного числа используйте

RANDOM

;