Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2014, 12:08   #1
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
Вопрос Программа для написания программ

Здравствуйте! Бьюсь над темой уже много времени, но пока ничего путного не выходит. Нужны умные мысли
Не знаю как точно сформулировать то, что мне нужно, поэтому проведу аналогию. Есть допустим какое-то электронное устройство. На вход я подаю какие-то сигналы, на выходе получаю тоже сигналы. Есть таблица, которая проверяет работоспособность этого устройства: столбцы ее - это входные сигналы, строки - тесты. К примеру таблица 10х20 - подаю 10 сигналов на входы устройства, смотрю результат и так 20 раз (20 тестов). Задача состоит в том, чтобы запрограммировать эту таблицу. Это можно сделать разными способами, самым простым из которых является цикл от 1 до 20 и в нем цикл от 1 до 10. Но в разных частных случаях можно применить разные способы, например, если в одном из столбцов сигнал одинаковый и не меняется, то нет смысла постоянно задавать его в цикле, а можно задать в начале один раз. Случаев таких много и когда я вижу таблицу, я вижу, как лучше написать программу.
Проблема в том, что нужно написать программу, которая бы писала программу (на delphi) для программирования таких таблиц. Т.е. чтобы она как-то анализировала таблицу и находила оптимальный метод ее реализации.
Я просто никак не придумаю, в каком направлении мыслить. Т.е. я не спрашиваю конкретной реализации, а просто как в общем можно это сделать.
Были мысли о нейронных сетях, но изучать там много и не уверен что в этом есть смысл.
fanlis вне форума Ответить с цитированием
Старый 13.02.2014, 12:18   #2
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Если в одной строке все символы одинаковые, то цикл ты ни как не обойдёшь, потому что чтоб убедиться, что все символы одинаковы, необходимо их проверить опять же в цикле.
P.S. Что за устройства программируются? Микроконтроллеры? Или это учебная задача?
doktor255 вне форума Ответить с цитированием
Старый 13.02.2014, 12:42   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Т.е. чтобы она как-то анализировала таблицу и находила оптимальный метод ее реализации.
1. программа должна посмотреть на уже заданную таблицу и построить такую же таблицу, чтобы передать ее на тестирование?
не проще ли просто передать исходную?

2. или же надо построить генератор таблицы в котором можно указывать правила генерации строк:
  • этот столбец постоянный.
  • этот столбец меняется от 1 до 20 с шагом 3
  • этот столбец для каждого значения из предыдущего (указанного) столбца меняется от 3 до 18 с шагом 1
  • другие правила
тоже самое вы делаете когда пишете циклы.
Но вот беда ... правила оказываются "зашиты" в программу, и ее каждый раз надо переделывать.

проблема в том чтобы придумать непротиворечивые и однозначные правила описания (свой "язык").

3. или же вообще программа смотрит на таблицу и ...
составляет правила самостоятельно.
в этом случае боюсь без ИИ не обойтись.
Цитата:
Были мысли о нейронных сетях, но изучать там много и не уверен что в этом есть смысл.
нейронные сети вполне уместны для построения ИИ как генератора правил.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.02.2014, 13:00   #4
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
Здравствуйте! Бьюсь над темой уже много времени, но пока ничего путного не выходит. Нужны умные мысли
...
Судя по всему, Вам нужна какая то экспертная система.
Писать на Delphi в одиночку - неподъемная задача, утонете в мелочах.
Нужен язык более высокого уровня абстракций. Что-то типа, как 1с
для бухгалтерии.

А чтобы понять, что вам нужно начните хотя бы с готового Excel с макросами и всякими формулами. А там уже видно будет.
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Старый 13.02.2014, 13:29   #5
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

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

Приведу пример. Есть таблица, например:
... 1 2 3 4 5 6
1. 1 0 0 0 0 0
2. 0 1 0 0 0 0
3. 0 0 1 0 0 0
4. 0 0 0 1 0 0
5. 0 0 0 0 1 0
Первая строка таблицы - шапка.

Допустим, 0 означает вызов функции F0, 1 - функции F1.
Я вижу таблицу и пишу такую программу (на delphi):

//первый тест
F0(6);
F1(1);
for i:=2 to 5 do
F0(i);
//остальные тесты
for j:=1 to 4 do
begin
F0(i);
F1(i+1);
end;

В этой таблице есть определенный порядок. Если цифры в таблице не имеют порядка расположены хаотично (те же нули и единицы), то программа будет выглядеть так:

for j:=1 to 5 do
for i:=1 to 6 do
begin
if tabl[i,j]=0 then F0(j);
if tabl[i,j]=1 then F1(j);
end

где tabl - это двумерный массив с таблицей

Вот такие программы должна генерировать моя программа, на основе переданной ей таблицы (двумерного массива). Но, повторюсь, сделать один универсальный алгоритм нельзя, потому что, например, может быть, что функция F0 будет выполняться 5 минут и если вызывать ее в цикле много раз, это будет очень долго.

Цитата:
P.S. Что за устройства программируются? Микроконтроллеры? Или это учебная задача?
это не учебная задача, но тут ничего не программируется, просто удачная аналогия.

В общем-то время от времени мне приходится на каждую таблицу писать программку и было бы не плохо, если бы введя таблицу это можно было сделать автоматически. Опять же задача представляет для меня еще и обучающий интерес.
fanlis вне форума Ответить с цитированием
Старый 13.02.2014, 13:52   #6
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
3. или же вообще программа смотрит на таблицу и ...
составляет правила самостоятельно.
в этом случае боюсь без ИИ не обойтись.
Мне кажется это наиболее подходит, почему я и подумал про нейронные сети.
Если так, тогда может кто-то подскажет... материалы, которые можно быстренько изучить и что-то написать, потому что как я понимаю книг по нейронным сетям написано уйма и прочитать и изучить книгу (или несколько книг) займет довольно много времени. Я не прошу искать для меня книги, но может кто-то сталкивался с подобным и есть какие-то материалы.

А может можно решить проблему как-то проще, без ИИ. Я пробовал делать так, чтобы программа искала какие-то часто встречающиеся частные случаи в таблицах и реализовывала их, но это опять же частные случаи и эти случаи могут на чуть-чуть отличаться и данный алгоритм к ним уже не применим.
fanlis вне форума Ответить с цитированием
Старый 13.02.2014, 14:33   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Цитата:
3. или же вообще программа смотрит на таблицу и ...
составляет правила самостоятельно.
в этом случае боюсь без ИИ не обойтись.
Мне кажется это наиболее подходит, почему я и подумал про нейронные сети.
итак предположим у нас есть эта программа.
дали ей таблицу,
она составила правила построения ДАННОЙ таблицы,
построила по ним ЭТУ же таблицу и....?
смотри пункт 1. если есть исходная зачем еще одна точная копия первой?

Где та часть в которую вмешивается человек (или программа) в результате чего получается НОВАЯ таблица?
где ПРАВИЛА для внесения изменений в таблицу?

может не надо решать универсальную задачу?
Итак сейчас есть определенное число таблиц, для которых надо составить правила(написать генератор).

Сколько их (различных гипотетических генераторов для ИМЕЮЩИХСЯ таблиц)? (5, 10, 50, 100, 500, 1000)
какое число таблиц из числа имеющихся могло бы быть получено на ОДНОМ и том же генераторе (наборе правил) ? (1, 2, 10, 10000)
Как часто МОГУТ появляться таблицы для которых еще нет генератора? (5 сек, 5 мин, 5 час, 5 дней )
Откуда вообще берутся исходные таблицы(может там уже и есть искомый генератор).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.02.2014 в 14:51.
evg_m вне форума Ответить с цитированием
Старый 13.02.2014, 15:34   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

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

Этим занимается дискретная математика - там есть методы сверток логических функций, а также их привидения к различным формам, например: http://ru.wikipedia.org/wiki/%CA%EE%...F4%EE%F0%EC%E0
В частности там же есть методы позволяющие автоматически упрощать Ваши таблицы (например исключать входные сигналы, которые не влияют на решение). Все это жутко интересно и не всегда понятно с первого раза. Поэтому придется много читать и учить.
Еще пример: http://ru.wikipedia.org/wiki/%D0%A1%...80%D0%BC%D0%B0
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.02.2014, 15:44   #9
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Может вы меня не совсем верно поняли. Нужно сделать не таблицу на основе таблицы, а программу на основе таблицы, как я написал в примерах в предыдущем сообщении. Но эту программу (которая на основе таблицы) должен написать не я, а другая программа (которую я и пытаюсь разработать). Таким образом я разрабатываю программу (назовем ее проектом, чтобы не путаться), в который на вход я передаю таблицу, а на выходе получаю программный код на delphi.

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

Цитата:
Итак сейчас есть определенное число таблиц, для которых надо составить правила(написать генератор).
генератор программ (программного кода).

Цитата:
Сколько их (различных гипотетических генераторов для ИМЕЮЩИХСЯ таблиц)? (5, 10, 50, 100, 500, 1000)
я так понимаю, проекту нужно дать несколько алгоритмов (это и есть правила?), по которым он мог бы генерировать программный код. Он должен подобрать наиболее оптимальный алгоритм или же разбить таблицу на части и применить несколько алгоритмов. Если речь заходит от обучении, то возможно проект сможет сам составить такие алгоритмы.
Генератор я так понимаю один... Или что вы имеете в виду?

Цитата:
какое число таблиц из числа имеющихся могло бы быть получено на ОДНОМ и том же генераторе (наборе правил) ? (1, 2, 10, 10000)
таблицы в основном все похожи по общему построению, однако бывают исключения и бывают отличия. Я могу сам проанализировать имеющиеся таблицы и задать правила. Все зависит от жесткости правил. Пока что я не знаю как формулировать нежесткие правила. Т.е. я могу на основе одной таблицы (частный случай) придумать правило и этот частный случай может повториться... ну 10 раз (10 таблиц), в зависимости от случая может 20-30. Но если он будет чуток изменен, то правило уже не применится. Я как делал. Рассматривал несколько таблиц, находил в них одинаковые блоки (сигнатуры?) и придумывал алгоритм для обработки этого блока. Но получается сколько частных случаев, столько и разных алгоритмов.
fanlis вне форума Ответить с цитированием
Старый 13.02.2014, 15:52   #10
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
Может вы меня не совсем верно поняли. Нужно сделать не таблицу на основе таблицы, а программу на основе таблицы, как я написал в примерах в предыдущем сообщении. Но эту программу (которая на основе таблицы) должен написать не я, а другая программа (которую я и пытаюсь разработать). ...
Т.е. программа будет и исходники формировать и их потом компилировать?
Или как?
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищется програмист для написания 2х простых программ DasGluckk Фриланс 3 17.11.2010 13:02
ПО для написания программ на JS jetyb JavaScript, Ajax 8 17.11.2010 06:01
литература для написания программ для at89c5132 wanes101 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 23.08.2010 11:21
Выбор технологии для написания программ JamS007 Общие вопросы C/C++ 5 24.05.2009 16:44
текстовые редакторы для написания и редактирования программ still_alive Свободное общение 2 22.12.2007 11:25