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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2014, 16:39   #11
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

да, программа должна создавать исходники (ну или что-то типа) из которых потом я буду делать полноценную программу. Таким образом для каждой таблицы (или набора таблиц) должна быть отдельная программа, такое задание.
fanlis вне форума Ответить с цитированием
Старый 14.02.2014, 10:04   #12
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Наверное какую-то нерешаемую задачу я поставил...
fanlis вне форума Ответить с цитированием
Старый 14.02.2014, 10:35   #13
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Вот такие программы должна генерировать моя программа, на основе переданной ей таблицы (двумерного массива). Но, повторюсь, сделать один универсальный алгоритм нельзя, потому что, например, может быть, что функция F0 будет выполняться 5 минут и если вызывать ее в цикле много раз, это будет очень долго.
Если функции являются константными (НЕ ЗАВИСЯЩИМИ от положения в таблице (от i, j). То да они в любом случае считаются ОДИН раз до цикла.РЕЗУЛЬТАТ запоминается в переменную (R0, R1)или массивом результатов(REZ).
Код:
REZ[0]:=F0(....
REZ[1]:=F1(....
//один раз считаем значения функций
И внутри цикла мы быстро и легко пользуемся "универсальным генератором"
Код:
for i:=0 to x
for j:=0 to y
  tab[i,j]:=REZ[ val[i,j] ];// много раз пользуемся этими результатами
Если же значения функций зависят от позиции (oт i,j), то их в любом случае придется считать каждый раз. Хотя и здесь можно придумать оптимизацию (расширить массив REZ).
Но оптимизация имеет смысл если этими результатами мы будем пользоваться более одного раза за "генерацию" таблицы.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.02.2014 в 10:41.
evg_m вне форума Ответить с цитированием
Старый 14.02.2014, 11:24   #14
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
Наверное какую-то нерешаемую задачу я поставил...
Нет нерешаемых задач. Правильно посталенный вопрос, уже половина решения.
Совершенно непонятно:

1. Как (чем) генерируются эти таблицы?
2. Для чего нужена программа, составленная по этим таблицам?
3. Какие выходные данные этой программы?
4. Можо-ли преобразовывать саму таблицу?

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

Конкретнее, пожалуйста.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.02.2014, 12:13   #15
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Нужно из сферического куба, состоящего из вакуумных таблиц, получить виртуальный код и распечатав, выбросить на помойку.
Очень точное определение топика. Вместо поэм на свободную тему желательно предоставить исходник, и результат с задачей из первого получить второе. Короче коротко, сжато, самую суть!
doktor255 вне форума Ответить с цитированием
Старый 14.02.2014, 13:33   #16
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Очень точное определение топика. Вместо поэм на свободную тему желательно предоставить исходник, и результат с задачей из первого получить второе. Короче коротко, сжато, самую суть!
Трудно поставить вопрос без подробнейшего объяснения, которое займет не одну страницу. Нет исходника, потому что проблема не в коде, а вообще в подходе к этой проблеме. То что я накодил, похоже на бред пьяного школьника, лишено всякой систематизации и нет смысла это читать, к тому же все эти мои эксперименты имею уже большой объем кода.

Попробую четко сформулировать задачу.
Некие люди разрабатывают программный продукт, а так же таблицы для его тестирования. У этого продукта, а так же таблиц есть определенный стандарт. Что это за продукт, я не знаю, знаю только, что это связано как-то с микроэлектроникой. Мне дают dll, из которой я могу вызывать различные процедуры. Я должен написать программу для тестирования программного продукта, используя предоставленные мне таблицы и набор жестких правил, используя процедуры из dll.
С помощью этих процедур я задаю определенные настройки продукта, а затем я должен выполнить набор тестов из таблицы. Каждая строка в таблице - это один тест. каждый столбец - это определенная переменная, имеющая свой номер (по номеру столбца). Устанавливать эти переменные я могу с помощью функций:
Set0(i: integer) - устанавливает переменную с номером i в 0,
Set1(i: integer) - устанавливает переменную с номером i в 1,
и других.
Т.е. если у меня в таблице записана строка "0 1 0", то я должен написать следующее: Set0(1); Set1(2); Set0(3); Последовательность задания переменных не важна. После этого я вызываю функцию Creator из dll и получаю результат. Далее я провожу следующий тест (следующую строку таблицы) и т.д.
Процедуры Set тратят определенное время на выполнение (которым нельзя пренебречь).
Моя задача состоит в том, чтобы, во-первых, запрограммировать тесты так, чтобы они тратили наименьшее кол-во времени, во-вторых, программа должна иметь минимальный размер. Собственно я нахожу наиболее оптимальное соотношение между временем и размером.
Все это входит в мою работу.
Я же хочу написать программный продукт, который будет программировать наборы тестов по таблицам за меня. Причем учитывая то, что мне нужно сдавать мои программы вместе с их исходниками, то программный продукт должен в общем-то генерировать исходники.
Что касается изменения самой таблицы, то этого делать нельзя, однако я могу пойти на определенные хитрости, например, если есть такой тест:
"0 0 0 0 1 0", то я могу написать следующий код:
Код:
for i:=1 to 6 do
  Set0(i);
Set1(5);
Creator;
при этом будет немного увеличено время выполнения (потому что переменная 5 устанавливается дважды), однако это сократит код самой программы.
fanlis вне форума Ответить с цитированием
Старый 14.02.2014, 13:37   #17
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Моя задача состоит в том, чтобы, во-первых, запрограммировать тесты так, чтобы они тратили наименьшее кол-во времени
Используй многопоточность.
doktor255 вне форума Ответить с цитированием
Старый 14.02.2014, 13:40   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если вы собираетесь генерировать исходники, то зачем Вам вообще в них циклы?!?

например, для таблицы
"0 0 0 0 1 0"
получите код:
Код:
Set0(1);
Set0(2);
Set0(3);
Set0(4);
Set1(5);
Set0(6);
вот и всё. Оптимально по скорости выполнения и быстродействию, по алгоритмам генерации тоже всё проще некуда. Единственный минус - размер исходного кода. Но в остальном - всё Good!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2014, 13:54   #19
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Используй многопоточность.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
если вы собираетесь генерировать исходники, то зачем Вам вообще в них циклы?!?

например, для таблицы
"0 0 0 0 1 0"
получите код:
Код:
Set0(1);
Set0(2);
Set0(3);
Set0(4);
Set1(5);
Set0(6);
вот и всё. Оптимально по скорости выполнения и быстродействию, по алгоритмам генерации тоже всё проще некуда. Единственный минус - размер исходного кода. Но в остальном - всё Good!
В том-то все и дело, что есть требование по скорости и размеру кода. Мало того, что я сдаю код в распечатанном виде, так вроде как его пропускают через специальный компилятор и зашивают в микросхему, ну или как-то так. Хотя я могу и ошибаться. Но в любом случае многопоточность не пойдет, потому что этот код вполне возможно будет исполняться где-то еще, я имею на компьютерах другой архитектуры, или как я предположил, в виде железа. А представляете таблицу 25х80 или еще больше? И таких таблиц несколько...
Исходник-то я хочу генерировать, чтобы сократить свое время и трудозатраты, а сдавать программу-то мне как будто я ее написал.
fanlis вне форума Ответить с цитированием
Старый 14.02.2014, 14:02   #20
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
Но в любом случае многопоточность не пойдет, потому что этот код вполне возможно будет исполняться где-то еще
То есть ты решаешь задачу, не зная где она будет исполнятся? Это то же самое что пытаться ходить без ног. Уточняй условия выполнения, архитектуру, и т.д. И вообще я не понимаю, что значит другая архитектура? Делфи дружит с X32, X64, и ARM архитектурой процессоров (все поддерживают многопоточность). А если предполагается использование иной архитектуры, то и делфи тут не при чём.
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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