Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт ноя 15, 2018 19:11

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 85 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 15:54 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6435
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Alex писал(а):
нет, трудностей в удержании не испытал, просто надо было глянуть в табличку,

Имена переменных, как и другие объекты программы, должны быть легкочитаемыми. С тем же успехом можно зашифровать команды символами псевдографики и утверждать, что достаточно посмотреть в таблицу.
Alex писал(а):
удивило то что для решения нажал 68 раз клавиши и ни разу забой, дел, и
клавиши навигации и не двигал-манипулировал мышой.
и ощущение было что решение получилось само-сабой в потоке

И на адреналине, нет?...
Alex писал(а):
вот гляньте как из темы выстроилось вспомагательное слово 3DUP

Проще реализовать в ядре.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 16:34 
Методологическое замечание. Не слишком ли часто современные программисты пишут не то, что нужно, но то, что легко написать?
P.S. Кстати, Alex, Ваше решение, насколько я понял, как раз свидетельствует против манипуляторов, там слишком много избыточных сравнений.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 16:46 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6435
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
gudleifr писал(а):
Методологическое замечание. Не слишком ли часто современные программисты пишут не то, что нужно, но то, что легко написать.

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



За это сообщение автора Hishnik поблагодарил: dynamic-wind
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 17:37 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1255
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
При наличии определенной квалификации и желания на форте можно писать очень даже качественный код.

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


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

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 231
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
gudleifr писал(а):
P.S. Кстати, Alex, Ваше решение, насколько я понял, как раз свидетельствует против манипуляторов, там слишком много избыточных сравнений.


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

это не единственное решение на манипуляторах, могу привести аналог решения от forther


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 18:43 
Alex писал(а):
это не единственное решение на манипуляторах, могу привести аналог решения от forther
Т.к. решение от forther красиво, то я бы сильнее повелся на манипуляторы, если бы Ваши механистические преобразования дали бы в пределе его решение автоматически. Мол, выкинул парные цифири, привел в нормальную форму и в сухом остатке...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 19:00 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 231
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
действительно, решение от forther красиво. в манипуляторах я вижу так: (работоспособность не проверял)
Код:
\ x=DROP
: ?min ( a b -- -1 | a b 0 ) 2|=i[-1];t12>i21e12t`0 ;
: med  ( a b c -- m | _ ) 3\23[?min]i;t1[?min]ix;tx[?min]i;t[NIP] ;

Я думаю спустя некоторое время (может будут еще варианты) chess приведет цифры байтов / тактов ( у него это здорово получается)


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

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Код:
return a<b? (b<c? b : (c<a? a : c))
          : (a<c? a : (c<b? b : c));

:shuffle;
А форт в решении этой задачи выглядит просто ужасно.


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

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 231
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
подправленный 1 вариант-быстрый выход если какая-либо пара равна и группировка условий по ИЛИ
Код:
: middle ( a b c -- middle | _ )  3\12=13=23=||i;t12>13<&12<13>&|i1;t21>23<&23>21<&|i2;t31>32<&31<32>&|i3;t ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 20:35 
Alex писал(а):
подправленный 1 вариант
Очевидно, необходимо заведомо не больше 3 сравнений на больше и двух на равно, так что есть куда расти.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 22:00 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 231
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
действительно можно еще проще, словами алгоритм таков
если первое число меньше второго и третьего то ответ минимальное число из второго и третьего
если первое число больше второго и третьего то ответ большее из второго и третьего,
иначе - ответ первое число.
Код:
: middle ( a b c -- middle | _ )  3\12=13=23=||i;e12<13<&i23m;e12>13>&i23M;t1tt ;


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

Зарегистрирован: Сб май 13, 2006 23:37
Сообщения: 320
Благодарил (а): 1 раз.
Поблагодарили: 7 раз.
dynamic-wind писал(а):
Код:
return a<b? (b<c? b : (c<a? a : c))
          : (a<c? a : (c<b? b : c));

:shuffle;
А форт в решении этой задачи выглядит просто ужасно.


Лукавите. Нет проверки на "отсутствие" среднего. Да и заголовок в функцию не мешало б добавить.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Сб фев 11, 2012 23:33 
Alex писал(а):
Код:
: middle ( a b c -- middle | _ )  3\12=13=23=||i;e12<13<&i23m;e12>13>&i23M;t1tt ;
Это намного красивее, чем:
Код:
: sort 2dup < if swap then ;
: mid sort >r sort r> sort ;
: equ? swap >r r@ = if rdrop drop 0 else r@ = if rdrop 0 else r> -1 then then ;
: middle-norm mid equ? ;
: middle-chess middle-norm drop ;
?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Вс фев 12, 2012 00:24 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
gudleifr писал(а):
Код:
: sort 2dup < if swap then ;
: mid sort >r sort r> sort ;
: equ? swap >r r@ = if rdrop drop 0 else r@ = if rdrop 0 else r> -1 then then ;
: middle-norm mid equ? ;
: middle-chess middle-norm drop ;
?


Кстати, говорил об арифметическом IF (когда больше-меньше-равно - разные результаты) и всех интересовал пример - так вот

при наличии такой операции нам потребуется всего 2 сравнения


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Оставить среднее
СообщениеДобавлено: Вс фев 12, 2012 00:29 
вопрос писал(а):
Кстати, говорил об арифметическом IF (когда больше-меньше-равно - разные результаты) и всех интересовал пример - так вот при наличии такой операции нам потребуется всего 2 сравнения
Меньше, чем три сравнения не получится, но арифметический IF я, действительно, опять чуть не начал писать...
А теперь давайте найдем медиану для 5-и чисел...


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

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


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

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


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

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