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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Поменять значения 2-х VALUE переменных
СообщениеДобавлено: Ср мар 12, 2008 19:33 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Дано: переменные V1 V2 типа VALUE

Нужно, чтобы V1 стала равной V2 и наоборот V2 стала равной V1.
Присвоение производить конструкциями TO V1, TO V2. На стеке параметров перед присвоением
должен лежать только один параметр. Стеком возвратов не пользоваться и новых переменных не заводить. Кто без раздумий знает как - просьба, решения не давать.

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Известная, вроде задача

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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

Код:
V1 V2 XOR TO V1
V1 V2 XOR ТО V2
V1 V2 XOR ТО V1


п.с. помнится, на занятиях по программированию, мне за подобное решение, но со сложением/вычитанием вместо XOR поставили пару. Потому что в задаче надо было
просто поменять значения двух переменных без всякого рода экономий памяти и т.п.
И "правильным решением" было названо решение с испольованием третьей пременной.

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


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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
WingLion писал(а):
Сижу и раздумываю, является ли мое решение "решением с раздумьями" или "решением без раздумий"?
"Решением без раздумий". Это классика. :) Только в классическом варианте сложения и вычитания.

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


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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Кстати, а вот такое тоже соответствует условию ;) :
Код:
V1 HERE ! V2 TO V1 HERE @ TO V2
:))

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


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

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код:
V1 V2 VARSWAP


:)


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Нет, несомненно имелось ввиду сложение-вычитание?
Всё остальное может соответствовать условию но не соответствовать замыслу.

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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


а XOR чем хуже сложения/вычитания?

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


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
а XOR чем хуже сложения/вычитания?

Даже лучше! Нет заморочек с предыдущим левым переносом ;)
И решение проще == симметричнее и не надо думать с выбором операций.

С раздумьями, но решения не даю - знал идею раньше. ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 13, 2008 08:13 
осознание философии решения на XOR потребовало времени :)
ну вот решение на плюсах и минусах так сказать пака никто не успел ,
Код:
V1 V2 - TO V2
V1 V2 - TO V1
V1 V2 + TO V2


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 13, 2008 08:45 
Не в сети

Зарегистрирован: Сб май 13, 2006 23:37
Сообщения: 380
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
in4 писал(а):
Нет заморочек с предыдущим левым переносом


Нет никакого левого переноса. Все чисто (что и было отмечено предыдущим оратором).
А идея обоих решений одна и та же, а поэтому победитель однозначно WingLion. С другой
стороны, он про это давно знал (как и большинство промолчавших, как мне кажется) ...

И вообще это жлобское условие "кто знал молчите". Надо задачки подруднее выбирать,
чтоб никто не знал.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
И вообще это жлобское условие "кто знал молчите". Надо задачки подруднее выбирать,
чтоб никто не знал.

Кто не знал - тому интересно решить. Нормальное условие, все сравнительно лёгкие задачи кто-то решал а трудные - займут слишком много времени. Выбрать задачу не так легко.

Цитата:
а XOR чем хуже сложения/вычитания?

Ничем, разумеется, просто сложение-вычитаение приводится в учебниках

_________________
понимаю некоторую бестолковость некоторых вопросов


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

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
задача искусственная. а вот как решить такую её модификацию:

написать слово VSWAP, которое меняет значения двух VALUE
переменных, переменные можно брать либо со входного потока,
либо в виде токенов (например, XT) со стека.

повторюсь, формат вызова: VSWAP V1 V2 или ' V1 ' V2 VSWAP

использовать можно что угодно, хоть стеки, хоть ОЗУ.

усложнение задачи: решение должно быть совместимым со стандартом (одним из).


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

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Тут вопрос реализации VALUE. Она бывает разной в разных системах, и даже ANSI этого не огрничивает. Поэтому приведу вариант, который предполагает что информация в VALUE лежит в >BODY (вроде верно для SPF).
Код:
:NONAME OVER @ OVER @ SWAP ROT ! SWAP ! ; DUP
: VSWAP1  ( "v1 v2" -- ) ' >BODY ' >BODY STATE @ IF POSTPONE 2LITERAL LITERAL COMPILE, ELSE LITERAL EXECUTE THEN ; IMMEDIATE
: VSWAP2  ( xt1 xt2 -- ) >BODY SWAP >BODY OVER @ OVER @ SWAP ROT ! SWAP ! ;

Если строго следовать ANSI, то второй вариант реализовать невозможно вообще, а первый, только с использованием EVALUATE , поскольку ни POSTPONE , ни [COMPILE] применять к TO нельзя.

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Знакомый дельфист, который знаком и с фортом дал мне эту задачку.
Для меня начались раздумья(бо не программист - классику не знаю).
Решил, когда понял, что функции от двух аргументов
могут или уменьшать исходную информацию(необратимые),
или не изменять эту информацию(обратимые).

обратимые: XOR + - * /
необратимые: AND OR > < = MAX MIN и т.д.

как следствие решения:

Код:
V1 V2 XOR TO V1
V1 V2 XOR TO V2
V1 V2 XOR TO V1

V1 V2 + TO V1
V1 V2 - TO V2
V1 V2 - TO V1

V1 V2 * TO V1
V1 V2 / TO V2
V1 V2 / TO V1

Первый вариант(в отличие от двух последущих) корректен при любых
значениях V1, V2.

Вариант FORTHWARE хотя формально и соответствует ТЗ, но все-таки использует 3-ю переменную
(хоть и не вводимую вновь и не VALUE типа).

Ps. И еще подумалось, что перенос при переполнении на уровне стандартных слов форта
недоступен, хотя это понятие не является прерогативой языка. Кстати любой реальный
процессор поддерживает команды с переносами, а виртуальная машина форта - нет.
Значит надо бы сделать слова как-то закрывающие этот пробел.
Например хотя бы LSHIFTC и RSHIFTC.

Код:
REQUIRE IDN ~chess\assm\sp-assm.f

: LSHIFTC \ N n -- N1
  C=A A=@P Ac<< $ 4 Pa ;

: RSHIFTC \ N n -- N1
  C=A A=@P Ac>> $ 4 Pa ;

\EOF
STARTLOG
SEE LSHIFTC
SEE RSHIFTC

лог

CODE LSHIFTC
5A5FA7 8BC8             MOV     ECX , EAX
5A5FA9 8B4500           MOV     EAX , 0 [EBP]
5A5FAC D3D0             RCL     EAX , CL
5A5FAE 8D6D04           LEA     EBP , 4 [EBP]
5A5FB1 C3               RET     NEAR
END-CODE

CODE RSHIFTC
5A5FC7 8BC8             MOV     ECX , EAX
5A5FC9 8B4500           MOV     EAX , 0 [EBP]
5A5FCC D3D8             RCR     EAX , CL
5A5FCE 8D6D04           LEA     EBP , 4 [EBP]
5A5FD1 C3               RET     NEAR
END-CODE

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


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

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


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

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


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

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