Pascal - Функциональная логическая схема

Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

01 май 2008, 22:09

Добрый день. Подскажите пожалуйста как решить следующую задачу :

" Нужно написать программу которая строит функциональную логическую схему за структурной формулой. "

Можете пожалуйста объяснить как это должно выглядеть? С чего начать? Я просто не представляю как ето должно выглядеть, возможно где-то есть похожие примеры.

насколько я понял задание мне нужно написать програму которая будет рисовать коньюкцию, дизьюкцию, вообщем елементарные логические операции.
например вводиш A&B&C а программа должо рисовать (с помощью graf) чтото типа етого :
http://infologos.narod.ru/234.htm


заранее большое спасибо за помощь
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

02 май 2008, 00:16

Во-первых, спасибо вам, Hunto, за первую за уже долгое время интересную задачу в этой ветке форума! Честное слово, задачки типа "найти максимум в массиве", присылаемые школьниками и студентами-халявщиками, навязли в зубах.
Во-вторых, дайте по голове вашему преподавателю за криво поставленную задачу. Если бы такая задача ставилась не перед учеником, а перед программистом некоей конторы как проект за деньги, такой огрызок задания никто бы не принял. Постановка задачи растянулась бы страницы на 3 минимум, и все должно быть разжевано: начиная от того, как именно задавалась бы структурная формула, кончая тем, на каких же структурных элементах строить эту радость: на ключах, как показано на верхних рисунках по ссылке, или на логических элементах, как показано там же внизу.
В-третьих, скажите, пожалуйста, где находятся такие преподаватели, которые столь старательно учат студентов забивать гвозди микроскопом? Для решения этой задачи Паскаль с его библиотекой graph подходит едва ли не наихудшим образом. На том же Delphi все было бы гораздо симпатичнее. А если это задание дано для изучения упомянутой библиотеки, спросите своего преподавателя, если он водит машину, где он сдавал экзамен на права - в городе и на площадке, или на треках Формулы-1 и ралли Париж-Дакар? Более-менее такое задание оправдано только в качестве курсовой. И то - бред.
В-четвертых, непосредственно по самому заданию. Необходимо все же выяснить, на чем строить эту функциональную схему. Без этого дальнейшее обсуждение хода решения бессмысленно.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

02 май 2008, 12:11

Да преподаватель и сам, по-моему, не понимает как оно должно выглядеть, по крайней мере, объяснить конкретно он мне не смог.
Я думаю нужно делать так - как будет проще. Нижний вариант (по ссылке) по-моему выглядит более привлекательно
По поводу языка, задание нужно выполнять на Pascal или Cи , объектно-ориентированные языки запрещены, поэтому модуль graf будет использоваться в любом случае..
Только как это сделать я мало представляю.

p.s. Спасибо что откликнулись.
MOTOCoder
Сообщения: 542
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

02 май 2008, 20:01

Такое впечатление, что препод воспроизвел когда-то где-то услышанную задачу, и сам не понимает, что нужно сделать и как. При такой постановке задачи сложно даже понять, с какой стороны подступиться. Во-первых, как уже сказал Хыиуду, нужно описание формата входных данных, но даже зная формат, придется писать не хилый анализатор выражений. Если, конечно, сложность вводимой формулы ограничена чем-то в роде A&B^C, тогда еще можно обойтись несложным алгоритмом, а так придется писать что-то довольно сложное и громоздкое. Но в таком случае действительно непонятно, почему запрещено использовать Delphi и прочие оъектные языки.
Ни что так не ограничивает фантазию программиста, как компилятор...
Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

02 май 2008, 20:36

мне кажется что будет достаточно формул вида A&B или A&B|C
а программа должна строить чтото вроде етого
Изображение
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

03 май 2008, 00:34

Был бы еще Дельфи с нормальной работой с 1) изображениями, 2) классами - можно было бы делать так. А на Паскале, имхо, с плючами проще будет.
Имхо, один из вариантов делания - такой: находим последовательность выполнения логических операций (сначала, если не ошибаюсь, скобки, потом НЕ, И, ИЛИ. Каждое слагаемое будет иметь свой метод для рисования (например, одиночное слагаемое рисуется как __/ __), при этом в классе нужно хранить ширину и высоту получающегся рисунка. Потом описываются методы реализации операций. Например, для И - нарисовать первый компонент, справа от него второй. Или для ИЛИ - нарисовать первый компонент, снизу под ним второй, соединить их входы вертикальными линиями, от центра этих линий провести еще вход и выход налево и направо. Потом, проводя действия в известном порядке, заменяем, например А+В*С на А+D, где D=B*C, для него уже сформирована картинка и известна его ширина и высота.
Еще кстати, мнится мне, каждый кусок схемы, неважно, простой или сложный, должен иметь вход и выход (горизонтальные отрезки) посередине своей высоты. Чтобы потом не было торчащих отрезков проводов. Сумбурно разъяснил, но если что, могу расшифровать свое полуночное "несло" в аське.

Еще, если меня память не ошибает, все электронные логические схемы поголовно делаются только на элементах И-НЕ или (реже) ИЛИ-НЕ

И кстати, Turbo/Borland Pascal и C++ - вполне себе объектные языки, просто возможности графики там практически всегда ограничены режимом VGA - 640x480x16 цветов. Преподов-садистов, заставляющих использовать чистый Паскаль или чистый Си, я еще не видел. Хотя вру, видел - наш препод по Си в универе (с коих пор я Си и не люблю).
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
MOTOCoder
Сообщения: 542
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

03 май 2008, 00:58

Да в принципе возможности графики здесь не принципиальны - можно хоть просто черным на белом фоне нарисовать с разрешением 320*200. А если мало 640*480*16 - можно VESA привинтить, там хоть 1024*768*256. Пусть препод удивится :) .
Ни что так не ограничивает фантазию программиста, как компилятор...
Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

03 май 2008, 18:44

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

вы не встречали подобных исподников?
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

04 май 2008, 11:47

Ну, к примеру, есть у нас выражение A+B*(C+D). Пишем какой-нибудь лексический анализатор, который нам зажевывает выражение и выдает, что сначала надо выполнить C+D, потом B*F1, где F1=C+D, потом A+F2, где F2=B*(C+D)
Пишем процедуру, которая вписывает нам в заданный прямоугольник изображение ключа и рисует над ним буковку.

Первое - C+D. Оба - элементарные выражения. Поэтому сначала тупо в центре экрана строим прямоугольник, скажем, 100х50 и врисовываем в него ключ С. Потом - раз уж у нас сложение - прямо под ним строим еще один такой же и врисовываем в него ключ D. Потом соединяем попарно их входы и выходы, и от линии, соединяющей входы, посредине ее отводим еще отрезок в 20 пикселей влево, а от линии выходов - 20 пикселей вправо. Потом заносим в массив: элемент F1, ширина 140 пикселей, высота 100 пикселей, координаты такие-то.
Следующее действие: B*F1. В у нас свободно гуляющий ключ, а вот F1 уже нарисован, и девать нам его совершенно некуда. Так что ставим слева от F1 еще один прямоугольник 100x50, пихаем туда ключ В, записываем уже F2, ширина 240 пикселей, высота 100 пикселй, координаты такие-то
Теперь A*F2, F2 уже нарисован, А еще нет. Кладем сверху на прямоугольник F2 вместо уже знакомого 100х50 240х50 (чтобы одинаковы по ширине были), рисуем в нем ключ А, соединяем входы и выходы - схема готова
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

04 май 2008, 17:52

спасибо буду разбиратся, если все получится выложу ответ, может кому то пригодится
Ответить