Процедурные функции на языке CLIPS

Содержание

Слайд 2

Процедурные функции

Процедурные функции

Слайд 3

Процедурные функции

Процедурные функции

Слайд 4

Процедурные функции Диапазон в функции LOOP задается следующим образом: Наибольшее значение

Процедурные функции

Диапазон в функции LOOP задается следующим
образом:
Наибольшее значение индекса;
(name min

max), где
name - имя_переменной_цикла
min - минимальное_значение_индекса
max - максимальное_значение_индекса;
3) (name max)
min, max – целочисленные выражения.
Слайд 5

Пример использования функции if-then -else Пусть требуется вычислить функцию f1 в зависимости от условия.

Пример использования функции if-then -else

Пусть требуется вычислить функцию f1 в зависимости

от условия.
Слайд 6

Определение функции f1 (deffunction f1(?a ?b) (if (or (not (numberp ?a))

Определение функции f1

(deffunction f1(?a ?b)
(if (or (not (numberp ?a)) (not (numberp

?b))) then
(printout t "Error a or b" clrf)
else
( if (> ?a ?b)
then (- (* ?a ?a) (* ?b ?b))
else (+ (* ?a ?a) (* ?b ?b))
)
)
)
Слайд 7

Выполнение функции f1

Выполнение функции f1

Слайд 8

Пример функции while Пусть требуется вычислить сумму:

Пример функции while

Пусть требуется вычислить сумму:

Слайд 9

Пример использования функции while (deffunction summa(?a ?limit) (bind ?i 1) (bind

Пример использования функции while

(deffunction summa(?a ?limit)
(bind ?i 1)
(bind ?s 0)

(while (<= ?i ?limit ) do
(bind ?s (+ ?s (* ?a ?i)))
(bind ?i (+ ?i 1))
)
(printout t "s = " ?s crlf)
)
Слайд 10

Пример выполнения функции summa

Пример выполнения функции summa

Слайд 11

Пример использования функции loop-for-count Пусть требуется выдать таблицу значений функцию f2

Пример использования функции loop-for-count

Пусть требуется выдать таблицу значений функцию f2 от

2 до 4 (10 значений):
Слайд 12

Определение функции f2 (deffunction f2(?x) (if (not (and (numberp ?x) (>

Определение функции f2

(deffunction f2(?x)
(if (not (and (numberp ?x) (> ?x

0))) then
(printout t "error in data" crlf )
else
(* (+ (sqrt (** (log ?x) 3)) (tan (* (pi) ?x)))
(abs (log (/ ?x 10.5)))
)
)
)
Слайд 13

Пример выполнения функции f2

Пример выполнения функции f2

Слайд 14

Определение функции tabl (deffunction tabl(?a ?b) (bind ?i 0) (bind ?d

Определение функции tabl

(deffunction tabl(?a ?b)
(bind ?i 0)
(bind ?d (/

(- ?b ?a) 10))
(bind ?x ?a)
(loop-for-count (?i 1 11) do
(bind ?y (f2 ?x))
(printout t ?x " " (f2 ?x) crlf)
(bind ?x (+ ?x ?d))
)
(printout t "the end" crlf)
)
Слайд 15

Пример выполнения функции tabl

Пример выполнения функции tabl

Слайд 16

Пример программы вычисления корней квадратного уравнения Квадратное уравнение задается коэффициентами a, d, c:

Пример программы вычисления корней квадратного уравнения

Квадратное уравнение задается коэффициентами a, d,

c:
Слайд 17

Определение функции root (deffunction root(?a ?b ?c) (if (not (and (

Определение функции root

(deffunction root(?a ?b ?c)
(if (not (and (<> ?a

0) (numberp ?a)
(numberp ?b) (numberp ?c))) then
(printout t "error in data" crlf )
else
(bind ?d (- (** ?b 2) (* 4 ?a ?c)))
(if (< ?d 0) then (printout t "it is'n real roots" crlf)
Слайд 18

Определение функции root else (if (= ?d 0) then (bind ?x

Определение функции root

else (if (= ?d 0) then (bind ?x

(/ (- 0 ?b) (* 2 ?a)))
(printout t ?x " is one root" crlf )
else (bind ?x1 (/ (+ (- 0 ?b) (sqrt ?d)) (* 2 ?a)))
(bind ?x2 (/ (- (- 0 ?b) (sqrt ?d)) (* 2 ?a)))
(printout t ?x1 " " ?x2 " are two roots" crlf )
)
)
)
)
Слайд 19

Пример выполнения функции root

Пример выполнения функции root

Слайд 20

Пример программы вычисления корней уравнения методом деления пополам Задано произвольное уравнение.

Пример программы вычисления корней уравнения методом деления пополам

Задано произвольное уравнение.

Слайд 21

Задание Вычислить корень уравнения: на отрезке [0, 2] с точностью 0,0000001 методом дихотомии.

Задание

Вычислить корень уравнения:
на отрезке [0, 2]
с точностью 0,0000001

методом дихотомии.
Слайд 22

Метод решения

Метод решения

Слайд 23

Метод решения

Метод решения

Слайд 24

Метод решения

Метод решения

Слайд 25

Метод деления отрезка пополам (дихотомии) начало ввод A,B,ε x=(A+B)/2 F(x)*F(B)≤ 0

Метод деления отрезка пополам (дихотомии)

начало

ввод A,B,ε

x=(A+B)/2

F(x)*F(B)≤ 0

A=x

B=x

B-A<ε

вывод x

конец

+

-

-

+

Алгоритм для идеального случая:

на [A,B] ровно один корень.

Более надежный алгоритм учитывает ограничение на число итераций: если число итераций больше некоторого предельного значения, то цикл завершается с выводом сообщения о некорректной постановке задачи.

Слайд 26

Текст программы на языке Паскаль program Project2; {$APPTYPE CONSOLE} uses SysUtils;

Текст программы на языке Паскаль

program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;
Type Tfunc = function(x:

real):real;
Var
A,B,E,x: real;
Fp: Tfunc;
function F(xp: real): real;
begin
F:=1-exp(xp/3)/5+exp(-xp/2)*ln(xp+0.1);
end;
Слайд 27

Текст программы на языке Паскаль function root(a,b,e: real; f: Tfunc): real;

Текст программы на языке Паскаль

function root(a,b,e: real; f: Tfunc): real;
Var x:

real;
begin
repeat
x:=(a+b)/2;
if f(x)*f(b)<=0 then
a:=x
else
b:=x
until abs(b-a) root:=(a+b)/2;
end;
Слайд 28

Текст программы на языке Паскаль begin Fp:=F; writeln('Input A,B,E:'); read(A,B,E); X:=root(A,B,E,Fp);

Текст программы на языке Паскаль

begin
Fp:=F;
writeln('Input A,B,E:');
read(A,B,E);
X:=root(A,B,E,Fp);
writeln('root=

',x:8:6);
writeln('y= ',fp(x):8:3);
readln; readln;
end.
Слайд 29

Выполнение программы на языке Паскаль

Выполнение программы на языке Паскаль

Слайд 30

Функция f на языке CLIPS по заданию на слайде 20 (deffunction

Функция f на языке CLIPS по заданию на слайде 20

(deffunction f(?x)
(+

(- 1 (/ (exp (/ ?x 3)) 5))
(* (sqrt (exp (- 0 ?x))) (log (+ ?x 0.1)))
)
Слайд 31

Функция dih вычисления корня для уравнения на слайде 20 (deffunction dih(?a

Функция dih вычисления корня для уравнения на слайде 20

(deffunction dih(?a ?b

?eps)
(if (not (and (numberp ?a) (numberp ?b) (numberp ?eps))) then
(printout t "error in data" crlf )
else
(bind ?x (/ (+ ?a ?b) 2))
(bind ?a1 ?a)
(bind ?b1 ?b)
Слайд 32

Функция dih вычисления корня (while (> (abs (- ?b1 ?a1)) ?eps)

Функция dih вычисления корня

(while (> (abs (- ?b1 ?a1)) ?eps)

do
(if (<= (* (f ?x) (f ?b)) 0) then (bind ?a1 ?x)
else (bind ?b1 ?x)
)
(bind ?x (/ (+ ?a1 ?b1) 2))
)
(printout t "x = " ?x " f(x)= " (f ?x) crlf)
)
)
Слайд 33

Пример выполнения функции f

Пример выполнения функции f