Открываем
сайт из
списка по
случайному
закону
Наш
девиз:
Вот
тебе хомут и
дуга, а я тебе
не слуга.
Адрес
документа |
http://shabronov_s2.dyn-dns.ru/temp/melodii_rnd/melodii_rnd.doc инд: |
Архив
программ |
http://shabronov_s2.dyn-dns.ru/temp/melodii_rnd/melodii_rnd.zip |
От
автора:
·
Приведена
программа поиска
текста в
тексте и
последующих
действий с
"найденышем";
·
Действия
- открыть
ссылку на
сайт, выбрав
ее случайным
образом;
·
Программа
написана
на языке FORTH, имеет
статус
«свободного»
применения,
предназначена
для изучающих FORTH и
доступна
всем
желающим без
возрастных
ограничений;
·
Возможно,
данная
программа позволит
вылечить
ипохондрию,
депрессию, и
надеяться на лучшие
события, но
рассчитывать
худшие варианты.
·
Список
сайтов - это
музыкальные
и фото фрагменты
автора в
разных событиях
наших реалий;
Вступление
·
Данная
программа, из
области
задач поиска.
Автор на своем
авторском
сайте для
себя и своих
знакомых
располагает
музыкальные
фото события.
Где бывал,
кого видал.
Соединил все,
или почти все
ссылки в один html-ный файл
и поместил на
своем сайте.
·
Выбрал
ссылку,
перешел на
нее. Смотри и
радуйся. А
потом это
утомило - выбирать!
·
Вот
и поскольку
лень движет
человечеством
и автором
тоже - он и
написал
такую программку,
которая
выбирает
ссылки и
открывает их.
·
Теперь
пусть
"мучается"
компьютер
"проблемой выбора".
Хотя по
компьютеру, это не
заметно.
Текст
программы.
·
Программа
находиться в архиве , это
текстовый
файл melodii_rnd.f и дополнительно
он приведен
ниже в
таблице.
\
программа
на языке
ФОРТ =
ОТКРЫТЬ
САЙТ ИЗ СПИСКА
БОЛЬШОГО
КОЛИЧЕСТВА
ПО
СЛУЧАЙНОМУ ЗАКОНУ= \
------------------------------------------------------------------------------- \ \
Описание
алгоритма
программы: \ -
выполняется
поиск по
тексту в
файле
ссылок,
которые
начинаются http:..... \
Текст
ссылки
обязательно
должен
заканчиваться
пробелом!
Это поисковый
признак. \ после
пробела
любая
комментирующая
информация.
Не должна
содержать
поисковый
компонент. \ -
список
сайтов - это
текстовый
файл, формируется
блокнотом,
кодировка WIN-1251
ANSI-кирилица \ в
данной
программе
этот файл
называется
melodii_rnd.txt \ Автор
приводит
ссылки
своих музыкальных
поздравлений
и
путешествий
со своего
сайта. \ Вы
можете
заполнить
список
ссылками
своих
телевизионных
программ
или любимых
книг или
музыкальных \
произведений.
Даже можно
из раздела xxx,
если Вам <16 и у
Вас есть
либидо.
Шутка.; \ -
первый
проход -
подсчет
количества
ссылок; \ - из
количества
выбирается
случайное
число; \ -
второй
проход по
случайному
числу
находится
ссылка и
открывается
браузером,
установленным
по
умолчанию; \ -
программа
закрывается; \ -
программа
компилируется
forh
компилятором
100_spf4.exe и
создает
исполняемый
файл melodii_rnd.exe \ -
текст
программы -
melodii_rnd.f \ \
архив
программы с
текстом и
компилятором
расположен
на
авторском
сайте \ по
адресу
http://90.189.213.191:4422/temp/melodii_rnd/ \
автор
модифицирует
список по
мере появления
новых
событий; \
Успехов и здоровья! \
автор
Шабронов
Андрей
Анатольевич
тс +7-913-905-8839 \ \
начало
текста
программы \ далее
слова для
контроля и
отладки ?KEY1 STOP1 : ?KEY1 ( K --> код
клавиши без
останова ) KEY? IF PENDING-CHAR @ ELSE 0 THEN ; : STOP1 BEGIN ?KEY1 DUP 0x1B = IF BYE THEN 0x20 = UNTIL ( останов, выход
по
нажатию
ESC
продолжить -
Пробел ) ; CREATE KKS_B 0 , (
переменная
для временного
хранения
системы
счисления ) : KKS (
контроль
стека с
предупреждением
о
исчерпании
стека ) BASE @ KKS_B ! (
систему
счисления на
сохранение ) CR
." ctk,N--> "
DECIMAL DEPTH DUP 1 < IF DUP 0= IF .
." STEK PUSTO!" (
при 0 )
ELSE DROP ."
ОШИБКА! - СТЕК
ИСЧЕРПАН !!! "
THEN
ELSE DUP .
HEX ." = " .SN
THEN
." --> " KKS_B @
BASE ! ( вернули
систему
счисления ) ; \
далее слова
для
выполнения
действий по
программе WINAPI: GetTickCount
KERNEL32.DLL ( системная
подпрограмма
получить
время c
начала
загрузки мс
в системе ) WINAPI: ShellExecuteA SHELL32.DLL ( системная
подпрограмма выполнение
текста
ссылки ) VARIABLE RND (
переменная
для
получения
случайного
числа из
случайного
времени
включения ) 0x10450405 CONSTANT generator
( константа
такая вот,
можно что то
и другое
поставить ) : RANDOMIZE GetTickCount RND ! ; : RANDOM ( -- n ) RND @ generator UM* DROP 1+ DUP RND !
; : CHOOSE ( n -- 0..n-1 случайное
число ) RANDOM UM* NIP ; : START_link_clik ( An n
- PZout - выполняется
ссылка
по
тексту
Аn N ) DROP 5
0 0 ( An K1 S" open"
DROP 0
ShellExecuteA ( pz- --- )
DROP ; : POISK_WWW_IN_MEM ( 2DUP ( Af Nf Af Nf --
дублируем
расположение )
0 ( Af Nf Ns=0
-- Ns
cчетчик
установили
0 ) ROT ROT ( Ns=0 Af Nf -- ) S" http:" (
Ns=0 Af Nf Ap Np --
указываем
адрес
строки текста
поиска )
2SWAP ( Ns=0 Ap Np Af Nf -- поисковый
компонент
подготовлен
в стеке ) BEGIN ( Ns=0 Ap Np Af Nf -- )
2OVER (
дублируем
поисковый
компонент )
SEARCH (
выполняем
поиск если
нашли то -1
если нет то 0 и
выходим за repeat ) WHILE ( Ns=0 Ap Np Af' Nf' -- Аf сместился
на место
найденого
слова Nf -
уменьшилось
на тоже
значение )
>R >R >R >R 1+ R> R> R> R> (
увеличиваем
счетчик из
глубины
стека на 1 т.к. нашли
одно
совпадение )
>R OVER + R> (
сместил адрес
поиска ) REPEAT
( Ns=0 Ap Np Af' Nf' -- ) 2DROP 2DROP ( Ns -
оставили
только
результат
найденого
количества ) DUP 0= IF DROP 7 EMIT 7 EMIT BYE THEN (
выходим с
пиком если
нет в файле
нужных
строк ) ; : OPEN_FILE_IN_MEM ( An
n - Af Nf -- файл
открывается
и
переписывается
в память
начиная с Аf и
размер Nf ) R/O OPEN-FILE-SHARED
0<> IF
DROP 7 EMIT 7 EMIT BYE THEN ( выходим
с
пиком
если
нет
файла ) ( fr -- ) DUP ( fr fr
--
открыли
файл получили
дескриптор
и
продублировали
далее
считаем
размер
файла
) FILE-SIZE (
fileid -- ud ior ) 2DROP ( fr N2
-->
подсчитали
Nf и перевели в
одинарное
значение из
двойного
слова ) DUP ALLOCATE THROW ( fr Nf Af --
заняли
память под exe
файл начало Af
в
количестве
Nf ) SWAP ( fr Af
Nf --- в стеке
данные
выделенной
памяти под
размер
проверяемого
файла )
2DUP ( fR Af
Nf Af Nf -
задублировали ) 4 PICK ( fr Af
Nf Af Nf fr - достали
из глубины
стека дескриптор
открытого
файла ) READ-FILE (
c-addr u1 fileid -- u2 ior )
2DROP ( -->
считали
файл в
память и
убрали значение
считанных
байт ) ( fr Af Nf -- ) ROT CLOSE-FILE ( fr -- ior )
DROP ( и
закрыли тот
файл
который ужо
в памяти ) ( An Nf -- ) ; : RND_NS_UST ( An Nf Ns -- An Nf Nsrnd' из
полученного
количества
случайным
образом
выбираем
число ) RANDOMIZE (
случайно
время
системы ) CHOOSE ( n -- 0..n-1 ) ; : POISK_NS_IN_MEM_P1 ( An Nf Nsrnd -- An Nf Ac Ns --
получаем
строку
выбранную
случайно ) ROT ROT ( Nrnd An Nf -- ) 2DUP ( Nrnd Af Nf Af Nf
--
дублируем
расположение )
0 ( Af Nf Ns=0
-- Ns
cчетчик
установили
0 ) ROT ROT ( Ns=0 Af Nf -- ) S" http:"
( Ns=0 Af Nf Ap Np --
указываем
адрес
строки
текста
поиска )
2SWAP ( Ns=0 Ap Np Af Nf -- поисковый
компонент
подготовлен
в стеке ) BEGIN ( Ns=0 Ap Np Af Nf -- )
2OVER (
дублируем
поисковый
компонент )
SEARCH (
выполняем
поиск если
нашли то -1
если нет то 0 и
выходим за repeat ) WHILE ( Nsrn Af Nf Ni Ap Np Af' Nf' -- повторный
поиск и
сравниваем Nsrn c
Ni )
4 PICK 8 PICK = IF EXIT THEN
( вводим
проверку и
выход из слова
если нашли
совпадение
оно должно
быть всегда
это второй
поиск )
>R >R >R >R 1+ R> R> R> R> (
увеличиваем
счетчик из
глубины
стека на 1 т.к. нашли
одно
совпадение )
>R OVER + R> (
сместил адрес
поиска ) REPEAT
( Ns=0 Ap Np Af' Nf' -- ) 2DROP 2DROP DROP ( тут
выхода нет ) BYE ; : POISK_NS_IN_MEM ( An Nf Nsrnd -- Ac Ns --
получаем
строку
выбранную случайно
) POISK_NS_IN_MEM_P1 ( An Nf Nsrnd -- Nsrn Af Nf Ni Ap Np Af' Nf' -- получаем
строку
выбранную
случайно ) 2DUP S" " (
поисковый
компонент
пробелл ) SEARCH (
выполняем
поиск
окончания
строки по
коду ПБ если
нашли то -1
если нет то 0 и
выходим ) IF DROP (
удаляем
количество
поиска по
пробелу ) 2 PICK -
( получаем
количество
до пробела ) SWAP
DROP ( Ac Ns -
убираем
общее
количество
и оставляем
количество
до пробела
получили
строку ) 2DUP
+ 0 SWAP C! (
пишем байт 0
после
количества
т.е.
формируем
строку со
счетчиком ) ELSE DROP 7 EMIT 7 EMIT BYE THEN >R >R 2DROP 2DROP DROP R> R> (
убрали из
стека все
адреса
оставили
строку ) ; : START_WWW_RND_TEST (
-- запуск
ссылок
содержащихся
в файле ) S"
melodii_rnd.txt" ( An
N -- имя
файла в
котором
выполняется
поиск
)
OPEN_FILE_IN_MEM ( An n - Af Nf -- файл
переписывается
в память
начиная с Аf и
размер Nf )
POISK_WWW_IN_MEM ( Af Nf -- An
Nf Ns --
выполняется
поиск cтрок в
выделенной
памяти )
RND_NS_UST
( An Nf Ns -- An Nf Nsrnd' из
полученного
количества
случайным
образом
выбираем
число ) POISK_NS_IN_MEM ( An Nf
Nsrnd -- Ac Ns -- получаем
строку
выбранную
случайно )
START_link_clik ( An n
-- выполняем
текст
ссылки
открываем
ее
браузером ) BYE
( все ок,
программа
прекращает
работу -
выделенная
память
системой
закрывается
) ; ' START_WWW_RND_TEST TO <MAIN> (
установили
выполняемое
слово ) S" melodii_rnd.exe"
SAVE
( записали
файл выполнения
) BYE (
вышли из
компиляции
текста ) \
текст
программы
окончен |
Получение
программы из текста.
·
Текст
есть, нужен
компилятор
языка программирования
FORTH. Это
файл 100_spf4.exe
Он
так же
находиться в
архиве.
·
Создать
новый файл melodii_rnd.exe –
выполнить в
каталоге
компиляцию
текста компилятором
FORTH spf4.exe
\\100_spf4.exe melodii_rnd.f <enter>
Сформируется
новый
исполняемый
файл.
·
В
файле melodii_rnd.txt расположены
ссылки
автора. Но Вы
можете заменить
их на свои.
·
Редактировать
txt файл
можно любым
ТЕКСТОВЫМ
редактором,
например
БЛОКНОТОМ.
·
Формат
файла
текстовый,
кодировка 1251 WIN русская.
·
Для
открытия
сайтов
браузером
требуется два
файла melodii_rnd.exe и melodii_rnd.txt
·
Выполнить
файлы можно в
любом месте.
Важно, что бы
они были вместе.
Выводы
·
Данная
программа
предназначена
для заставок
и показывает
как перенести
"проблему
выбора" в
область
машинного
интеллекта.
·
Есть
ли у машины
интеллект? Но,
если нет
машинного
интеллекта?
Но что, же
тогда
выбирает? Во
общем не
понятно, но
работает.
·
Принцип
действий
"нажал раз и
получил результат".
Выбирает
датчик
случайных
чисел.
·
Автор
постарался
дать текст
упрощенный, "ученический"
и в
максимально
подробном стиле,
для уяснения
алгоритма. Задача
темы
показать
основные
принципы работы
FORTa
·
Программа
не
устанавливается,
не прописывается
в системные
библиотеки.
·
Программа
работает под
операционными
системами WINDOWS 95/98/NT/2000/XP/Vista/Win7/8/10 и
использует
только
функции api- ядра
системы
·
Программа
написана на
языке Форт
версия
spf4.exe – автор А.
Черезов http://www.forth.org.ru
·
Программа
доступна для
использования,
изучения и
модификации
всем
желающим.
·
За
модифицированный тест
отвечает сам
модификатор.
Автор может,
при наличии времени,
только кратко
провести
консультацию
по
используемым
им forth-словам.
·
Автор
оставляет за
собой право
на
модификацию
и улучшение алгоритма
и
отображения.
·
Сторонние
ссылки в
работе даны
для пояснения
материала, взяты
в свободном
доступе и не
нарушают
других
авторских
прав.
·
Сторонние ссылки
могут не
работать, по
причине
изменений их владельцами
ссылок и
автор просит
об этом
помнить при
чтении работы
и понимать,
что все течет
и все изменяется;
·
Архив
данной
работы
продублирован
на облачном
хранилище по
адресу: https://cloud.mail.ru/public/KNsy/ccShS6QnP
---------------------------------------------------------------------------------------------------------------------------------
Автор -
Шабронов
Андрей
Анатольевич Тс. +7 913-905-8839 e_mail - shabronov@ngs.ru
ред. 2017-8-20 .
Успехов
и здоровья!