Консультация № 184621
30.11.2011, 11:47
61.49 руб.
0 31 0
Здравствуйте!
Уважаемые эксперты
Необходимо написать программу для учебных целей, которая строит логические схемы, т.е.
Программа "Построитель логических схем"
Среда разработки (PascalABC.NET)
Что бы хотелось видеть? 2 объекта (массива объектов)
1)созданные объекты (логические элементы-И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ), которыми можно управлять и ими взаимодействовать,т.е собирать схему
Пользователь выбирает любой объект и помещает его на форму
2) соединительные провода (другой объект) , которые также пользователь соединяет с логическими элементами

Понятно.что всю программу я не заставляю никого писать
Мне нужна информация (листинг) ,сотрудничество, может какие-либо ссылки,литература

Спасибо за понимание!!!

Обсуждение

Неизвестный
30.11.2011, 12:38
общий
благодарю Вас)
давно
Старший Модератор
31795
6196
30.11.2011, 15:49
общий
Есть Конструктор логических схем, может он натолкнет Вас на идеи.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
30.11.2011, 21:07
общий
Адресаты:
спасибо, за информацию)))
давно
Старший Модератор
31795
6196
30.11.2011, 21:23
общий
Ещё не за что благодарить.

Я бы на Вашем месте обратил внимание на действительно крутую вещь - proteus.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
30.11.2011, 21:38
общий
Это ваш курсовой проэкт? или чисто вам нужы идеи и помощь в разработке данного ПО?если создавать свой аналог этой программы то это(по моим силам) отнимет достаточно долгое время....
Выкладывайте ваши идеи и то тчо вы успели уже в плане этого вопроса сделать.
Неизвестный
30.11.2011, 21:44
общий
Адресаты:
Спасибо,может быть в будующем обязательно обращаюсь
А тема это действительно интересная)))
Неизвестный
30.11.2011, 21:53
общий
30.11.2011, 21:53
Вы знаете,можно сказать и так,что курсовой-у меня на это есть около месяца
Да действительно идеи конечно есть
Я нашел неплохие классы(именно по Pascal) я вам дам посмотреть с ними
Я их хотел взять за основу, но применить и запустить их у меня не получилось
А так я этот язык PascalABC. NET в первый раз вижу, конечно писать на нем не очень то реально,но таковы требования
ПОка что создал форму с объектом PictureBox (из NET) и пробую его свойства-перемещения мышью, взаимодействие с другими
Но проблема в том,что я пока не умею правильно программировать, а именно ПРАВИЛО:
отдельно аналитическая часть, отдельно визуализация
а я хочу с этим PictureBox сразу что то делать
Помогите мне пожалуйста)
Если вы готовы со мной сотрудничать,я буду очень рад)

Все вопросы в личку!
Спасибо!!!
Неизвестный
30.11.2011, 21:55
общий
Евгений Сергеевич!
Вот классы и примеры-попробуйте у себя запустить их и посмотреть

С уважением,Виталий
Прикрепленные файлы:
24d71fea4551422aba180cf2b3a8bd6c.zip
Неизвестный
30.11.2011, 23:37
общий
при компиляции в делфи 7 выдает ошибку
Код:
[Fatal Error] kpLogElement.pas(55): File not found: 'kpPipeline.dcu'
[Fatal Error] kpLogElement.pas(55): File not found: 'kpPipeline.dcu'
[Fatal Error] kpLogElement.pas(55): File not found: 'kpPipeline.dcu'
[Fatal Error] kpLogElement.pas(55): File not found: 'kpPipeline.dcu'
[Fatal Error] kpLogElement.pas(55): File not found: 'kpPipeline.dcu'

Не все в этом примере было выложено автором....одного юнита не видит всетаки......
Но с основными pas работать можно(только с теми, которые не обращаются к даному 'kpPipeline.pas'

Неизвестный
30.11.2011, 23:56
общий
к сожалению, возможны вы правы, но без работающего модуля тяжело мне представить картину
кстати вот еще отдельно exe был тоже неплохой программы автора, забыл вам скинуть
только там сборка происходит не графически,как хотелось бы в данном моем случае, а в текстовом)
Посмотрите,пожалуйста
Прикрепленные файлы:
9aa0bb905c2601ae7487343266976f96.zip
Неизвестный
01.12.2011, 00:08
общий
Очень интересная игрушка я вам скажу.
Если будем разрабатывать с 0 то надо наметить план

1)Математика программы
2)Реализация
3)Визуализация проекта

Если делать графический способ построения логических схем, то нужно разработать модуль, который по событию на форме будет создавать нужный примитив на фоне.
Этот процесс можно еще назвать построением РКС(Рылейно-контактных схем). Я подумаю как можно реализовать генерацию графических обьктов на форме.
Неизвестный
01.12.2011, 10:17
общий
спасибо,я тоже буду держать вас в курсе о моих планах)))
давно
Старший Модератор
31795
6196
01.12.2011, 14:28
общий

На сайте К.Полякова есть модуль TkpPipeline.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
01.12.2011, 17:58
общий
да,тоже вижу отлично, с ним пробовали запустить????
Неизвестный
01.12.2011, 20:23
общий
Запустить запустил,работает даже редактор схемы,но вот пробовал включить сигнал (вылетела ошибка)
Думаю на основе данного класса надо сделать нечто подобное,чтоб время сэкономить

Вы извините,что я вас напрягаю,просто у меня в группе нет даже единомышленников,кто мог бы меня поддержать))))
Спасибо
давно
Старший Модератор
31795
6196
01.12.2011, 22:03
общий
01.12.2011, 22:06
Я не пробывал.
В принципе, для Вас имеет смысл только обратить внимание только на само описание класса, т.к.
1) это Ваша курсовая.
2) возможно она перерастет в дипломную.
3) совневаюсь, что преподаватель пропустит в курсовой какой либо нестандартный класс, написанный посторонним человеком.

Можно ещё десяток причин придумать, почему нужно начинать всё с нуля.

Я тут подумал над моделью программы:
Есть два объекта состоящих из полей:
Код:
Object
x,y,d_X,d_Y:integer;{для визуального отбражения}
hidden:boolean;{для визуального отображения}
image:iObject;{визуальный рисунок}
nInput:integer;{количество входов элемента}
nOutput:integer;{количество выходов элемента}
dInput:array[1..maxPoint]of bollean;{массив входных значений}
dOutput:array[1..maxPoint]of boolean;{массив входных значений}
lPointInput:arrray[1..maxPoint]of tPoint;{массив ссылок на элементы Point}
lPointOutput:arrray[1..maxPoint]of tPoint;{массив ссылок на элементы Point}
Logical;{метод формирующий массив выходных значений, на основании входных, т.е. выполняет логику элемента}

Point
x,y,d_X,d_Y:integer;{для визуального отображения}
hidden:boolean;{для визуального отображения}
value:bollean;{значение в точке}
Change:boolean;{признак изменения сисгнала}


Источником сигнала может быть только один элемент. Приемником сигнала может быть несколько элементов.

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

С помощью полей nInput и nOutput определяют максимальное количество входных и выходных выводов логического элемента. Т.е. метод Logical будет использовать эти значения, что бы не сканировать весь входной-выходной массивы dInput, dOutput(соответсвенно).
Массивы ссылок lPointInput и lPointOutput заполняются построителем схемы и определяют связи между элементами самой схемы.
Возможно следует добавить ещё поле Name, оно может пригодится для сохранения-загрузки уже набраной схемы, т.к. массивы ссылок представляют собой адреса в памяти, по которым расположен тот или иной объект. При сохранении самой схемы на диске они уже не будут правильными, т.к. не факт, что все её элементы попадут в тоже адресное пространство.

Итак работа. В любом элементе схемы изменяется состояние, соответсвенно изменяется признак Change элемента Point, а так же глобальная переменная Event, все элементы Object начинают сканировать элементы Ponit c помощью массива ссылок lPointInput в поиске Change:=true и соответсвенно заполнять массив dInput, при изменении любого из элементов входного массива- активизируется метод выполнения логики данного элемента, он заполняет выходной массив dOutput, а после этого с помощью массива ссылок lPointOutput проверяет-заполняет поле vallue и если новое значение не равно старому активирует статус Change и Event. Переключение схемы будет продолжатся, пока не будут обработаны все активированные поля Change.

Теперь об полях помеченных {для визуального отображения}
x,y,d_X,d_Y - координаты и размер элемента на схеме;
image - рисунок этого элемента;
hidden - признак отображения этого элемента на экране. Вполне возможно , что пользователю будет поставлена задача иследовать только несколько компонетов некоторой большой схемы, расположенные в разных местах. Он ставит на нужных элементах отображать, а остальные прячет, после этого начинает работу, наблюдая только нужную информацию и не отвлекаясь на меняющуюся ситуацию всей схемы.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
01.12.2011, 22:43
общий
Адресаты:
Спасибо Вам,нужно немного время,чтобы переварить вашу мысль
еще раз спасибо)))
Неизвестный
03.12.2011, 03:27
общий
так подумал и ничего больше в голову не пришло как создавать схемы на канве(ну это случай с делфи - насчет АБС не знаю ибо с графикой там не знакомился)...сегодн еще помучаю идеи и завтра отпишусь
Неизвестный
03.12.2011, 10:18
общий
спасибо,буду ждать))))
Неизвестный
05.12.2011, 21:25
общий
Да задача серьезная,я жду от вас новостей, я не знаю даже как правильно начать....
помогите,пожалуйста)
давно
Старший Модератор
31795
6196
08.12.2011, 12:24
общий
08.12.2011, 12:31
Продлил ещё вопрос.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
08.12.2011, 19:20
общий

У Вас получается. Помощь нужна?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
08.12.2011, 19:40
общий
Адресаты:
Увы,к сожалению,пока ничего не выходит)))
давно
Старший Модератор
31795
6196
08.12.2011, 20:16
общий
08.12.2011, 20:19
Цитата: 289029
Увы,к сожалению,пока ничего не выходит)))

Покажите, что у Вас уже есть.
Будем разбиратся, и ещё Юдина подождем, может у него что нить есть.

ps:было бы не плохо, если бы Вы нарисовали, как видете внешний вид программы:кнопки(где и какие), рабочие области и т.д.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
08.12.2011, 22:43
общий
Адресаты:
я говорю, у меня проблема со структурой проекта-не знаю как начать.....
давно
Старший Модератор
31795
6196
08.12.2011, 23:08
общий
Над проэктом можно работать в двух направлениях:от общего к деталям и от деталей к общему проэкту.


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

2)имеются работающие блоки на конкретном языке, эти блоки включаются в алгорим, после этого все это переводится на структурный уровень.

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

Завтра попробую выложить общую структуру проэкта, после этого будем обрабатывать детали.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
08.12.2011, 23:45
общий
Адресаты:
ок,спасибо
давно
Старший Модератор
31795
6196
10.12.2011, 01:30
общий
10.12.2011, 01:36

Задача делится на два этапа:
1)математическая модель проэкта;
2)визуальная модель программы.

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

1)Математическая модель, это то что должна делать Ваша программа.
Начнем:

Постановка задачи:
Проэкт "Конструктор логических схем"
Проэкт должен иметь возможность создания схемы, её редактирование, сохранение, загрузку ранее сохраненной схемы, проверку работоспособности схемы при различных входных параметрах и краткую справку.

Структура программы
Имеется несколько режимов работы программы, т.е. есть подобие "меню".
Приблизительно так:
[code h=200]program model184621;
type
tMC=^rMC;
rMC=record
name:string[20];
inp1,inp2:tMC;
out1:byte;
typ:char;
next:tMC;
end;
var
a:tMC;{голова списка}
z:string;{командная строка}

. . .
begin
a:=nil;
repeat
write('Command prompt:>');
readln(z);
case UpCase(z[1]) of
'A':Create;{создание нового элемента}
'B':SetLink;{изменение связи}
'C':SetFunc;{изменение функции элемента}
'D':SetData;{изменение состояния}
'E':Clear;{очистка}
'F':Save;{запись}
'G':Load;{загрузка}
'H',
'?':Help;{помощь}
'I':
{JKLMNOPQRSTUVWXY}
end;
until UpCase(z[1])='Z';{выход}
writeln('stop program');
readln;
end.[/code]

[b]Сразу оговорюсь: подсказывать буду, писать сам проэкт НЕТ. Это информация для Вас и Евгения Сергеивича.[/b]
Цитата: 324791
03.12.2011
Миронычев Виталий:
так подумал и ничего больше в голову не пришло как создавать схемы на канве(ну это случай с делфи - насчет АБС не знаю ибо с графикой там не знакомился)...сегодн еще помучаю идеи и завтра отпишусь


Уже 9-е. Наверное в канве запутался.
Не нужно пытатся обнять не подъемное. Создайте базу программы и потом доводите её по мелочам.


Менюшка(скан полуготового текстового варианта программы на ТР, если на работе не отвлекали было бы готово всё):


Управляется программа с помощью командной строки со следующей стркутурой:
Команда(1 символ)
<пробел> - разделитель
имя элемента(от 1 до 20 символов)
<пробел> - разделитель
дальше различия:
- исполняемая функция элемента;
- номер входа;
- новая исполняемая функция;
- новое текущее значение элемента.

только для команды изменения связей
<пробел> - разделитель
имя элемента, откуда берется информация(от 1 до 20 символов)


Отдельная группа команд работы с файлами:
Команда(1 символ)
<пробел> - разделитель
имя файла(от 1 до 8 символов) "." разширение(от 1 до 3 символов)

8:3 это стандартное разширение файлов DOS.

Ещё раз напомню Интерфейс программы это второстепенная строна. К основной структуре ВСЕГДА можно добавить элементы касающиеся визуальной строны.


Продолжим:
[i]Создание элемента:[/i]
[code h=200] procedure Create;
var
b:tMC;
begin
{input string:>A name:1..20 type:1}
delete(z,1,2);{удаляем команду и разделитель}
new(b);
b^.name:=copy(z,1,pos(' ',z)-1);
delete(z,1,pos(' ',z));{удаляем имя и разделитель}
b^.typ:=UpCase(z[1]);
b^.change:=false;
b^.inp1:=nil;
b^.inp2:=nil;
b^.out1:=0;
b^.next:=a;
a:=b;
end;[/code]
Код создает односвязаннй список:
nil <= D1 <= D2 <= D3 <= и т.д. <= DN <= A(голова списка)
Входные и выходные данные устанавливаются по умолчанию.
После этого с помощью команд B,C,D редактируются связи, начальные значения и сама логика элемента. Т.е. создается схема.
[code h=200] procedure SetLink;
var
b,c:tMC;
d:char;
begin
{input string:>B name:1..20 i(1|2) name:1..20}
delete(z,1,2);
b:=a;
while(b^.name<>copy(z,1,pos(' ',z)-1))or(b<>nil)do b:=b^.next;
if b<>nil then
begin
delete(z,1,pos(' ',z));
d:=UpCase(z[1]);
delete(z,1,2);
c:=a;
while(c^.name<>z)and(c<>nil)do c:=c^.next;
if c<>nil then
begin
case d of
'1':b^.inp1:=c;
'2':b^.inp2:=c;
end;
end else writeln('wrong name:',z);
end else writeln('wrong name:',copy(z,1,pos(' ',z)));
end;
procedure SetFunc;
var
b:tMC;
begin
{input string:>C name:1..20 newFunction:1}
delete(z,1,2);
b:=a;
while(b<>nil)and(b^.name<>copy(z,1,pos(' ',z)-1))do b:=b^.next;
if b<>nil then
begin
delete(z,1,pos(' ',z));
b^.typ:=z[1];
end else writeln('wrong name:',copy(z,1,pos(' ',z)));
end;
procedure SetData;
var
b:tMC;
begin
{input string:>D name:1..20 newData:(1|0)]}
delete(z,1,2);
b:=a;
while(b<>nil)and(b^.name<>copy(z,1,pos(' ',z)-1))do b:=b^.next;
if b<>nil then
begin
delete(z,1,pos(' ',z));
b^.out1:=ord(z[1])-ord('0');
b^.change:=true;
end else writeln('wrong name:',copy(z,1,pos(' ',z)));
end;[/code]
Практически эти четыре функции выполняют два условия задания:
Цитата: Зенченко Константин Николаевич
Проэкт должен иметь возможность создания схемы, её редактирование


Следующие два пункта выполняют ещё две процедуры:
[code h=200] procedure Save;
var
b:tMC;
c:text;
begin
{input string:>F FileName:1..8:1..3] save to file}
delete(z,1,2);
assign(c,z);
rewrite(c);
b:=a;
while b<>nil do
begin
write(c,b^.name,' ',b^.typ,' ');
if b^.inp1=nil then write(c,'none',' ')
else write(c,b^.inp1^.name,' ');
if b^.inp2=nil then writeln(c,'none')
else writeln(c,b^.inp2^.name);
b:=b^.next;
end;
close(c);
end;
procedure Load;
var
b,c:tMC;
d:text;
begin
{input string:>G FileName:1..8:1..3] load from file}
delete(z,1,2);
assign(d,z);
reset(d);
Clear;
a:=nil;
while not Eof(d)do
begin
new(b);
readln(d,z);
b^.name:=copy(z,1,pos(' ',z)-1);
delete(z,1,pos(' ',z));
b^.typ:=UpCase(z[1]);
b^.next:=a;
b^.change:=false;
b^.out1:=0;
a:=b;
end;
reset(d);
while not Eof(d)do
begin
readln(d,z);
b:=a;
while(b<>nil)and(b^.name<>copy(z,1,pos(' ',z)-1))do b:=b^.next;
delete(z,1,pos(' ',z)+2);
if copy(z,1,pos(' ',z))<>'none'then
begin
c:=a;
while(c^.name<>copy(z,1,pos(' ',z)-1))do c:=c^.next;
if c<>nil then b^.inp1:=c
else b^.inp1:=nil;
end else b^.inp1:=nil;
delete(z,1,pos(' ',z));
if z<>'none'then
begin
c:=a;
while(c<>nil)and(c^.name<>z)do c:=c^.next;
if c<>nil then b^.inp2:=c
else b^.inp2:=nil;
end else b^.inp2:=nil;
end;
close(d);
end;[/code]

Помощь и полная очистка памяти простые сами по себе:
[code h=200]
procedure Help;
begin
writeln(
'A-[A name:1..20 Function:1]-create new element',chr(10),chr(13),
'B-[B name:1..20 i(1|2) name:1..20] set new link',chr(10),chr(13),
'C-[C name:1..20 newFunction:1] set new fuction;',chr(10),chr(13),
'D-[D name:1..20 newData:(1|0)] set new data',chr(10),chr(13),
'E-clear all memory',chr(10),chr(13),
'F-[F FileName:1..8:1..3] save to file',chr(10),chr(13),
'G-[G FileName:1..8:1..3] load from file',chr(10),chr(13),
'H-this page',chr(10),chr(13),
'I-start job',chr(10),chr(13),
'JKLMNOPQRSTUVWXY-reserved',chr(10),chr(13),
'Z-exit');
end;
procedure Clear;
var
b:tMC;
begin
{E-clear all memory}
while a<>nil do
begin
b:=a;
a:=b^.next;
dispose(b);
end;
end;[/code]


Над процедурой JOB ещё колдую, поэтому не выкладываю полностью, только выполнение самой логики элемента:
[code h=200] begin
if b^.inp1<>nil then c:=b^.inp1^.out1;
if b^.inp2<>nil then d:=b^.inp2^.out1;
end;
case UpCase(z[1])of
'A':b^.out1:=f_AND(c,d);
'B':b^.out1:=f_ANDNOT(c,d);
'C':b^.out1:=f_NOT(c);
'D':b^.out1:=f_OR(c,d);
'E':b^.out1:=f_ORNOT(c,d);
'F':b^.out1:=f_XOR(c,d);
end;[/code]

Задание:
Цитата: 289029
логические элементы-И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ


Определенные рание в программе функции выполняют логику заданных элементов:
[code h=200]
function f_XOR(a,b:byte):byte;
begin
f_XOR:=a XOR b;
end;
function f_AND(a,b:byte):byte;
begin
f_AND:=a AND b;
end;
function f_OR(a,b:byte):byte;
begin
f_OR:=a or b;
end;
function f_NOT(a:byte):byte;
begin
f_NOT:=not a;
end;
function f_ANDNOT(a,b:byte):byte;
begin
f_ANDNOT:=not(a or b);
end;
function f_ORNOT(a,b:byte):byte;
begin
f_ORNOT:=not(a or b);
end;[/code]

Добавил "исключение ИЛИ(XOR)", это тоже есть базовый элемент уже.

Пока Всё!
сильно не пинайте могут быть ошибки
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
15.12.2011, 12:59
общий
Евгений Сергеевич, ответьте , пожалуйста, что Вы намерены делать с данным вопросом? Будете отвечать? Мысли есть?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
15.12.2011, 13:18
общий
Адресаты:
очень запутался в данном вопросе и к сожалению откажусь ответить.
Форма ответа