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

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

24 май 2008, 20:46

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

вот собственно что у меня получилось:

Код: Выделить всё

Program shem; 
Uses Graph, Crt; 
var gd,gm:integer; s,s1,s2,cr,inf,inf0:string; 
       f,n1,n2,n3,fn:string; 
       j,i:integer; 
       dx1,dx2,dy1,dy2,ly1,ly2,ly3,kx1,kx2,ky1,ky2,ey,k:integer; 

procedure inv(k,ly1,ly2,ly3:integer); 
begin 
if k=1 then begin 
rectangle (60,ly1,160,ly1+60); 
line      (160,ly1+30,220,ly1+30); 
line      (60,ly2,220,ly2); 
line      (60,ly3,220,ly3); 
end else if k=2 then begin 
rectangle (60,ly1,160,ly1+60); 
line      (160,ly1+30,220,ly1+30); 
rectangle (60,ly2-30,160,ly2+30); 
line      (160,ly2,220,ly2); 
line      (60,ly3,220,ly3); 
end else if k=3 then begin 
rectangle (60,ly1,160,ly1+60); 
line      (160,ly1+30,220,ly1+30); 
rectangle (60,ly2-30,160,ly2+30); 
line      (160,ly2,220,ly2); 
rectangle (60,ly3-30,160,ly3+30); 
line      (160,ly3,220,ly3); 
end; end; 

procedure disj(dx1,dy1,dx2,dy2:integer); 
begin 
rectangle (dx1,dy1,dx1+100,dy1+200); 
line      (dx1+100,dy1+100,dx1+160,dy1+100); 
line      (dx2,dy2,dx2+160,dy2); 
end; 

procedure konj(dx1,dy1,dx2,dy2:integer); 
begin 
rectangle (kx1,ky1,kx1+100,ky1+200); 
line      (kx1+100,ky1+100,kx1+160,ky1+100); 
line      (kx2,ky2,kx2+160,dy2); 
end; 

procedure line1(n1,n2,n3:string); 
begin 
settextstyle(3,0,2); 
line (0,140,60,140); 
OutTextXY (5,110,n1); 
line (0,260,60,260); 
OutTextXY (5,230,n2); 
line (0,380,60,380); 
OutTextXY (5,350,n3); 
end; 
procedure endline(k,y:integer;f:string); 
begin 
settextstyle(3,0,1); 
if (k>0) then 
line (540,y,640,y) 
else 
line (380,y,640,y); 
OutTextXY (545,y-30,f); 
end; 

begin 
{VVOD FORMULU} 
write ('             '); 
writeln ('| & - KONUNKCIYA ; v - DIZUNKCIYA ; ! - INVERSIYA |'); 
write ('             '); 
writeln ('|                  PRIMER:   A&BvC                |'); 
write ('             '); 
writeln ('|_________________________________________________|'); 
writeln; writeln ('Vvedite formulu:'); readln (f); 
{end VVOD} 

{Peremennue} 
j:=1; for i:=1 to length(f) 
do  begin 
if (f[i]<>'!')and(f[i]<>'V')and(f[i]<>'&')and(f[i]<>'v') 
then begin 
fn[j]:=f[i]; j:=j+1; 
end;end; 
n1:=fn[1]; n2:=fn[2]; n3:=fn[3]; 
{end peremennue} 

{inversiya} 
for i:=1 to length(f) 
do  begin 
if (f[i]='!') then begin k:=k+1; 
  if (f[i+1]=n1) then begin 
  ly1:=110; ly2:=260; ly3:=380; end 
  else if (f[i+1]=n2) then begin 
  ly1:=230; ly2:=140; ly3:=380;  end 
  else if (f[i+1]=n3) then begin 
  ly1:=350; ly2:=260; ly3:=140;  end; 
end;end; 
{end inversiya} 

{konjunkciya} 
for i:=1 to length(f) 
do  begin 
if (f[i]='&') then begin 
  if (f[i+1]=n2)or(f[i+2]=n2) then begin 
  ky1:=100; ky2:=380;  end 
  else if (f[i+1]=n3)or(f[i+2]=n3) then begin 
  ky1:=220;  ky2:=140   end; 
if (k>0) then begin kx1:=220; kx2:=220; end 
else begin kx1:=60; kx2:=60; end; 
end;end; 
{end konjunkciya} 

{disjunkciya} 
for i:=1 to length(f) 
do  begin 
if (f[i]='v')or(F[i]='V') then begin 
  if (f[i+1]=n2)or(f[i+2]=n2) then begin 
  dy1:=130; dy2:=380; ey:=230; end 
  else if (f[i+1]=n3)or(f[i+2]=n3) then begin 
  dy1:=190;  dy2:=140; ey:=290; end; 
if (k>0) then begin dx1:=380; dx2:=-200; end 
else begin dx1:=220; dx2:=-200; end; 
end;end; 

{GLAVNAYYA CHAST ANALIZATORA} 

gd:=9; gm:=2; 
InitGraph (gd,gm, 'C:\Apps\tp\bgi'); 
If GraphResult = 0 then begin 
{interface} 
cr:='Hunter'; inf0:='Uslovnie oboznacheniya:'; 
inf:='& - KONUNKCIYA ; V - DIZUNKCIYA ; ! - INVERSIYA'; 
settextstyle(2,0,0);  setcolor (7); OutTextXY (518,470,cr); 
setfillstyle(1,8); Bar (120,10,520,50); 
settextstyle(0,0,0); setcolor (15); 
OutTextXY (135,35,inf); OutTextXY (230,16,inf0); 
{end of interface} 

line1  (n1,n2,n3); 
if k>0 then 
inv    (k,ly1,ly2,ly3); 

disj   (dx1,dy1,dx2,dy2); 
konj (kx1,ky1,kx2,ky2); 
endline (k,ey,f); 

readkey; 
closeGraph; 
end else begin 
writeln ('Oshibka pri inicializacii grafiki'); readln; 
end; end. 
осталось добавить знаки действия в квадратики, только проблема в том что она не работает с формулами A&B&C и AvBvC
не подскажите как исправить?
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

25 май 2008, 13:05

ВСЕГО ТРИ ПЕРЕМЕННЫЕ БЕЗ СКОБОК???
Да это просто праздник какой-то!
Считываем в заданной схеме количество И и ИЛИ.
Два И - три ключа один за другим
Два ИЛИ - три ключа один над другим
И и ИЛИ - один ключ справа или слева, два других "этажеркой", потом расставить над ними буковки. Тут даже анализатор не нужен.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

25 май 2008, 20:32

я сделал немножко не так, ключ всегда один независемо, от операции и в ключе пишется знак операции, + идет растановка по приоритетам

1.инверсия 2. коньюнкция (и) 3.дизьюнкция (или)

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

26 май 2008, 11:22

А если инверсия - в тот же прямоугольничек слева вписывать блок с инверсией. А остальное - на ваше усмотрение.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
airyashov
Сообщения: 416
Зарегистрирован: 02 ноя 2007, 10:31

26 май 2008, 11:54

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

26 май 2008, 14:14

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

26 май 2008, 20:21

OFFTOPIC:

Подскажите пожалуйста как сделать скриншот в графическом режиме ?! (режим вывода результатов graf)
MOTOCoder
Сообщения: 542
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

26 май 2008, 20:33

Hunto писал(а):OFFTOPIC:

Подскажите пожалуйста как сделать скриншот в графическом режиме ?! (режим вывода результатов graf)


Больная тема...
http://forum.developing.ru/showthread.php?t=14131
Ни что так не ограничивает фантазию программиста, как компилятор...
Hunto
Сообщения: 10
Зарегистрирован: 01 май 2008, 22:02

26 май 2008, 21:16

спасибо с помощью модуля все получилось
Ответить