Как стать автором
Обновить
26
0

Пользователь

Отправить сообщение

Windows Forth +

Время на прочтение6 мин
Количество просмотров7.2K

Конструирование оснастки для обработки оконных сообщений Windows


Язык Форт большинству кажется наименее подходящим, чтобы программировать на нем, да еще и под Windows. Ведь в нем нет никакой графики, только унылая черная текстовая консоль.
Попробуем преодолеть этот миф.

Во-первых, программировать под Windows оказывается очень легко, достаточно открыть любую инструкцию по WinAPI.

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

Перед созданием окна необходимо создать свой класс. В структуре WNDCLASS есть поле WNDPROC lpfnWndProc, которое содержит ссылку на процедуру обработки сообщений, поступающих от окон данного класса.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии13

Вычисление биномиальных коэффициентов… вручную

Время на прочтение1 мин
Количество просмотров4.2K
Ранее в двух статьях была затронута тема вычисления биномиальных коэффициентов с помощью компьютера.
Расчет биномиальных коэффициентов на Си (С++)
Расчет биномиальных коэффициентов с использованием Фурье-преобразований
По их прочтению может сложиться мнение что это сложная и ресурсоемкая задача.
Прежде чем программировать что-то, попробуем разобраться что здесь к чему.

Факториальная формула: image

Раскроем ее:

Очевидно, что и тогда

А теперь попробуем посчитать например :
Читать дальше →
Всего голосов 29: ↑13 и ↓16-3
Комментарии8

Новые решения старой задачи

Время на прочтение6 мин
Количество просмотров20K
image
Или перевод велосипеда на реактивную тягу

Существует одна очень старая задача, возраст которой равен возрасту Американского Стандартного Кода для Обмена Информацией. Конкретнее — это задача преобразования целого числа в его шестнадцатеричное представление ASCII строкой.
В данной публикации будем рассматривать преобразование целого беззнакового шестидесятичетырехбитного числа в строку фиксированной длины без усечения старших нулей.
Задача на первый взгляд кажется элементарной. Она и была бы таковой, если бы таблица ASCII была другой. Но имеем, то что имеем.
Все решения будут только для IA-32 и Intel 64 архитектуры.
Читать дальше →
Всего голосов 43: ↑38 и ↓5+33
Комментарии19

FORTH: Самоопределяющиеся слова

Время на прочтение5 мин
Количество просмотров7.3K
Пусть имеется некоторый проект на языке Форт, в котором используется достаточно большое число однотипных переменных.
Например: x, y, z, x', y', z', x'', y'', z'', s, m и так далее…
Для их определения придется каждый раз выписывать слово VARIABLE, а это громоздко, уныло и некрасиво. Можно ли как-то сделать повеселее?
Указать, что дальше будут определены переменные и выписать их имена.
Что-то вроде:
VARIABLES:
  x   y   z  
  x'  y'  z'
  x'' y'' z''
  s   m
;VARIABLES

Как это можно реализовать?
Всего голосов 19: ↑17 и ↓2+15
Комментарии10

Лиловые закорючки

Время на прочтение2 мин
Количество просмотров10K

«И плохой генератор ПСЧ на что-нибудь годится»



Полумесяц с ретортой
Полумесяц с ретортой
В процессе работы над одной задачей возник неожиданный побочный эффект. Визуализация хорошего генератора псевдослучайных чисел представляет собой шум и\или путаницу. Заведомо плохой никто не хочет применять даже для тестов. Мне было все равно, примененный очень простой генератор меня вполне удовлетворял и при аккуратном обращении с ним выдавал приемлемый результат. И вдруг будто-то кто-то уверенным росчерком стал выдавать изящные абстрактные рисунки.
Всего 22 точки соединены кривыми Безье и такой забавный результат. Загогулины можно бесконечно генерировать и за ними, как за облаками, не надоедает наблюдать. Можно придумать интересную игру — разгадать, что же выдала на сей раз нам случайность, какая в ней есть закономерность и придумать ей название.
Но у этих кривых есть и более практическое значение. Генератор представляет собой произведение младшей и старшей части счетчика тиков процессора, от которого взят беззнаковый остаток. Если генерировать числа достаточно редко, случайность получается терпимой. Здесь числа генерируются часто, случайность плохая, что и видно по формам загогулин. Несмотря на потенциальное количество 200 в 22 степени разных загогулин, чаще всего повторяются определенные элементы.
Предположительно, степень «лохматости» фигуры, зависит от нагрузки на систему в те микросекунды, когда генерировались числа. Диагональная линия, ака «путешественник» говорит о почти линейной зависимости случайных числе от времени и малой нагрузке на систему. «Скалярия» — о большей случайности, а значит достаточно высокой нагрузке…
Для тех, кто захочет развлечься лиловыми загогулинами, ниже приведен код и несколько ярких представителей.
Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии22

FORTH: POP3 наноклиент. Часть 2

Время на прочтение6 мин
Количество просмотров5.5K
Во второй части попробуем написать минимального POP3 клиента. Он будет уметь подключаться к серверу, логиниться в почтовый ящик, узнавать сколько там писем и скачивать последнее. Для иллюстрации этого будет достаточно.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии12

FORTH: наносервера и наноклиенты. Часть 1

Время на прочтение4 мин
Количество просмотров13K
Пришло время рассказать о еще одной стороне применения замечательного языка Форт.
Этим циклом статей я покажу, как с его помощью можно создавать крошечные клиент-серверные приложения. Каждое из которых можно использовать как исследовательский и обучающий инструмент.
Для развлечения нам понадобится Windows вплоть до семерки и пакет SP-Forth. Андрей Черезов декларировал возможность запуска его форт-системы под Линуксом, но я это не проверял.

Для начала попробуем создать простейшую серверную программку, которая будет отдавать присоединившемуся клиенту ну… скажем текущую дату и время на сервере.

Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии20

Соломонова Сортировка

Время на прочтение3 мин
Количество просмотров30K
Доброго Нового Года!

В копилку экзотических способов сортировки предложу еще один, немного своеобразный, но обещающий приличную скорость при хорошо случайных данных.

Пусть имеется набор N из n целых положительных чисел от 1 до n.
Самоочевидно, что для хранения n чисел необходимо иметь n ячеек. Вне зависимости от порядка, в котором числа будут записаны.

Исходный массив
3 5 2 1 8 4 7 6 9 10

Несложно представить, что неупорядоченный набор N достаточно просто заменить упорядоченным (по возрастанию, или по убыванию), записав упорядоченный набор на место неупорядоченного.

Упорядоченный массив
1 2 3 4 5 6 7 8 9 10

Читать дальше →
Всего голосов 44: ↑38 и ↓6+32
Комментарии26

Немного об укладке рюкзака

Время на прочтение2 мин
Количество просмотров13K
Многим известна так называемая задача об укладке рюкзака.
Вкратце напомню: из кучи предметов нужно выбрать такие, чтобы рюкзак был напихан под завязку и его еще можно было уволочь.
Говоря более формально, необходимо из данного набора A пар чисел a(i)b(i), выбрать такие, чтобы сумма чисел а не превосходила наперед заданного S, а сумма чисел b была максимальной. Σa(n) ≤ S, Σb(n)=max.

Исходный набор:

Σ
a 3 14 25 26 32 2 28 23 1 9 163
b 11 12 5 30 31 25 19 27 32 33 225

Читать дальше →
Всего голосов 28: ↑10 и ↓18-8
Комментарии9

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность