Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/67: Рейтинг темы: голосов - 67, средняя оценка - 4.64
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7

Искуственный интеллект

15.04.2014, 12:33. Показов 15423. Ответов 108
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Чтобы заняться искусственным интеллектом, надо сделать
Первый шаг. А именно определить способ хранения информации.
Этот способ должен быть удобен как для человека, так и для
программы, которая будет пользоваться этой информацией.
Не долго ломая голову, я решил воспользоваться обыкновенным
текстовым файлом. Расположив информацию в две строки.
Строка с нечетным номером это запрос информации, а строка
с четным номером это ответ на запрос. Чтобы опробовать скорость
выдачи информации была написана следующая программа
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Dim TA As String
Dim f1 As String, f2 As String
Dim i As Long
 
Private Sub txtT_Change()
    Open "ARW.txt" For Input As #1
    TA = txtT.Text
    Do
        Line Input #1, f1
        Line Input #1, f2
        If TA = f1 Then
            lokK.Caption = f2
            Exit Do
        End If
    Loop Until EOF(1)
    Close #1
End Sub
Был изготовлен специальный текстовый файл
Объёмом более 11 МБ и содержащий ровно 1 000 000 строк
В последней строке содержался ответ (запрос в предпоследней)
Задержка по времени что-то около половины секунды.
Меня это вполне устраивает.
Примечание:
Как я сказал это очень удобно для человека.
Например вы можете создать свой файл, который будет снабжать
Вас необходимой вам информацией. Ну нужен вам перевод слова
с английского на русский или наоборот - пожалуйста. А если допустим
вы хотите вспомнить формулу, скажем синус двойного аргумента, то
тоже нет проблем.
Желаю всем удачи!
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2014, 12:33
Ответы с готовыми решениями:

QBasic измеряет интеллект
Программа выдаёт вам четырехзначное число и показывает его в течение пяти секунд. Ваша задача: 1) запомнить число (записывать...

Кто что знает о Artificial Intelligence (Искуственный интеллект)?
Тут ктонить знает про Artificial Intelligence (Искуственный интеллект)? есть тут такие кому знакома эта тема???? BOT LINK: ...

Искуственный резистор
Появилась надобность в мощном графитовом резисторе, но предложенные на рынке варианты - - меня не удовлетворили, так-как типа...

108
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
15.04.2014, 12:41
Осталось придумать удобный формат хранения текстового файла в голове человека,
а то 1.000.000 строк тяжело всегда держать в памяти
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38174 / 21109 / 4307
Регистрация: 12.02.2012
Сообщений: 34,711
Записей в блоге: 14
15.04.2014, 13:51
Но при чем здесь искуственный интеллект? Это просто линейное хранилище.
2
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
15.04.2014, 14:04
Catstail, это
Цитата Сообщение от gehh Посмотреть сообщение
первый шаг
к искусственному интеллекту
2
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.04.2014, 17:48
искуственный интелект это отдельное направление целой науки !
да что вы вообще об этом знаете

Добавлено через 5 минут
Сделай свою программу чтоб она предугадывала следующий запрос
это и будет первый шаг

Добавлено через 13 минут
или если бы твоя программа могла самостоятельно создать
почтовый акаунт и самостоятельно авторизироваться выполнить некое
направленное действие, получить результат .. вот тогда да
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.04.2014, 18:11
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
или если бы твоя программа могла самостоятельно создать
почтовый акаунт и самостоятельно авторизироваться выполнить некое
направленное действие, получить результат .. вот тогда да
Не думаю, что это уже ИИ.
Этому трюку можно научить даже браузер FireFox с соответствующим плагином. Повторение готового алгоритма не есть проявление интеллекта.
0
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
15.04.2014, 19:49  [ТС]
Искусственный интеллект. Шаг 2.
Здесь я хотел бы поделиться некоторыми фрагментами мыслей
того, как научить программу составлять правильные предложения.
Начнём с Самых простых предложений. Лучше всего это понять на
конкретных примерах. Вот пример. Кошка ловит мышку. Всего три слова.
1) существительное в именительном падеже.
2) глагол в настоящем времени, который требует после себя существительное
в винительном падеже.
3) собственно ещё существительное в винительном падеже.
Эти три слова мы заносим в исходный текстовый файл.
Что далее??
Рассуждения. Логика. Выводы.
Итак Кошка стоит в файле в строке с номером N.
Это ее идентификатор. Кошка может совершать и другие действия
Например "есть" , "пить" и т.д.
Все эти слова тоже будут находиться в исходном файле.
Как же мы сможем определять, какое слово (действие) мы сможем
поставить после слова Кошка (будем считать, что первое слово задано)
Вот Здесь мы построим второй Файл СВЯЗЕЙ !! (обозначим эти файлы
как ф1 и ф2). Что будет занесено в ф2 и куда??
В ф2 в строку с номером равным идентификатору Кошка будут
занесены числа - идентификаторы действий, которые может совершать
Кошка (разделитель - один пробел. Но можно и без пробела если уравнять
разрядность чисел. Допустим все числа шестизначные от 000000 до 999999)
Пожалуй последнее Самое разумное - мы точно с экономии память.
Но сказав А мы вынуждены сказать Б !!
В чем дело?? Обратите сейчас внимание на ЛОГИКУ !!
глагол "ловит" требует после себя тоже некоторое количество слов
(Идентификаторов). Но здесь не применимо свойство транзитивности.
Поясню примером. Охотник ЛОВИТ льва.
А Кошка может ловить льва? НЕТ !! Таким образом нам потребуется
ещё третий файл (ф3) , который (ВНИМАНИЕ) в строке, где Кошка
(Не ОХОТНИК !!) будет содержать идентификаторы тех существительных
в винительном падеже которых Ловит Кошка (например, Рыбку).
Вот теперь программа не ошибется. Если в файле ф1 она выбрала
"Кошка" а в файле ф2 указало слово "ловит" , то в файле ф3 подойдёт
уже любое слово. Мы это так задали!
Ну что ж на один файл слов придётся создать два файла Связей.
Это особенность программ с искусственным интеллектом.
Связей гораздо больше, чем данных!!
Желаю всем удачи!
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.04.2014, 10:44
...
0
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
18.04.2014, 15:48  [ТС]
ИИ. Шаг 3.
Предыдущее предложение можно расширить за счёт привлечения
прилагательных. Продолжим наш пример. Рыжая кошка ловит серую мышку.
Наверное понятно, что тут нет ничего принципиально нового. Добавляется
ещё два файла связей (с числовыми идентификаторами). Возникает вопрос.
Как?? какая программа будет делать эти файлы? Не хочу вас огорчать.
Установить связь между словами может пока только человек. Другой вопрос.
Как механизировать эту работу? Неужто все вручную. Нет! Человек должен
выполнять интеллектуальную работу. А механическую будет выполнять
утилита (вспомогательная программа). В общих чертах она может выглядеть
так. На форме несколько текстовых полей и кнопок. Программа считывает
Исходный файл (заполненный человеком) и заносит в текстовые поля, допустим
одно существительное и один глагол. Человек решает. Установить между ними
связь или нет?? Если да, то он нажимает кнопку "ДА". Идентификатор глагола
заносится в нужный файл.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 16:16
Хорошо-бы подкрепить это алгоритмом ...
0
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
18.04.2014, 16:20  [ТС]
ИИ. Шаг 4
Искусственный интеллект это не только умение правильно говорить.
Это умение правильно видеть наш мир. Распознавать его.
Сравнивать. Выделять главное. Устанавливать связи. Ориентироваться
в нем. Прогнозировать события и т.д. Итак поехали.
Распознавание.
Чтобы понять, что это такое, упростим ситуацию до невозможного.
Человек видит звездное небо. Чёрный фон и белые звезды.
Быстро находит нужные созвездия. Как он это делает?
Все просто, как и все гениальное. Глаз (мозг) не воспринимает
Фон! На сетчатку глаза поступает лишь свет звёзд, только этот свет
преобразуется в импульсы, энергию, информацию. Пример.
Возьмите графический файл чёрного цвета , размером скажем 320х320
Нарисуйте отдельными белыми точками созвездие похожее на букву А.
А теперь сожмем этот файл в 10 раз!! Как??
Мы сделаем ещё один графический чёрного цвета файл размером 32х32.
Теперь заставим программу просканировать первый файл в поисках
Белых точек (чёрные нам не нужны). Найдя белую точку программа
определяет ее новые координаты и наносит в маленький файл.
Вы будете сильно удивлены. Увидев в новом файле чуть ли не
Классический образ буквы А !!!
Именно так работает человеческий глаз и мозг.
Информация сжимается. Ее становится много меньше. Она быстро обрабатывается!!
Успехов вам!
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 16:36
Это что-же ...
компьютеры смогут за нас принимать решения
0
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
24.04.2014, 08:59  [ТС]
шаг 5.
Тут я написал программу, которая должна помочь
человеку в создании файлов связей между словами.
При этом были внесены некоторые изменения
относительно вида числовых связей и их расположения
в строке. После некоторых колебаний, было решено
писать числа "как есть" и разделять их одним пробелом
Здесь сыграло свою роль наличие в Бейсике двух
функций: Split и Join. Надо полагать, что в будущем
они нам здорово пригодятся.
Вот код программы:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Option Explicit
 
Dim ind&, ind2&
Dim i&, t$, tt$
 
Private Sub cmdDA_Click()
    Open "3.txt" For Input As #3
    Open "4.txt" For Output As #4
    i = 0
    Do
        i = i + 1
        On Error Resume Next
        Line Input #3, tt
        If i <> ind Then
            Print #4, tt
        Else
            tt = tt + Str(ind2)
            Print #4, tt
        End If
    Loop Until EOF(3)
    Close #3, #4
    Kill "3.txt"
    Name "4.txt" As "3.txt"
    ind2 = ind2 + 1
    txti2.Text = Str(ind2)
End Sub
 
Private Sub cmdNET_Click()
    ind2 = ind2 + 1
    txti2.Text = Str(ind2)
End Sub
 
Private Sub txti1_Change()
    On Error Resume Next
    Open "1.txt" For Input As #1
    ind = Val(txti1.Text)
    For i = 1 To ind
        Line Input #1, t
        If i = ind Then txtT.Text = t
    Next i
    Close #1
End Sub
 
Private Sub txti2_Change()
    On Error Resume Next
    Open "2.txt" For Input As #1
    ind2 = Val(txti2.Text)
    For i = 1 To ind2
        Line Input #1, t
        If i = ind2 Then txtY.Text = t
    Next i
    Close #1
End Sub
краткое пояснение к программе:
В программе 4 текстовых поля и две кнопки
в поле txti1 вставляется числовой идентификатор
(я тут подумал может ввести термин покороче,
например, "чис"- числовой идентификатор, но боюсь,
что меня перестанут понимать ... если вообще кто-то
это понимает)
программа прочитывает чис и выводит в поле txtT
нужное слово. Другая пара полей txti2 и txtY делает
тоже самое. Человет определяет связаны ли между
собой заданные слова. Если нет, то он нажимает кнопку
"НЕТ", программа заменяет одно слово другим. Если
да, то нажимается кнопка "ДА". Программа заносит
чис в соответсвующее ему место.

шаг 6.
(цвет и интеллект)
Было бы некрасиво, хотя бы вскользь не упомянуть
и эту подтему. Люди ввели в программы 16 миллионов
цветов. Надо ли столько? Нет, конечно. Даже художник
вряд ли сможет различить более 10 000 цветов. Но цвет
удобней задавать байтами. Одного байта (256 цветов)
мало - ввели три.
Так есть ли зависимость между цветом и интеллектом?
Нет, конечно. Если бы она была, то самыми умными
были бы вероятно художники. А слепой?? - дурак??
Да, может он умнее нас всех вместе взятых!!
Я не собираюсь разрабатывать эту подтему. Все равно
нельзя объять необъятное!

шаг 7.
(движение)
Окружающий нас мир непрерывно изменяется.
Движение это тоже изменение. Что бы изучить это
явление, мы должны его упростить, как можно больше.
Итак рассмотрим черный фон, а в центре белый квадрат
Движение этого квадрата в нашу сторону приводит к
увеличению его угловых размеров, для программы
это будет увеличение количества белых точек.
Удаление - это обратный процесс.
Итак, допустим в квадрате 100 точек (белых).
Программа время от времени сканирует заданные
ей изображения.
1) Вот она зафиксировала квадрат, размером 100 точек.
И сообщила: "Есть нечто, но далеко"
2) Квадрат двинулся к нам, количество точек = 200
Программа думает: "Кого черт сюда несет?!"
3) Количество точек увеличилось до 300
Программа нервничает: скорость сканирования
увеличилась, интервал уменьшился
4) Но вот количество точек достигло 500
Это для программы сигнал, для принятия решения.
5) Программа включает сирену и оповещение:
"Внимание!! Внимание!! Неопознанный объект!!"
(или ракетное нападение (по ситуации))
не по теме:
Кто на земле обладает наивысшим интеллектом?
Нет, не человек. Это Земная Цивилизация.
Ее можно рассматривать, как единую форму
разумной материи. Она может сделать то, что не под
силу конкретному человеку или группе людей.
Успехов всем!
3
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
24.04.2014, 12:08
Цитата Сообщение от gehh Посмотреть сообщение
цвет и интеллект
Цвет ЧЕГО?
Связь между интеллектом и цветом волос у лучшей половины "разумной материи" прослеживается довольно определенно

Предлагаю еще рассмотреть тему "звук и интеллект": 16 бит - это много или мало?
3
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
24.04.2014, 12:23  [ТС]
Вы правильно задали вопрос.
Я увлекся этой темой и для меня стало само собой
разумеющимся то, что со стороны неочевидно и непонятно.
Цвет. Объяснить это я был должен с самого начала.
Итак предполагается, что программа будет работать с
графическими файлами. Именно к ним и применимо понятие
цвет, количество цветов и т.д.
Я приношу всем свои извинения и
Вам лично большая благодарность за то, что не пожалели
своего драгоценного времени на это сообщение, которое
возможно и не достойно вашего внимания.
Спасибо вам!
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
24.04.2014, 14:22
Лучший ответ Сообщение было отмечено gehh как решение

Решение

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

Добавлено через 13 минут
Каждый програмист по отдельности разбирается только
в своих узко-направленных задачах, и не способен охватить весь спектр задач
а проблем по созданию ии действительно может возникнуть очень много
я когда только начинал вникать в это уже тогда понял что это явно должна быть
многоуровневая разработка

Добавлено через 5 минут
Сама программа, должна будет уметь вносить правильные изменения
в свой исполняемый код, не останавливаясь, исходя из логики,
целесообразности и синтаксиса

Добавлено через 8 минут
Вобщем должна обладать неизменной частью
и заменяемыми блоками, в зависимости от динамических обстоятельств
замечая и закрепляя все полезное, и выстраивая свое общее поведение

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

Добавлено через 25 минут
Программа помимо текста, должна уметь:
Анализировать звук, картинку, (...радиоволну)
динамически создавать программный код исходя из мотива и правил
подключаться к устройствам, уметь обходить препятствия
учиться ! Прогнозировать события
...
Многие идеи связанные с этим наверняка уже есть в интернете
остается правильно все организовать

Добавлено через 31 минуту
Вот тебе первый шаг
текст для формы ...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Option Explicit
'   © FelixMacintosh (Антихакер32™)
Dim WithEvents i As CommandButton
Private Sub i_Click()
    CreateObject("SAPI.SpVoice").Speak i.Caption
End Sub
Private Sub Form_Load()
    Set i = Controls.Add("VB.CommandButton", "i")
    i.Caption = "Hello!": i.Move (ScaleWidth - i.Width) / 2, _
    (ScaleHeight - i.Height) / 2: i.Visible = True
End Sub
2
Модератор
10050 / 3895 / 884
Регистрация: 22.02.2013
Сообщений: 5,849
Записей в блоге: 79
24.04.2014, 15:57
Я тоже все никак не допишу прогу свою - виртуального композитора. Генерация музыки происходит исходя из алгоритма, который можно будет задавать произвольно, соответственно получая разную музыку. Также будет возможность изменения параметров уже созданной музыки (от смены инструмента до полной мутации). Изначально я писал в лоб (те тесты что в ссылках), но потом понял что для гибкости и улучшения генерации нужно делать немного по другому, разделяя по максимуму все аспекты в раздельные сущности, поэтому полностью стал переделывать все изначально. Вся музыка генерируется полностью, никаких заготовок и паттернов готовых, только алгоритмы.

http://promodj.com/Thetrik/tracks/2757679/Demo8Bit
http://promodj.com/Thetrik/tra... BitCreater
http://promodj.com/Thetrik/blo... it_creater
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
24.04.2014, 17:47
Лучший ответ Сообщение было отмечено gehh как решение

Решение

Вот пример синтактического анализа VB-текста
а что... тоже искуственный интелект ...

Модуль класса
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
Option Explicit
'
'   Анализ, синтактический разбор, и получение полной информации о групповом проекте
'   © FelixMacintosh (Антихакер32™)
'
Const r13 = vbCrLf, r59 = ";", r46 = ".", r47 = "/", r34 = """", r58 = ":", r32 = " "
 
Public Enum OperatorFlags '# = Деректива // $ = Декларация // % = Процедура // @ - Блок
    [@Выражение] = 0
    [$Option]
    [$DefType]
    [#Открывающий]
    [#Вариантный]
    [#Закрывающий]
    [#Константа]
    [$Константа]
    [$Открывающий]
    [$Закрывающий]
    [$Declare]
    [$Событие]
    [$Переменная]
    [%Открывающий] 'Процедурный открывающий
    [%Закрывающий]
    [@Открывающий]
    [@Вариантный]
    [@Закрывающий]
    [_Attribute] 'Скрытые параметры которые не отображаются в браузере
    [_Коментарий]
    [_Не_Лэйбл]
End Enum
 
Public Type tOperatorsInfo
    Flag As OperatorFlags
    OperatorLine As String
End Type
 
Public Type tLineInfo
    TabIndex As Long
    Label As String
    Line As String
    Operators() As tOperatorsInfo
    Coment As String
End Type
 
Public Type tModulInfo
    Name As String
    Attribute As String
    TextModule As String
    LinesInfo() As tLineInfo
End Type
 
Public Type tProjectInfo
    Name As String
    Version As String
    Company As String
    Modules() As tModulInfo
End Type
 
Public Type tGlobalInfo
    Projects() As tProjectInfo
End Type
 
Private Type myInfo
    OperatorKeys As Object
    OperatorItems As Object
    fso As Object
    mCDr As String
    bProcPart As Boolean
    IndexRepair As Long
    TabIndex As Long
    Back As Long
End Type
 
Dim t As myInfo, g As tGlobalInfo
Event AddingOperators(NewOperators As Variant, Flag As OperatorFlags)
Private Function OperatorsInfo(List, Line$, Label$) As tOperatorsInfo()
    '
    'Разбивает строку на операторы
    '
    Dim f&, j$(), j1$(), lab& '0 не проверен// 1 проверен // 2 назначен
    Dim mOperatorsInfo() As tOperatorsInfo
    j = List: Label = ""
    
    For f = 0 To UBound(j)
        t.TabIndex = t.TabIndex + t.Back: t.Back = 0 'Сброс
        j(f) = Trim$(j(f))
      
        If lab = 0 Then  'Проверяем лейбл это или нет
            If IsNumeric(j(f)) Then 'Если первый оператор число
                lab = 2: Label = j(f) & IIf(UBound(j) > 0, r58, vbNullString) 'Условия вставки двоеточия
            ElseIf f = 0 And UBound(j) > 0 And InStr(1, j(f), r32) = 0 _
            And InStr(1, j(f), r46) = 0 Then 'Проверяем лейбл это или нет
                lab = IIf(t.OperatorKeys.Exists(j(f)), 1, 2) '[Найден/Не найден] в списке операторов
                If lab = 2 Then Label = j(f) & ":" 'За строковым лейблом следующий оператор
            Else: lab = 1
                j1 = Split(j(f), , 2)
                If IsNumeric(j1(0)) Then 'Проверка если в первом операторе идет число
                    Label = j1(0): j(f) = j1(1)
                End If
            End If
        End If
        If lab <> 2 Then
            ReDim Preserve mOperatorsInfo(Ubn(mOperatorsInfo) + 1)
            With mOperatorsInfo(Ubn(mOperatorsInfo))
                .OperatorLine = j(f)
                .Flag = GetOpFlag(.OperatorLine, Line)
                'Определение для открывающих операторов
                Select Case .Flag
                Case [#Открывающий], [$Открывающий], [%Открывающий], [@Открывающий]
                    t.Back = 1
                Case Else
                    Select Case .Flag
                    Case [#Закрывающий], [$Закрывающий], [%Закрывающий], [@Закрывающий]
                        t.TabIndex = t.TabIndex - 1
                    Case [#Вариантный], [@Вариантный]
                        t.TabIndex = t.TabIndex - 1
                        t.Back = 1
                    End Select
                End Select
            End With
        End If
    Next
    OperatorsInfo = mOperatorsInfo
    
End Function
 
 
 
Public Function GetProject(FileName$) As tGlobalInfo
    '
    'Главная функция класса которая возвращает
    'полную информацию о проекте или группе проектов
    'Арг: Файловый путь с типом VBP // VBG
    '
    Erase g.Projects 'Обнуление прежних данных
    IO_Text (FileName)
    GetProject = g
    On Error GoTo 0
End Function
 
Private Function IO_Text(FileName$, Optional rec&)
    Const FindName = "Name="
    Const FindVersion = "MajorVer=/MinorVer=/RevisionVer="
    Const FindCompany = "VersionCompanyName="
    '//======
    Dim textFile$, j$(), j1$(), f&, f1&, AbsVBP$
    Dim Group() As tProjectInfo
    If rec = 0 Then t.mCDr = CurDir$
    On Error Resume Next '//= Игнорировать ошибки !
    Select Case LCase(t.fso.GetExtensionName(FileName$))
    Case "vbg"
        ChDir t.fso.GetParentFolderName(FileName$)
        textFile = t.fso.OpenTextFile(FileName).ReadAll
        j = Split(textFile, r13)
        For f = 0 To UBound(j)
            Err.Clear: AbsVBP = Trim$(Split(j(f), "=", 2)(1))
            If Err = 0 And t.fso.FileExists(AbsVBP) Then
                IO_Text t.fso.GetAbsolutePathName(AbsVBP), rec + 1
            End If
        Next
    Case "vbp"
        ChDir t.fso.GetParentFolderName(FileName$)
        textFile = t.fso.OpenTextFile(FileName).ReadAll
        j = Split(textFile, r13)
        j1 = Split(FindVersion, r47)
        ReDim Preserve g.Projects(Ubn(g.Projects) + 1)
        For f = 0 To UBound(j)
            Err.Clear: AbsVBP = Trim$(Split(j(f), "=", 2)(1))
            If InStr(1, AbsVBP, r59) Then AbsVBP = Trim$(Split(AbsVBP, r59, 2)(1))
            If t.fso.FileExists(AbsVBP) Then
                IO_Text t.fso.GetAbsolutePathName(AbsVBP), rec + 1
            End If
            With g.Projects(Ubn(g.Projects))
                For f1 = 0 To 2 'Добавление версии
                    If InStr(1, j(f), j1(f1), 1) = 1 Then
                        If f1 Then .Version = .Version & r46
                        .Version = .Version & Trim$(Mid$(j(f), Len(j1(f1)) + 1))
                    End If
                Next
                If InStr(1, j(f), FindName, 1) = 1 Then 'Добавление Name
                    .Name = Trim$(Mid$(j(f), Len(FindName) + 1))
                    .Name = Mid$(.Name, 2, Len(.Name) - 2) 'Без внутренних кавычек
                ElseIf InStr(1, j(f), FindCompany, 1) = 1 Then 'Добавление Company
                    .Company = Trim$(Mid$(j(f), Len(FindCompany) + 1))
                    .Company = Mid$(.Company, 2, Len(.Company) - 2) 'Без внутренних кавычек
                End If
            End With
        Next
    Case "frm", "bas", "cls", "ctl", "dsr", "dob"
        'Создание массива модулей
        If Ubn(g.Projects) < 0 Then ReDim Preserve g.Projects(Ubn(g.Projects) + 1) 'Если стартовым файлом был только модуль
        With g.Projects(Ubn(g.Projects))
            ReDim Preserve .Modules(Ubn(.Modules) + 1)
            .Modules(Ubn(.Modules)) = CreateModule(FileName)
        End With
    End Select
    If rec = 0 Then ChDir t.mCDr
End Function
 
Private Function CreateModule(FileName) As tModulInfo
    Const r = "Attribute VB_Name ="
    Dim AbsText As String, n&, j$(), b As Boolean
    AbsText = t.fso.OpenTextFile(FileName).ReadAll
    On Error Resume Next '//= Игнорировать ошибки !
    With CreateModule
        n = StartVbTx(AbsText)
        .Attribute = Left$(AbsText, n - 1)
        .TextModule = Mid$(AbsText, n)
        If Len(.Attribute) Then
            n = InStr(1, .Attribute, r)
            .Name = Split(Mid$(.Attribute, n), r34, 3)(1)
        End If
        .TextModule = Replace(.TextModule, " _" & r13, r32)
        j = Split(.TextModule, r13)
        .LinesInfo = LinesInfo_(j)
    End With
End Function
 
Private Function LinesInfo_(Lines() As String) As tLineInfo()
    Dim f&, TxLine$, lab&, hstr$, cmnt&, Coment$, Label$
    Dim myLinesInfo() As tLineInfo, b As Boolean
    On Error Resume Next '//= Игнорировать ошибки !
    With t
        .bProcPart = False
        .TabIndex = 0
    End With
    For f = 0 To UBound(Lines)
        TxLine = Trim$(Lines(f)): lab = 0 'Значение определение лейбла для новой строки
        If Len(TxLine) Then
            StringsHide TxLine, hstr 'Скрыть информацию в кавычках
            cmnt = InstrComent(TxLine)
            If cmnt Then Coment = Mid$(TxLine, cmnt): TxLine = Left$(TxLine, cmnt - 1) Else Coment = ""
            TxLine = ReDist(TxLine) 'Сокращение пробелов
            TxLine = Replace(TxLine, r58, vbCr) 'Замена двоеточия
            TxLine = Replace(TxLine, vbCr & r32, vbCr) 'Замена двоеточия и пробела
            StringsRepair TxLine, hstr 'Восстановить информацию в кавычках
            ReDim Preserve myLinesInfo(Ubn(myLinesInfo) + 1)
            With myLinesInfo(Ubn(myLinesInfo))
                .Operators = OperatorsInfo(Split(TxLine, vbCr), TxLine, Label$)
                .Label = Label
                .Coment = Coment
                StringsRepair .Coment, hstr  'Восстановить информацию в кавычках для коментария
                
                b = .Operators(0).Flag = [_Attribute]
                If Len(.Label) Or b Then
                    'Такой вот трюк не устанавливает индекс отступа _
                    если строка начинаеться с лейбла или атрибута
                Else: .TabIndex = t.TabIndex
                End If
                .Line = Lines(f)
            End With
        End If
    Next
    LinesInfo_ = myLinesInfo
End Function
 
Private Function GetOpFlag(Operator As String, Line$) As OperatorFlags
    '
    'Проверяет оператор по отдельным словам и возвращает значение OperatorFlags
    'Арг: Оператор // Строка целиком ! (без коментария)
    '
    Dim f&, j$(), sb$
    j = Split(Operator)
    For f = 0 To UBound(j)
        If f > 2 Then Exit For
        If f Then
            sb = sb & r32
        End If
        sb = sb & j(f)
        If sb = "If" Or sb = "#If" Then
            If StrComp(Right$(Line, 4), "Then", 1) = 0 Then
                GetOpFlag = t.OperatorKeys(sb): Exit For
            End If
        ElseIf t.OperatorKeys.Exists(sb) Then GetOpFlag = t.OperatorKeys(sb)
        End If
    Next
    
    If GetOpFlag > 0 And f > 1 Then
        If LCase(j(1)) = "as" Then
            'Такой глюк может случиться если какойто "умник" _
            в названиях переменных в блоке Type _
            будет использовать ключевые слова _
            например:  Type As String // или Next As Long
            GetOpFlag = [@Выражение] 'Сброс к обычному выражению
        End If
    End If
    If GetOpFlag = [%Открывающий] Then t.bProcPart = True
    
 
End Function
 
 
Private Sub StringsHide(tx$, hstr$)
    '
    'Прячет текст находящийся в кавычках
    '
    Dim f&, f1&, j$()
    j = Split(tx, r34)
    hstr = "": t.IndexRepair = 0
    For f = 1 To UBound(j) Step 2
        For f1 = 1 To Len(j(f))
            hstr = hstr & Mid$(j(f), f1, 1)
            Mid$(j(f), f1, 1) = vbNullChar
        Next
    Next
    tx = Join(j, r34)
End Sub
 
Private Sub StringsRepair(tx$, hstr$)
    '
    'Восстанавливает текст находящийся в кавычках
    '
    Dim n&: n = 1
    With t: Do
            n = InStr(n, tx, vbNullChar)
            If n Then
                .IndexRepair = .IndexRepair + 1
                Mid$(tx, n, 1) = Mid$(hstr, .IndexRepair, 1)
            End If
        Loop While n
    End With
End Sub
 
 
Private Function StartVbTx&(ByVal AbsText$)
    '
    'Возврат позиции начала видимого текста без атрибутов
    '
    Dim f&, I&, j$(), b As Boolean
    StartVbTx = 1
    j = Split(AbsText, r13)
 
    For f = 0 To UBound(j)
        I = InStr(1, j(f), "Attribute VB_", 1)
        If I = 1 And Not b Then
            b = True
        ElseIf I <> 1 And b Then Exit Function
        End If
        StartVbTx = StartVbTx + Len(j(f)) + 2
    Next
    If Not b Then StartVbTx = Sgn(Len(AbsText))
End Function
 
 
Public Sub AddOperators(OperKeys As Variant, item As OperatorFlags)
    '
    'Можно добавить оператор или список операторов под одним значением
    'для последующего синтактичесого анализа
    '
    Dim f&, DicItems As Object: On Error Resume Next '//= Игнорировать ошибки !
    Set DicItems = CreateObject("Scripting.Dictionary"): DicItems.CompareMode = 1
    If IsArray(OperKeys) Then
        For f = 0 To UBound(OperKeys)
            t.OperatorKeys.Add OperKeys(f), item
            DicItems.Add OperKeys(f), item
        Next
        t.OperatorItems.Add item, DicItems
    Else
        t.OperatorKeys.Add OperKeys, item
        DicItems.Add OperKeys, item
        t.OperatorItems.Add item, DicItems
    End If
End Sub
 
Private Sub CreateOperators()
    Dim s1$(), s2$(), s3$(), f1&, f2&, f3&, sb$
    Dim NewOperators As Variant, Flag As OperatorFlags
    If t.OperatorKeys Is Nothing Then
        Set t.OperatorKeys = CreateObject("Scripting.Dictionary"): t.OperatorKeys.CompareMode = 1
        Set t.OperatorItems = CreateObject("Scripting.Dictionary")
    Else: Exit Sub
    End If
    For f1 = 35 To 255
        Select Case f1
        Case 95
        Case 39 To 47, 57 To 63, 91 To 96, 123 To 126
            sb = sb & r13 & "Rem" & Chr(f1)
        End Select
    Next
    AddOperators Split("'" & r13 & "Rem " & sb, r13), [_Коментарий]
    AddOperators "Option", [$Option]
    AddOperators "Attribute", [_Attribute]
    '---------------------
    AddOperators "#If", [#Открывающий]
    AddOperators Split("#Else/#ElseIf", r47), [#Вариантный]
    AddOperators "#End If", [#Закрывающий]
    AddOperators "#Const", [#Константа]
    '-------------------------------------------------------------
    AddOperators Split("Public Const/Global Const", r47), [$Константа]
    AddOperators Split("Event/Public Event", r47), [$Событие]
    AddOperators Split("Public/Global", r47), [$Переменная]
    AddOperators Split("Public Declare/Private Declare/Declare", r47), [$Declare]
        
    s1 = Split("Public /Private /", r47)
    s2 = Split("Enum/Type", r47)
    sb = "" 'Опустошение сборки
    For f1 = 0 To UBound(s1): For f2 = 0 To UBound(s2)
            sb = sb & r47 & s1(f1) & s2(f2)
    Next: Next
    AddOperators Split(Mid$(sb, 2), r47), [$Открывающий]
    s1 = Split("Enum/Type", r47)
    sb = "" 'Опустошение сборки
    For f1 = 0 To UBound(s1)
        sb = sb & r47 & "End " & s1(f1)
    Next
    AddOperators Split(Mid$(sb, 2), r47), [$Закрывающий]
    '---------------------------------------------------------------
    s1 = Split("Public /Private /Friend /", r47)
    s2 = Split("Static /", r47)
    s3 = Split("Sub/Function/Property", r47)
    sb = "" 'Опустошение сборки
    For f1 = 0 To UBound(s1): For f2 = 0 To UBound(s2): For f3 = 0 To UBound(s3)
                sb = sb & r47 & s1(f1) & s2(f2) & s3(f3)
    Next: Next: Next
    AddOperators Split(Mid$(sb, 2), r47), [%Открывающий]
    s1 = Split("Sub/Function/Property", r47)
    sb = "" 'Опустошение сборки
    For f1 = 0 To UBound(s1)
        sb = sb & r47 & "End " & s1(f1)
    Next
    AddOperators Split(Mid$(sb, 2), r47), [%Закрывающий]
    AddOperators Split("Do/If/For/Select Case/With/While", r47), [@Открывающий]
    AddOperators Split("Else/ElseIf/Case", r47), [@Вариантный]
    AddOperators Split("End If/End Select/End With/Loop/Next/Wend", r47), [@Закрывающий]
    AddOperators Split("Close/End/Print/Randomize/Resume/Return/Stop", r47), [_Не_Лэйбл] '''Здесь слова исключающие что это лейбл
    AddOperators Split("DefBool/DefByte/DefInt/DefLng/DefCur/DefSng/DefDbl/DefDec/DefDate/DefStr/DefObj/DefVar", r47), [$DefType]
    RaiseEvent AddingOperators(NewOperators, Flag) 'Событие с возможностью добавления своих
    If Not IsEmpty(NewOperators) Then AddOperators NewOperators, Flag
End Sub
 
Private Sub Class_Initialize()
    Set t.fso = CreateObject("Scripting.FileSystemObject")
    CreateOperators
 
    
End Sub
 
 
Private Function InstrComent&(Line$)
    Dim s$, v, f&, max&, n&
    v = DicOperators([_Коментарий]).Keys
    max = Len(Line)
    For f = 0 To UBound(v): n = InStr(1, Line, v(f), 1)
        If n > 0 And n <= max Then max = n: InstrComent = max
        If n = 1 Then Exit For
    Next
End Function
 
Private Function ReDist$(ByVal tx As String)
    '
    'Reduce the distance
    'Заменить множество пробелов одним // d = сокращаемое значение
    '
    Const d = r32 & r32
    ReDist = Trim$(tx) '//Убрать также передние и задние пробелы
 
    While InStr(1, ReDist, d)
        ReDist = Replace(ReDist, d, r32)
    Wend
End Function
 
 
Private Function DicOperators(item As OperatorFlags) As Object
    Set DicOperators = t.OperatorItems(item)
End Function
 
Private Property Get Ubn&(Arr)
    Ubn = -1: On Error Resume Next: Ubn = UBound(Arr)
End Property

Не по теме:

Нет не так, ....
пять копеек к интелекту ))

Цитата Сообщение от gehh Посмотреть сообщение
Split и Join. Надо полагать, что в будущем
они нам здорово пригодятся.
там очень много таких использований ...

Успехов вам !

0
Заблокирован
25.04.2014, 05:47
gehh, Лучше сделай хорошую утилиту и бесплатную. Которая бы по звуку с микрофона работала с Windows, начиная от ввода текста, а затем и набора букв в любом приложении.
0
159 / 104 / 124
Регистрация: 01.04.2014
Сообщений: 466
Записей в блоге: 7
25.04.2014, 08:07  [ТС]
Спасибо за то, что заглянули в это тему.
Не хочу вас огорчать. Но работа со "звуком"
лежит вне сферы моих интересов. Иное дело
Текст и Графика. Но здесь меня просить не надо.
Если получится, то вы об этом узнаете!
С глубоким уважением
gehh
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2014, 08:07
Помогаю со студенческими работами здесь

Крестики нолики.Искуственный интелект
Добрый день ! Помогите додумать програму чтобы можно было играть с компьютером. include &lt;iostream&gt; char board = {}; void...

Искуственный интелект бота в игре Пакман
Делаю в питоне игру Пакман. Не знаю как прописать Искуственный Интелект(ИИ) призракам(ботам) что бы они могли самостоятельно выходить из...

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

Искуственный интелект в Visual Studio это реально?
Какие програмные оболочки можна использовать для систем искуственного интелекта? Windows Forms можна использовать, например, чтобы...

Искусственный интеллект
Чем принципиально отличается обучение модели Гроссберга-Карпентера от обучения многослойного перцептрона методом обратного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru