48004 (608429), страница 2

Файл №608429 48004 (Особенности языка Форт) 2 страница48004 (608429) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

IF A исполнение

ELSE исполнение

THEN исполнение

Внутри определения через двоеточие отрезок текста IF ELSE THEN задаёт следующую последовательность действий: Слово IF снимает значение с вершины стёка и рассматривает его как логическое. Если это ИСТИНА (любое не нулевое значение), то выполняется часть "ТО" - слова, находящегося между IF и ELSE, а если ЛОЖЬ (равно нулю), то исполняется часть "иначе" - слова между ELSE и THEN.

В стандарт языка Форт включены циклы с условием и циклы со счётчиком. Циклы первой группы образуются с помощью слов:

BEGIN исполнение

UNTIL A исполнение

WHILE A исполнение

REPEAT исполнение

И имеют две формы

BEGIN UNTIL

BEGIN WHILE REPEAT

В обоих случаях цикл начинается словом BEGIN которое служит открывающей скобкой, отмечающей начало цикла, и во время счёта не выполняет никаких действий.

Цикл BEGIN - UNTIL называется циклом с проверкой в конце. После исполнения слов, составляющих его тело, на стёке остаётся логическое значение - условие завершения цикла. Слово UNTIL снимает это значение со стёка и анализирует его. Если это ИСТИНА, то исполнение цикла завершается, а если это ложь, то управление возвращается к началу цикла от слова BEGIN.

Цикл с проверкой в начале BEGIN - WHILE - REPEAT используется если, в цикле есть действия, которые не надо выполнять в заключительной итерации. Исполнение слов, составляющих тело - 1, оставляет на стёке логическое значение - условие продолжения цикла. Слово WHILE снимает это значение со стёка и анализирует его. Если это ИСТИНА, то исполняются слова составляющие тело - 2 данного цикла до ограничивающего слова REPEAT, после чего вновь выполняется тело - 1 от слова BEGIN. Если же значение условия ЛОЖЬ то исполнение данного цикла завершается и начинают выполняться слова, следующие за REPEAT. В отличие от предыдущей формы цикла по условию, значение ИСТИНА соответствует продолжению цикла.

Для организации циклов с целочисленной переменной - счётчиком цикла - используются слова:

DO A, B исполнение

LOOP исполнение

+LOOP A исполнение

I A исполнение

J A исполнение

LEAVE исполнение

Такие циклы записываются в одной из следующих двух форм : DO LOOP или DO + LOOP. В обоих случаях цикл начинается словом DO, которое снимает со стёка два значения: начальное и конечное и запоминает их. Текущее значение счётчика полагается равным начальному значению, после чего исполняются слова, составляющие тело цикла. Слово LOOP увеличивает текущее значение счётчика на единицу и проверяет условие завершения цикла. В отличие от него слово +LOOP прибавляет к текущему значению счётчика значение шага, которое вычисляется на стёке телом цикла и рассматривается как число со знаком. В обоих случаях условием завершения цикла является пересечение границы между А-1 и А при переходе от прежнего значения счётчика к новому, где А - конечное значение, снятое со стёка словом DO. Если пересечения не произошло, то тело цикла исполняется вновь с новым значением счётчика в качестве текущего.

Внутри тела цикла слово I кладёт на стёк текущее значение счётчика. Слово LEAVE, употреблённое внутри цикла вызывает прекращение исполнения его тела; управление переходит к словам следующим за словом LOOP или +LOOP. В программировании часто применяется конструкция цикл в цикле. Чтобы во внутреннем цикле получить текущее значение счётчика объемлющего цикла, используется слово J.

5 Примеры программ

Пример 1: Вычисление факториала

Dup 2 if drop 1

1 если N <2 то N! = 1

Else

N иначе

Dup

S, K, S=N, K=N

Begin

S, K

1 -

S, K, K = K -1

Swap over

K, S, K

* swap

S, K, S=S*K

Dup 1 =

S, K, K=1

Until

S, 1, S = N!

Drop then;

N!

Пример 2: Вычисление наибольшего общего делителя

2dup < swap then

Теперь A>=B

Begin dup

A, B, B

While

Пока В не ноль

2dup mod

А, В, С: остаток

Rot

B, C, A

drop

A, B, A=B, B=C

Repeat drop;

НОД

Пример 3: Вычисление суммы квадратов

0 swap

0, N S[0] = 0

1+ 1

S[0], N+1, 1

Do I

S[I-1], I

Dup * +

S[I] S[I]=S[I] + I*I

Loop

S[N]

6 Организация диалога в Форте

Из предыдущих примеров не видно, откуда машина возьмёт те числа над которыми будут выполняться действия программы. Данные как бы уже предполагаются введёнными. Дело в том, что ввод данных - это не проблема языка Форт, это проблема Форт-системы. Этот язык не есть язык программирования в чистом виде, как например язык Паскаль который работает под управлением той или иной внешней операционной системы. Форт нуждается в собственной операционной системе, которая организует пошаговый диалог с пользователем. Работа пользователя заключается во вводе фрагмента текста, который Форт система пытается интерпретировать в соответствии с несложными правилами. Она вводимый текст разделяет на команды отделяющиеся друг от друга пробелами и пытается распознать их как команды языка Форт. Если это ей не удаётся, то она пытается их распознать их как числа и положить на стёк. Если и это ей не удаётся, то Форт-система выдаёт сообщение об ошибке. Таким образом, ввод данных осуществляется как ввод внешнего текста состоящего из записи чисел раздёленных пробелами. Точно так же вводятся фрагменты форт программы, и стало быть пользователь в процессе диалога с Форт-системой сам определяет порядок обработки данных форт программами. Пользователь на каждом шаге работы программы просто вводит некоторый текст, а что этот текст из себя представляет, данные или программу решает форт-система. Это нарушает наше обычное представление о работе программы. Обычно, ввод программы и данных разделяется. Сначала полностью вводится программа, а уж затем данные. Система Форт в этом отношении намного гибче.

Пример 4: Упорядочение массива по возрастанию

Это пример, мы разберём подробно.

Выше уже было разъяснено, как организуется ввод. Поэтому договоримся о том, что перед вводом текста программы, мы уже осуществили ввод данных таким образом, что на вершине стека лежит число - количество элементов массива и под ним лежат все элементы массива.

Мы воспользуемся циклом DO. Для него на вершине стека должны лежать два значения начальное значение параметра и его конечное значение. Запишем команды, которые создадут необходимую структуру стёка.

DUP

1

SWAP

1

Запишем изменения вершины стека, которые происходят в процессе выполнения этих команд.

Команда 1: N N

Команда 2: 1 N N

Команда 3: N 1 N

Команда 4: 1 N 1 N

Таким образом, требуемая структура сформирована и можно записать заголовки цикла

DO

DO

Первый заголовок снял 1 и N и второй заголовок также снял 1 и N. Далее запишем тело циклов. Здесь мы поступим следующим образом: мы сравним два верхних значения, поменяем их местами если в этом есть необходимость и осуществим прокрутку стека на одну позицию

2DUP

>

Первый оператор дублирует одно двойное слово или что-то же самое два одинарных, то есть дублирует на вершине стёка два значения. Затем операция "больше" снимает два значения, назовём их А, В и если А > В то кладёт на вершину стёка единицу иначе кладёт ноль. Если на вершине стека единица, то А и В находятся в нужном порядке и ничего делать не надо, иначе их нужно поменять местами

IF

ELSE

SWAP

THEN

Оператор IF снимает со стека 1 или 0 (результат операции сравнения), если снята единица то ничего не происходит иначе два верхних элемента, а это опять А и В меняются местами. И теперь осталось провернуть стёк. Для этого необходимо выполнить команду N ROLL. Если N - количество элементов массива, то команда осуществит необходимый нам сдвиг стёка. Ясно, что нам опять нужно значение N, но оно было безвозвратно снято со стёка и забыто (о нём сейчас помнят только заголовки циклов). Вот тут мы сможем с пользой применить понятие переменной. Чтобы запомнить в оперативной памяти значение N мы в самом начале программы должны выполнить следующее

DUP

VARIABLE N

!

Это фрагмент дублирует значение N лежащее на стёке, следующая команда (Variable) резервирует в необходимое количество ячеек памяти и старший адрес зарезервированной области кладёт на стёк. Восклицательный знак снимает два значения со стека (адрес и значение N) и значение пересылает по адресу. Если теперь нам необходимо получить значение переменной N мы должны выполнить следующее:

N @

N - теперь воспринимается как команда языка Форт с её выполнением на стек ложится значение адреса памяти по которому хранится значение переменной. Знак собачки снимает со стека значение адреса, затем пересылает значение, взятое по этому адресу, на вершину стека и теперь мы можем выполнить команду ROLL. Она снимет со стека значение N и осуществит требуемый сдвиг массива.

И осталось завершить циклы

LOOP

LOOP

Если есть потребность просмотреть массив, необходимо вывести все элементы стека на экран циклическим повторением команды точка.

N @ (кладем на стек количество элементов массива)

1 (Кладем на стёк начальное значение параметра цикла)

DO (Снимаем со стека параметры цикла и начинаем работу)

. (Снимаем очередной элемент стека)

LOOP (Переходим к новому шагу цикла)

Запишем полученную программу целиком

(Создание переменной)

DUP

VARIABLE N

!

(Создание необходимой структуры данных для организации циклов)

DUP

1

SWAP

1

(Обработка массива)

DO

DO

2DUP

>

IF

ELSE

SWAP

THEN

N @

ROLL

LOOP

LOOP

(Вывод массива для просмотра)

N @

1

DO

.

LOOP

7. Определяющие слова

Тип данных это не только указание на необходимый объём памяти, но и перечень допустимых операций. Эти самые допустимые операции выглядят так очевидно, что наверное не сразу возникает идея, что допустимые операции также можно определять.

Конечно, те операции, которые приклеиваются к базовым типам, реализуются разработчиком компилятора и они для изменения недоступны, и конечно, нельзя допустить, чтобы программист - пользователь компилятора имел возможность менять код компилятора, но операцию можно реализовать и средствами самого языка высокого уровня. Это будет почти та же самая процедура или функция языка, с той лишь разницей, что она будет жёстко привязана к конкретным данным. Если таким образом к стандартному типу данных (такому как мы рассматривали в первой лекции) добавить набор процедур и функций, то получится совершенно новая языковая структура именуемая объектом. Объект хорошо тем, что в нём полностью описывается всё, что нужно для понимания его смысла, обработки, размещения в памяти, поэтому программа, построенная из объектов, становится более понятной и более прозрачной для восприятия. Такой подход широко распространён. Это сейчас называется объектным программированием, а язык Форт - это один из первых языков, где прозвучала идея объектного программирования. Правда в Форте нет терминов используемых ныне: объект, класс, инкапсуляция и т.д., но ведь это одна из первых попыток! А теперь перейдём к Форту.

Характеристики

Тип файла
Документ
Размер
217,97 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7086
Авторов
на СтудИзбе
256
Средний доход
с одного платного файла
Обучение Подробнее