Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 05:33

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вот бы написать на форте программу готорая бы
СообщениеДобавлено: Вт фев 05, 2008 23:01 
Не в сети

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
тема выделена из "юбилейчиков", пока остается в этом разделе,
но мало ли, вдруг чего из этого получится?
WingLion


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

скажем - не 8.33 года, а 100 месяцев
- не 19.23 с небольшим лет, а 1000 недель
- не 27.39 года, а 10000 дней

полукруглые даты 500, 5000 и т.п. тоже бы неплохо было бы учитывать

а если еще к тому же переключать системы счисления - то вообще - ух :)

____________________________________________
Привет всем - меня зовут Jelsay, я тоже люблю Forth :)


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Jelsay ну вот это уже надо в конкурс.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2008 15:55 
Не в сети

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
VoidVolker не знаю насчёт конкурса, но предлагаемая програмка могла бы быть достаточно забавной и могла бы способствовать упоминанию о языке Форт в массах..
При условии конечно же если она была бы написана на Форте ;)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 16, 2008 23:05 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вот, нацарапал. После загрузки пишем: 23 10 1955 LIFE, и получаем распечатку юбилеев на всю жизнь :D
Код:
: >DAY ( DD MM YY -- U ) 1900 - SWAP DUP 3 < IF 12 + SWAP 1- SWAP THEN 1+ 153 5 */ SWAP 1461 4 */ + + 122 - ;
: DAY> ( U -- YY MM DD ) 4 1461 */MOD SWAP DUP 0= IF DROP 1- 1464 THEN
3 + 4 / 122 + 5 153 */MOD SWAP 4 + 5 / >R 1- DUP 12 > IF 12 - SWAP 1+ SWAP THEN SWAP 1900 + SWAP R> ;
: JUB ( U -- F ) TRUE SWAP BEGIN DUP 10 > WHILE 10 /MOD SWAP IF 2DROP FALSE EXIT THEN REPEAT DROP ;
0 VALUE BIRTHDAY
: DAT. DUP DAY>
0 <# # # #> TYPE
SPACE 1- 3 * S" JanFebMarAprMayJunJulAugSepOctNovDec" DROP + 3 TYPE
SPACE .
SPACE 3 + 7 MOD 3 * S" SunMonTueWedThiFriSat" DROP + 3 TYPE ."  - "
;
: CHECK ( U -- )
DUP >R DAY> BIRTHDAY DAY> 3 ROLL =
IF
  ROT 2DUP =
  IF
   2OVER - DUP JUB IF CR R@ DAT. ." Years: " . ELSE DROP THEN
  THEN
  SWAP - >R - 12 * R> + DUP JUB IF CR R@ DAT. ." Months: " . ELSE DROP THEN
ELSE
  2DROP 2DROP
THEN
R@ BIRTHDAY -
DUP 7 /MOD SWAP 0= IF DUP JUB IF CR R@ DAT. ." Weeks: " . ELSE DROP THEN ELSE DROP THEN
DUP JUB IF CR R@ DAT. ." Days: " . ELSE DROP THEN
R> DROP
;
: LIFE ( D1 M1 Y1 -- ) >DAY DUP TO BIRTHDAY DUP 40000 + SWAP 1+ DO I CHECK LOOP ;


Последний раз редактировалось Forthware Вс фев 17, 2008 00:36, всего редактировалось 1 раз.

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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Код:
Days: 3
Days: 3
Days: 3
...
Years: 3
Weeks: 3
Days: 3
Years: 3  Ok ( [615].. 2055 1955 10 10 100 )

Эмм... Так и должно быть? А как тогда понять что это все значит?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
VoidVolker писал(а):
Эмм... Так и должно быть? А как тогда понять что это все значит?
У вас, скорее всего .R не правильно реализован. Я переделал код без него. Попробуйте еще раз.
ЗЫ В SPF 4.18 работает.


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Хорошо, работает. Моя версия спфа 418001.
Первые девять дней из этого списка думаю нужно исключить, еще бы добавить зависимость от системы счисления. И не на 100 лет вперед, а чтоб можно было задать.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Forthware
Спасибо за код, более всего подравилось это:
Цитата:
100 36525 */MOD SWAP DUP 0= IF DROP 1- 36600



VoidVolker
Код:
: .R 
  >R DUP >R ABS
  S>D <# #S R> SIGN #>
  R> OVER - 0 MAX SPACES TYPE
;


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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вот расширенный вариант. Проверяет все юбилеи одновременно в десятичной, шестнадцатиричной, восьмиричной и двоичной системах исчисления а также вычисляет юбилеи в "дюжинах" (dozen = 12), тоже во всех системах.
Правила пользования:

Чтобы добавить еще одну, свою систему исчисления, делаем:
3 TO JBASE

Чтобы убрать, пишем в JBASE любое либо 10 либо 8 либо 16 либо 2.

Чтобы получить распечатку юбилеев делаем:
23 10 1955 1 1 2008 1000 PERIOD
, где 23 10 1955 - дата рождения; 1 1 2008 - начало периода в котором ищем юбилеи; 1000 - длина периода в днях.

Можно также:
23 10 1955 LIFE
но ВНИМАНИЕ! листинг на всю жизнь будет ОЧЕНЬ длинным! :)
Код:
: >DAY ( DD MM YY -- U ) 1900 - SWAP DUP 3 < IF 12 + SWAP 1- SWAP THEN 1+ 153 5 */ SWAP 1461 4 */ + + 122 - ;
: DAY> ( U -- YY MM DD ) 4 1461 */MOD SWAP DUP 0= IF DROP 1- 1464 THEN
3 + 4 / 122 + 5 153 */MOD SWAP 4 + 5 / >R 1- DUP 12 > IF 12 - SWAP 1+ SWAP THEN SWAP 1900 + SWAP R> ;
0 VALUE BIRTHDAY
0 VALUE DATE
10 VALUE JBASE
: DAT. ( C-ADDR U1 U2 -- C-ADDR U1 U2 C-ADDR U1 U2 )
BASE @ >R DECIMAL
DUP 2OVER ROT DATE
DUP DAY> 0 <# # # #> CR TYPE
SPACE 1- 3 * S" JanFebMarAprMayJunJulAugSepOctNovDec" DROP + 3 TYPE SPACE .
SPACE 3 + 7 MOD 3 * S" SunMonTueWedThiFriSat" DROP + 3 TYPE ."  - "
R> BASE !
;
: EVEN ( U -- F ) TRUE SWAP BEGIN DUP BASE @ > WHILE BASE @ /MOD SWAP IF 2DROP FALSE EXIT THEN REPEAT DROP ;
: JUB1 ( U1 C-ADDR U2 -- ) BASE @ >R ROT
DUP DECIMAL EVEN IF DAT. . TYPE THEN
DUP HEX EVEN IF DAT. . ." hex " TYPE THEN
DUP  8 BASE ! EVEN IF DAT. . ." octal " TYPE THEN
DUP  2 BASE ! EVEN IF DAT. . ." binary " TYPE THEN
JBASE 10 = JBASE 16 = OR JBASE 8 = OR JBASE 2 = OR 0=
IF DUP JBASE BASE ! EVEN IF DAT. . ." radix " BASE @ DECIMAL . ." , " TYPE THEN THEN
DROP 2DROP R> BASE !
;
: JUB ( U1 C-ADDR U2 -- )
2 PICK 2 PICK 2 PICK JUB1
S" dozens of " >R PAD R@ MOVE PAD R@ + SWAP DUP >R MOVE
12 /MOD SWAP IF DROP R> R> 2DROP EXIT THEN
PAD R> R> + JUB1
;
: CHECK ( -- )
DATE DAY> BIRTHDAY DAY> 3 ROLL =
IF
  ROT 2DUP =
  IF
   2OVER - S" years" JUB
  THEN
  SWAP - >R - 12 * R> + S" months" JUB
ELSE
  2DROP 2DROP
THEN
DATE BIRTHDAY -
DUP 7 /MOD SWAP 0= IF S" weeks" JUB ELSE DROP THEN
S" days" JUB
;
: PERIOD ( DB MB YB DS MS YS DAYS )
>R >DAY >R >DAY TO BIRTHDAY R> DUP R> + SWAP ?DO I TO DATE CHECK LOOP ;
: LIFE ( D1 M1 Y1 -- ) 2 PICK 2 PICK 2 PICK 40000 PERIOD ;


Последний раз редактировалось Forthware Вс фев 17, 2008 16:47, всего редактировалось 1 раз.

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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Jelsay писал(а):
Спасибо за код, более всего подравилось это:
Пожалуйста. Если захотите использовать >DAY и DAY> в будущем, то помните, что они работают правильно только в диапазоне от 01 03 1900 до 28 02 2100. Если надо больше, скажите, сделаем.

_________________
Am I evil? I'm man - yes I am! © James Hatefield


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Вот бы еще в теме отразить, что именно должна делать программа? ;)


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

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Вот бы еще в теме отразить, что именно должна делать программа? ;)


Давным давно я записал пару простых формул в Excel, и с тех пор отмечаю все дни рождения по марсианскому календарю.
И еще - самый главный день рождения в жизни: 10000 дней ! ! !
Отмечал и свой, и жены, и дни рожденья в 1000 дней обоих дочек.

Коэффициент пересчета для Марса (марсианский год): 686,98 дней
Можно еще использовать юпитерианский: 4332,589 дней (но это уже не так интересно)

А по-поводу задачи - нужен не код, а нормальная программка с пользовательским интерфейсом.

_________________
Банзай!


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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Kamikaze писал(а):
И еще - самый главный день рождения в жизни: 10000 дней ! ! !
В какой системе счисления?
Kamikaze писал(а):
А по-поводу задачи - нужен не код, а нормальная программка с пользовательским интерфейсом.
Вот тут у Форта проблемы... Предлагаю переключиться на Дельфи. :roll: :twisted: :))

_________________
Am I evil? I'm man - yes I am! © James Hatefield


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

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Forthware писал(а):
Kamikaze писал(а):
И еще - самый главный день рождения в жизни: 10000 дней ! ! !
В какой системе счисления?

Это обычные земные сутки - кто сказал что возраст можно только в годах считать?

10000 дней - примерно 27 с половиной лет. Кто в районе этой даты - проверьтесь, чтоб не пропустить!

Forthware писал(а):
А по-поводу задачи - нужен не код, а нормальная программка с пользовательским интерфейсом.
Вот тут у Форта проблемы... Предлагаю переключиться на Дельфи.[/quote]
Не надо Дельфи! Надо на конкретной задаче решать эту проблему форта! Да и какая проблема, когда есть WinAPI?

_________________
Банзай!


Последний раз редактировалось Kamikaze Пн фев 18, 2008 14:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 18, 2008 14:16 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Kamikaze писал(а):
Надо на конкретной задаче решать эту проблему форта!
Как?
Kamikaze писал(а):
Да и какая проблема, когда есть WinAPI?
Стрить междуморду в голом винапи всеравно что писать алгоритм в голом ассме. К тому же, винапи то есть, да вот в каждой реализации форта к нему доступ сделан по своему. Напишешь для СПФ, не пойде на Вин32Форт, и так для всех... Ну а на дельфи оно раз в 10 проще...

_________________
Am I evil? I'm man - yes I am! © James Hatefield


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

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


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

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


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

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