Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 25, 2024 08:18

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 16, 2006 19:27 
Не в сети
Аватара пользователя

Зарегистрирован: Чт авг 17, 2006 10:01
Сообщения: 53
Откуда: Владивосток
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Icefall

DUP в первой строке с большой буквы напиши :)

_________________
Win2003 Ent R2
ASUS A7V266-E; Athlon XP 2000+; 512Mb; HDD: 2x120+15 Gb; GF 3 Ti2


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 16, 2006 21:55 
dream писал(а):
А тут сессия подходит. Препод решил приобщить к "правильному программированию" и рассказал про Forth.

А оный препод этот форум не читает?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 00:07 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Anonymous писал(а):
А оный препод этот форум не читает?

Хе, кстати, преподу привет! :D


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 03:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт авг 17, 2006 10:01
Сообщения: 53
Откуда: Владивосток
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Icefall
Мое сообщение выше посмотри.

_________________
Win2003 Ent R2
ASUS A7V266-E; Athlon XP 2000+; 512Mb; HDD: 2x120+15 Gb; GF 3 Ti2


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 10:26 
Не в сети

Зарегистрирован: Ср ноя 15, 2006 08:08
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
И снова здравствуйте! Спасибо всем тем кто откликнулся. К сожалению код на Си остался в аудитории { забыл его забрать, да если честно я его сам полностью и не сделал (-:, но если найду то обязательно запостю. }

На форте значит алгоритм вычисления корня из целого числа выглядит так? {Кстати, мы "программим" под линуксом -> консоль -> gforth. В Gforth этот код сработает?}

: SQRT ( n -- s ) DUP 2 < IF 0 MAX EXIT THEN
DUP 2/ ( -- n s )
BEGIN 2DUP / OVER ( -- n s n/s s )
+ 2/ ( -- n s s' )
SWAP OVER ( -- n s' s s' )
- ABS 2 < UNTIL NIP ;

А без комментов, чтобы никто не догадался, так.
: SQRT
DUP 2 < IF 0 MAX EXIT THEN
DUP 2/
BEGIN 2DUP / OVER
+ 2/
SWAP OVER
- ABS 2 < UNTIL NIP ;
Еще бы понять, что тут деляется. Что есть
DUP 2 < IF 0 MAX EXIT THEN <-- если ноль то выход?
- ABS 2? <-- - модуль зачем ?
NIP <-- что есть NIP?

Наглость, конечно, но написали бы мне-балбесу членораздельное предложение, как ответить на провакоционный вопрос преподавателя "Ну и объясни как это работает?". (-:

Anonymous писал(а):
dream писал(а):
А тут сессия подходит. Препод решил приобщить к "правильному программированию" и рассказал про Forth.

А оный препод этот форум не читает?

Если это не Вы, Евгений Александрович, то надеюсь, что нет...


Последний раз редактировалось dream Пт ноя 17, 2006 11:02, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 10:44 
dream писал(а):
Наглость, конечно, но написали бы мне-балбесу членораздельное предложение, как ответить на провакоционный вопрос преподавателя "Ну и объясни как это работает?". (-:

А как насчет того чтобы пролистать русские изданные книги по Форт языку.
Чтение их необреминительное занятие.

P.S. ссылки на них есть на forth.org.ru


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 10:47 
Есть еще такой вариант из одной Форт сиистемы.
Извлечение корня из двойного числа.

: sqrt ( d -- n ) \ binary search for SQRT(d)
-1 1 rshift invert 0 >r ( d guess | result )
begin dup
while dup r@ + dup um* ( d guess [r+g]^2 | res )
rot >r 2over d- d1- nip 0< ( d f | res guess )
if r> r> over + >r ( d guess | result )
else r>
then u2/
repeat drop 2drop r> ;


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 11:04 
Не в сети

Зарегистрирован: Ср ноя 15, 2006 08:08
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Anonymous писал(а):
dream писал(а):
Наглость, конечно, но написали бы мне-балбесу членораздельное предложение, как ответить на провакоционный вопрос преподавателя "Ну и объясни как это работает?". (-:

А как насчет того чтобы пролистать русские изданные книги по Форт языку.
Чтение их необреминительное занятие.

P.S. ссылки на них есть на forth.org.ru

Ну это уже на крайний случай... (:

Anonymous писал(а):
Есть еще такой вариант из одной Форт сиистемы.
Извлечение корня из двойного числа.

: sqrt ( d -- n ) \ binary search for SQRT(d)
-1 1 rshift invert 0 >r ( d guess | result )
begin dup
while dup r@ + dup um* ( d guess [r+g]^2 | res )
rot >r 2over d- d1- nip 0< ( d f | res guess )
if r> r> over + >r ( d guess | result )
else r>
then u2/
repeat drop 2drop r> ;

Эх, не грузите интеллектом, тут бы из целого числа высчитать...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 11:28 
dream писал(а):
Эх, не грузите интеллектом, тут бы из целого числа высчитать...


Да, что то в этом есть. Форт предполагает возможность
ручной тусовки переменных.
В Вашем случае можно воспользоваться алгоритмом с
использованием локальных именованных переменных в фигурных скобках


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 11:47 
Не в сети

Зарегистрирован: Ср ноя 15, 2006 08:08
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
???


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 12:10 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
unreal666, не придирайся. я и так пост три раза правил... кому надо, разберется.
dream, объясню пошагово (а вообще иди [url="http://www.forth.org.ru/~cactus/library.htm"]книжки читай[/url]):
Код:
: SQRT ( n -- s )

объявляем слово, в комментах - обозначение: n - число, s - его кв. корень;

Код:
DUP 2 < IF 0 MAX EXIT THEN

если число меньше двух (т.е. отрицательно, 0 или 1), возвращаем нуль. Тут вообще-то допущена ошибка - при n = 1 должна возвращаться единица. исправь сам :)

Код:
DUP 2/ ( -- n s )

готовим переменные для цикла. на стеке - исходное число и его кв. корень в первом приближении.

Код:
BEGIN 2DUP / OVER ( -- n s n/s s )

цикл: поделили число на корень в предыдущем приближении, сдублировали наверх стека старый.

Код:
+ 2/ ( -- n s s' )

нашли среднее арифметическое, это число примем как корень в следующем приближении

Код:
SWAP OVER ( -- n s' s s' ) - ABS 2 < UNTIL NIP ;

если разница по модулю между корнями на последовательнеых итераций (т.е. погрешность) не больше двух, выйти из цикла. убрать второй элемент стека (т.е. n).

И еще раз: [url="http://www.forth.org.ru/~cactus/library.htm"]читать книги[/url]!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 13:03 
dream писал(а):
???

Пример использования локальных переменных.

: dum+ { a b \ c -- sum } \ a и b инициализируются со стека
a b + to c c ; \ с - временная переменная

\ в форте все слова илсновной разделить между ними пробел!!!!
\ : dum+ определить слово с именем dum+
\ фигурные скобки вводят локальные переменные
\ { a b \ c -- sum } обозначить локальные переменные
\ a и b инициализируются со стека с - временная переменная
\ \ разделяет переменные для инициализации со стека и временную
\ -- sum необязательные комментрарии к результатам работы слова.
\ a b + сложить a и b
\ to c записать результат сложения в переменную с
\ с оставить на стеке данных значение временной переменной с
\ ; завершение определения

P.S. Эта форма использования локальных переменных отлична
от приведенной схемы в стандарте языка 94г,
но существует во множестве форт систем как де-факто.
Для определения глобальных переменных есть слова VALUE и VARIABLE


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 23, 2006 11:06 
Не в сети

Зарегистрирован: Ср ноя 15, 2006 08:08
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Огрёб зачет! Спасибо. Преподаватель конечно заподозрил неладное и охарактеризовал решение как "больно всё лаконично". Рэспект и уважуха, Forth People! Не будь Вас, как бы Forth делали? Хотя с другой стороны Не будь Вас, Forth'a глядишь бы то же не было... Всё в мире относительно! (-:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 23, 2006 17:17 
А что за учебное заведение?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 23, 2006 21:32 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вот, как раз на днях понадобился квадратный корень... Обнаружил такую красоту (из мат.либы для rf):
Код:
loc:
  : sqrt-closer 2dup / over - 2 / ;
  : sqrt-loop sqrt-closer 0; + sqrt-loop ;
  here ] ( x -- y ) 1 sqrt-loop nip ;
;loc alias sqrt

На отрицательных x retroforth вылетает... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB