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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Вс май 02, 2010 18:35 
Благодарю, mOleg
Еще такой вопрос
Как в SP-Forth 4.20 обрабатывать в ввод с клавиатуры.
Тоесть программа просит ввести два или три числа, пользователь вводит их, а программа их уже обрабатывает по внутреней формуле

Например:
Введите число а:
>1
Введите число b:
>2
a + b = 3


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Вс май 02, 2010 21:04 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
_Lacoste писал(а):
Как в SP-Forth 4.20 обрабатывать в ввод с клавиатуры.

вобщем случае есть несколько вариантов:
1) система работает с файловыми потоками STDIN и STDOUT
2) есть набор слов: KEY KEY? EKEY
3) можно обабатывать события, но это уже при работе с ГУЕм

вобщем, самый простой вариант, использовать стандартную консоль системы,
более сложный вариант, но более фортеру привычный, использовать KEY KEY?
в еще более сложном случае нужно уже отрабатывать события окошек и вообще возиться с графикой

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Вс май 02, 2010 22:45 
_Lacoste писал(а):
Благодарю, mOleg
Еще такой вопрос
Как в SP-Forth 4.20 обрабатывать в ввод с клавиатуры.
Тоесть программа просит ввести два или три числа, пользователь вводит их, а программа их уже обрабатывает по внутреней формуле

Например:
Введите число а:
>1
Введите число b:
>2
a + b = 3


Можно использовать слова ACCEPT и >NUMBER


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Вс май 02, 2010 23:13 
_Lacoste писал(а):
Благодарю, mOleg
Еще такой вопрос
Как в SP-Forth 4.20 обрабатывать в ввод с клавиатуры.
Тоесть программа просит ввести два или три числа, пользователь вводит их, а программа их уже обрабатывает по внутреней формуле

Например:
Введите число а:
>1
Введите число b:
>2
a + b = 3

Код:
CREATE buffer: 80 ALLOT
: a+b= ." Введите число a:" CR
       ." >"
       buffer: 80 ACCEPT buffer: SWAP EVALUATE
       ." Введите число b:" CR
       ." >"
       buffer: 80 ACCEPT buffer: SWAP EVALUATE
       + ." a+b=" .
       CR
;
a+b=


Еще >NUMBER cм


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 00:00 
_Lacoste писал(а):
Благодарю, mOleg
Еще такой вопрос
Как в SP-Forth 4.20 обрабатывать в ввод с клавиатуры.
Тоесть программа просит ввести два или три числа, пользователь вводит их, а программа их уже обрабатывает по внутреней формуле

Например:
Введите число а:
>1
Введите число b:
>2
a + b = 3


Немного лучше
Код:

: a+b= ." Введите число a:" CR
       ." >"
       PAD DUP 80 ACCEPT  EVALUATE
       ." Введите число b:" CR
       ." >"
       PAD DUP 80 ACCEPT  EVALUATE
       +
       ." a+b=" .
;
a+b=




Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 11:19 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Гость писал(а):
Можно использовать слова ACCEPT и >NUMBER

это и есть использовать STDIN поток.
преимущество - можно вставлять по ctrl+insert значение, а минус в том, что ошибки придется обрабатывать.
А по KEY можно просто не давать ввести нецифровой символ (если что читайте Броуди "Thinking forth" ).

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 14:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Обсуждение про безопасность форт кода выделена в отдельный топик.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 15:39 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Конечно не в курсе я, про СПФ, но вот вам на закуску, только целые числа размерностью одна ячейка (обычно 16/32 бита)
Код:
: ?INT-INPUT (  - n f )
   PAD 16 BLANK  PAD 12 ACCEPT  PAD SWAP NUMBER?  DUP 2 = IF 2NIP THEN 1 = ;
: Input ( - n )
      BEGIN ?INT-INPUT UNTIL ;
: MAIN
  CR ." A=" INPUT
  CR ." B=" INPUT
  CR ." A+B=" +
  . ;

Обязательно перед вводом чистить буфер ввода PAD, но как уже замечено лучше выделять отделный буфер для области ввода, если он длинее чем 256/512/1024 символов (зависит от системы).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 17:22 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Теперь я прикинусь "чайником" и буду "кипеть" .
покажите пример использования структуры catch .. throw.
спасибо, добрые люди


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 17:31 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Alexander писал(а):
покажите пример использования структуры catch .. throw.


: some-thing ." может быть два варианта развития событий:" IF ." без ошибки" ELSE ." c ошибкой" 123456 THROW THEN ;

: some-other ['] some-thing CATCH IF ." ошибочка вышла: " . THEN ;

1 some-other
0 some-other

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 17:55 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Еще раз спасибки.
вот что хотел показать, вроде удалось
Код:
: ?INT-INPUT (  - n f )
   PAD 16 BLANK  PAD 12 ACCEPT  PAD SWAP NUMBER?  DUP 2 = IF 2NIP THEN 1- THROW ;
: Input ( - n )
      BEGIN
         ['] ?INT-INPUT CATCH DUP IF CR ." INCORRECT" 1 THROW THEN
     0= UNTIL ;
: MAIN
  BEGIN CR ." A=" ['] INPUT CATCH 0= UNTIL
  BEGIN CR ." B=" ['] INPUT CATCH 0= UNTIL
  CR ." A+B=" +
  . ;

Еще можно поиграться )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 18:12 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
а вообще, ребяты, лучше думать не только о себе, и создавать для нового вопроса новую тему. Например, а как же ловятся исключения? или: как ввести число?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 21:02 
Гость писал(а):
[quote="Alexander]
Еще можно поиграться )[/quote]
Код:
REQUIRE NUMBER?   ~mak\lib\fpcnum.f

: ?INT-INPUT (  - n f )
   PAD 16 ERASE 
   PAD DUP 12 ACCEPT  NUMBER? INVERT THROW 
;
: INPUT ( - n )
      BEGIN
         ['] ?INT-INPUT CATCH DUP IF CR ." INCORRECT" 1 THROW THEN
      0= UNTIL ;
: MAIN
  BEGIN CR ." A=" ['] INPUT CATCH 0= UNTIL
  BEGIN CR ." B=" ['] INPUT CATCH 0= UNTIL
  CR ." A+B="
  D+
  D.
;
MAIN
[/quote]


Если ввести больше 12 цифр - 1000000000000 то почему работает неправильно?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Пн май 03, 2010 21:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Гость писал(а):
Если ввести больше 12 цифр - 1000000000000 то почему работает неправильно?

потому что используется NUMBER? скорее всего возвращающий то число одинарной длины, то число двойной длины.
это как раз один из тех моментов, на который намекал WingLion ;)

P.S.
вы бы все-таки входили как пользователь.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: вопросы чайника, заход №2
СообщениеДобавлено: Вт май 04, 2010 13:01 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
проблема в сворачиваниии числового диапазона в кольцо.
Если вы действительно хотите оперировать какими-то числами в произвольном диапазоне и не думать ни о чем, то придется посмотреть что делали люди до того. Например, FSL(Forth Scientific Library) содержит что-то подобное в строках файла big.f, или взять полиномиальное представление чисел с заданным основанием системы счисления.
Код:
\ вводим число, по окончании ввода на вершине стека число двойной размерности
: ?INPUT (  -  | d )
    PAD 23 BLANK            \ заполнять обязательно пробелами, и ничем иначе
    PAD 21 ACCEPT           \ собственно ввод
    PAD SWAP NUMBER?        \ преобразование строку ввода в число
    1- ?DUP IF  1- THROW    \ генерируем исключение в случае ошибки преобразования
    ELSE  S>D  THEN ;       \ если число одинарной размерности, то его преобразуем

\ обработчик ввода   
: (INPUT) ( - d )
    ['] ?INPUT CATCH         \ защищаем ввод, так как неизвестно, что может твориться в ЭВМ
    ?DUP IF CR ." INCORRECT" \ уведомляем пользователя о неправильном вводе
            THROW  THEN ;    \ заставляем вызвавшее слово, повторить процедуру сначала

: INPUT ( xt - d )   
    BEGIN
        DUP EXECUTE         \ отображаем приглашение ввода
        ['] (INPUT) CATCH
    0= UNTIL  ROT DROP ;    \ удаляем токен-указатель на приглашение ввода

\ различные сообщения выводимые на экран
: ."A="  CR ." A=" ;
: ."B="  CR ." B=" ;
: ."A+B="  CR ." A+B=" ;

\ собственно тело программы
: MAIN
   ['] ."A=" INPUT
   ['] ."B=" INPUT
   ."A+B=" D+ D. ;

вот такой вот получился код, преследуя универсальность он сильно раздулся
Попробуй использовать это определение, может имелось ввиду особенность работы слова преобразователя, сообщая что не так числа преобразуются:
Код:
: ?INPUT (  -  | d )
    PAD 22 BLANK            \ заполнять обязательно пробелами, и ничем иначе
    PAD 21 ACCEPT           \ собственно ввод
    [CHAR] , OVER PAD + C!  \ допишем знак для нужного преобразования
    PAD SWAP 1+ NUMBER?     \ преобразование строку ввода в число
    2- THROW ;              \ теперь это выход с уведомлением о том, как прошло преобразование


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

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


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

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


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

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