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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вопрос чайника
СообщениеДобавлено: Пн авг 08, 2011 00:30 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июл 12, 2011 20:04
Сообщения: 8
Откуда: Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вот такая прога выбивает quark.exe в ОС:
: C BEGIN ." Приветики..." AGAIN ;
C
На экране ничего не появляется. Что не так делаю?


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Надо внутрь поставить слово "$" (без кавычек). Это "прокачка" цикла сообщений в Windows. Сейчас получается, что на внутренний виртуальный экран выводятся символы, но программа не может отработать сообщение "перерисовка окна".


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Описание лежит на http://www.msyst.ru/quark.pdf


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

Зарегистрирован: Вт июл 12, 2011 20:04
Сообщения: 8
Откуда: Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Спасибо, теперь выводится нормально.
Как прервать цикл, оставаясь в консоли?


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

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

Эээ... никак :) AGAIN не прерывается. Чтобы прервать, надо писать цикл BEGIN UNTIL. Если будет работать прокачка сообщений, то консоль будет функционировать и в процессе выполнения цикла.


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

Зарегистрирован: Вт июл 12, 2011 20:04
Сообщения: 8
Откуда: Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Что-то нащупал:
: MESSA ." Кранты" BYE ;
' MESSA TO K_ESC
Теперь бы знать эквивалент слова ABORT из стандарта 83, которое прерывает задачу и инициирует стандартную чистую консоль.

Ну и огромное спасибо! Ещё немного - и я погружаюсь в Кварк )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Пн авг 08, 2011 02:19 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
ABORT есть, но, как выяснилось, не работает, будучи вызванным как слово Форта. :shuffle; Обычная практика - введение переменной USER_BREAK, которая проверяется в UNTIL. А поскольку прокачка сообщений работает не только для отрисовки, можно сделать так

Код:
VARIABLE USER_BREAK

: BREAK! USER_BREAK ON ;
' BREAK! TO K_ESC

: MAIN
  0 USER_BREAK !
  BEGIN
    10 10 GOTOXY 1 . $
  USER_BREAK @ UNTIL
  10 10 GOTOXY 32 EMIT // убедились, что действительно выходим
;
     


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Чт сен 08, 2011 16:22 
Недавно начал изучать Форт, пользую quark, добрался до массивов и наткнулся на непонятную вещь:
CREATE XM[] 10 ALLOT
6 0 XM[] + !
5 1 XM[] + !
4 2 XM[] + !
0 XM[] + @ .
1 XM[] + @ .
2 XM[] + @ .
Результат: 263430 1029 4
В чем ошибка то ???
Ну и еще вопрос можно ли делать n-мерные массивы (желательно пример)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Чт сен 08, 2011 16:35 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Гость писал(а):
В чем ошибка то ???

6 0 XM[] + !
А вот в чем нужно писать :
либо
Код:
5 1  CELLS XM[] + ! \ Упаковка в ячейки 32 разряда
.........................
       1 CELLS XM[] + @ . \ соответственно достаем из ячейки


либо
Код:
5 1  XM[] + B! \ Упаковка в байты
.........................
       1 XM[] + B@ .


P.S. Не уверен есть ли вы кварке В! B@
может что то другое что пишет и читает байты :roll:


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Гость писал(а):
CREATE XM[] 10 ALLOT
6 0 XM[] + !
5 1 XM[] + !
4 2 XM[] + !
0 XM[] + @ .
1 XM[] + @ .
2 XM[] + @ .
Результат: 263430 1029 4
В чем ошибка то ???

надо или так
6 0 XM[] + C!
5 1 XM[] + C!
4 2 XM[] + C!
0 XM[] + C@ .
1 XM[] + C@ .
2 XM[] + C@ .
или так
6 0 XM[] + !
5 4 XM[] + !
4 8 XM[] + !
0 XM[] + @ .
4 XM[] + @ .
8 XM[] + @ .
Операции ! и @ работают с ячейкой, а ячейка это четыре байта

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Чт сен 08, 2011 18:21 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Код:
: XM[]! ( data,index --> ) CELLS XM[] + ! ;
: XM[]@ ( index --> data ) CELLS XM[] + @ ;


И после этого писать:

Код:
6 0 XM[]!
5 1 XM[]!
4 2 XM[]!

0 XM[]@ .
1 XM[]@ .
2 XM[]@ .

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Чт сен 08, 2011 18:57 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Еще в кварке есть слово -TH (от 5 -th, т.е. 5 -е). Оно вычисляет адрес ячейки по начальному адресу массива и индексу ячейки. Т.е. для чтения из 3-го элемента XM[] надо написать XM[] 3 -TH @. Для вещественных чисел существует -FTH.

Работа с байтами - C@ C! (от CHAR).

Многомерный массив отдельно не существует, это несколько маленьких массивов, объединенных в большой одномерный. Если есть его размеры XMAX, YMAX, то индекс вычисляется как Y*XMAX+X.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Пт сен 09, 2011 08:19 
Гость писал(а):
Код:
CREATE XM[] 10 ALLOT

Создаст массив на 2.5 стандартных integer, т.к. они занимают 4 байта, а выделено всего 10.
Лучше
Код:
CREATE XM[] 3 CELLS ALLOT


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Пт сен 09, 2011 12:38 
Всем огромное спасибо!!!! Теперь все работает как надо.

WingLion писал(а):
A eще имеет смысл сделать:

Код:
: XM[]! ( data,index --> ) CELLS XM[] + ! ;
: XM[]@ ( index --> data ) CELLS XM[] + @ ;



Естественно уже сделал без таких вещей никуда!


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Вопрос чайника
СообщениеДобавлено: Сб сен 10, 2011 16:09 
Не в сети
Аватара пользователя

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

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


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

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


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

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


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

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