7. Примеры программ на DECL

Пример 7.1.

Выдать студентов факультета ПМ и их группы в форме:

Студент гр. ПМ95 - Иванов Иван

Студент гр. ПМ95 - Петрова Анна

...

Студент гр. ПМ96 - Смирнов Петр

Студент гр. ПМ96 - Романова Ольга

...

Программа:

{= База знаний (БЗ) =}

ФАК(ПМ,МТУСИ)

ГР(ПМ95,ПМ)

ГР(ПМ96,ПМ)

СТУД(СТ_1,ПМ95) ФАМ(Иванов,СТ_1) ИМЯ(Иван,СТ_1)

СТУД(СТ_2,ПМ95) ФАМ(Петрова,СТ_2) ИМЯ(Анна,СТ_2)

...

BEG(/91+) {= начало программы =}

START:IF THEN T!:PROG1(ПМ) B:IN() B:HALT();

PROG1(X20):IF ГР(X10,X20) THEN T!:PROG2(X10); {= X10 это группы ПМ95, ПМ96,... =}

PROG2(X10):IF СТУД(X1,X10) THEN

B:BK() B:A("Студент гр.";,X10,"-")

T!:PROG3(X1); {= X1 это коды студентов СТ_1, СТ_2, ... группы X10 =}

{== Выдача ФИО студента X1 - СТ_1, СТ_2, ... ==}

PROG3(X1):IF ФАМ(X2,X1) THEN B:A(" ",X2);

PROG3(X1):IF ИМЯ(X4,X1) THEN B:A(" ",X4);

END(/92+) @BL(91-,92-) {= Конец программы с блокировкой зоны =}

Программа записывается в отдельный файл, например, STUD.ZZ и выполняется командой DECL_WIN.EXE STUD.ZZ. При этом БЗ может быть записана в отдельный файл, например 'KB.KN', и введена в начале программы:

START:IF THEN B:IN('KB.KN') T!:PROG1(ПМ) B:IN() B:HALT();

Если требуется выдача студентов факультета ПМ не на экран, а в файл, то стартовая продукция будет иметь вид:

START:IF THEN B:REW('STUD.RES') T!:PROG1(ПМ) B:REW()

B:EDFILE1('STUD.RES') B:HALT();

Результат записывается в файл 'STUD.RES' и выдается в редактор.

Если требуется выдача студентов в виде меню, то:

START:IF THEN B:REW(MEMORY) T!:PROG1(ПМ) B:REW()

B:MENU(1,3,"Студенты:") B:HALT();

Пример 7.2.

Использование обобщающих продукций для выдачи ФИО.

Если перед программой поместить фрагменты ФИО(ФАМ) ФИО(ИМЯ) ФИО(ОТЧ), то в предыдущем примере вместо нескольких продукций PROG3 можно воспользоваться одной:

PROG3(X1):IF ФИО(X3) X3(X4,X1) THEN B:A(" ",X4);

Переменная X3 будет последовательно означиваться X3 = ФАМ, ИМЯ, ОТЧ, и соответственно, фрагмент X3(X4,X1) будет принимать вид ФАМ(X4,X1) ИМЯ(X4,X1) ОТЧ(X4,X1) и обеспечиваться выдача ФИО.

Пример 7.3. Выдать для каждого имени - фамилии студентов.

START:IF THEN T!:PR1() B:IN() B:HALT();

{== Выбирает имя X10 - Иван, Анна, ... X1 - код студента ==}

PR1():IF ИМЯ(X10,X1) СТУД(X1,_) N:MT(X10) THEN

MT1(X10) B:BK() B:A(X10,":") T!:PR2(X10);

{== Выдает фамилии X20 студентов X1 с именем X10 ==}

PR2(X10): IF ИМЯ(X10,X1) СТУД(X1,_) ФАМ(X20,X1) THEN B:ВК() В: А("-",X20);

Предыдущий раздел|Следующий раздел

- Главная страница -