Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ОЛП.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
353 Кб
Скачать
☆

Организация меню:

clauses repeat.

Repeat:-repeat repeat clearwindow

Mmenu- makewindow (1,7,7,"текст",5,25,20,75)

write(“ 1. Graphics “ ), nl ,

write(“ Enter your choise : 1 – 8 “ ), nl,

readint( N ), N>0, N<9,

module(N), fail.

module(1) :- /* предикаты реализации графических задач */ , readchar(_).

30. Применение логических программ для решения технических задач.

Отличие процедур расчетов в логическом программировании на Турбо Прологе от обычных в том, что они выполняются с помощью предикатов. При этом для арифметических предикатов используется традиционная запись, нап­ример, у=х+Ь, а не сложить(х, Ь, у ). Следует помнить, что для вещественных чисел указанное равенство может быть невыполнимо в силу приближенного представления чисел в компьютере и в этом случае предикат может считаться условно истинным в том смысле, что левая и правая части выражения совпа­дают с достижимой в компьютере точностью.

domains

arg = real

predicates

funct(arg)

clauses

funct(X):-3<X,X<7, Y=ln(7)+sin(X)+X*X, write("Y=",Y).

funct(X):-1<X,X<=3, Y=sin(X)*sin(X)*sin(X)+ln(X)+exp(3), write("Y=",Y).

funct(X):-X=10, Y=exp(ln(2)*X)+log(X), write("Y=",Y).

domains rr=real

predicates I(rr,rr,rr) U(rr,rr,rr) Rob(rr,rr,rr) Rparal(rr,rr,rr) Rparal2(rr,rr,rr) Rposled(rr,rr,rr,rr)

goal menu.

clauses repeat. repeat:-repeat.

I(U,I,R):-I=U/R. U(U,I,R):-U=I*R.

Rob(R0,Rp3,R6):-R0=(Rp3*R6)/(Rp3+R6).

Rposled(Rp3,R3,Rp1,Rp2):-Rp3=Rp1+R3+Rp2.

Rparal(Rp1,R1,R2):-Rp1=(R1*R2)/(R1+R2).

Rparal2(Rp2,R4,R5):-Rp2=(R4*R5)/(R4+R5).

vvod1:-makewindow(2,7,9," Расчёт электрической цепи ",0,0,25,80),

cursor(1,5),write(" Введите основные параметры: "),

cursor(2,10),write(" U0= "),readreal(U0),

cursor(3,10),write(" R1= "),readreal(R1),

cursor(8,10),write(" R6= "),Readreal(R6),nl,

Rparal(Rp1,R1,R2), Rparal2(Rp2,R4,R5),

Rposled(Rp3,R3,Rp1,Rp2), Rob(R0,Rp3,R6),

I(U0,I0,R0), I(U0,I6,R6), I(U0,I3,Rp3), U(U3,I3,R3),

U(U1,I3,Rp1), I(U1,I1,R1), I(U1,I2,R2),

U(U2,I3,Rp2), I(U2,I4,R4), I(U2,I5,R5),

cursor(11,5),write(" Рассчитанные параметры: "),

cursor(12,10),write(" Входные U= ",U0," I= ",I0, " Rob= ",R0),

cursor(13,10),write(" На резисторе R1: U= ",U1," I= ",I1),

cursor(18,10),write(" На резисторе R6: U= ",U0," I= ",I6),

readln(_).

Расчёт резисторной схемы: U0=9, R1=2, R2=2, R3=1, R4=2, R5=2, R6=3.

Результат: I=6, I1=1,5, I2=1,5, I3=3, I4=1,5, I5=1,5, I6=3, U1=3,…, U7=3, Rob=1,5.

31. Моделирование логических схем на Прологе. Пример.

domains num,s=integer

predicates gen(s,s,s,s) sdv(s,s,s,s,s,s)

ii(num,num,num) ili(num,num,num) tr_rs(num,num,num,num) tr_t(num,num,num)

dc(num,num,num,num,num,num) no(num,num)

goal menu.

clauses repeat. repeat:-repeat.

/* X1,X2,Y */ ii(0,0,0). ii(1,0,0). ii(0,1,0). ii(1,1,1).

/* X1,X2,Y */ ili(0,0,0). ili(0,1,1). ili(1,0,1). ili(1,1,1).

/* S,R,Q0,Q1 */ tr_rs(0,0,0,0). tr_rs(0,0,1,1). tr_rs(0,1,0,0). tr_rs(0,1,1,0). tr_rs(1,0,0,1). tr_rs(1,0,1,1).

/* X,Q0,Q1 */ tr_t(0,0,0). tr_t(0,1,1). tr_t(1,0,1). tr_t(1,1,0).

/* X1,X2,Y1,Y2,Y3,Y4 */ dc(0,0,1,0,0,0). dc(0,1,0,1,0,0). dc(1,0,0,0,1,0). dc(1,1,0,0,0,1).

/* X,Y */ no(0,1). no(1,0).