Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лифп / Лабораторная работа №2

.docx
Скачиваний:
5
Добавлен:
07.02.2023
Размер:
117.88 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ

КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА

Лабораторная работа

Бишкек 2023

Лабораторная работа №2

Дана БД о сотрудниках в виде: ФИО, стаж, зарплата. Найти сотрудников стаж которых выше средней.

Листинг кода:

domains

S=integer*.

FIO=string.

St,Zp,Sum,Kol=integer.

predicates

nondeterm sotr(FIO,St,Zp).

nondeterm pr(FIO).

nondeterm sumkol(S,Sum,Kol).

clauses

sotr("Asan",3,15000).

sotr("Usem",3,11000).

sotr("Aman",5,13000).

sotr("Bektur",1,17000).

sotr("Manas",4,12000).

sumkol([],0,0).

sumkol([H|T],Sum, Kol):-sumkol(T,Sum1,Kol1),Sum=Sum1+H,Kol=Kol1+1

pr(Fio):- findall(St,sotr(_,St,_), LS), sumkol(LS,S,K), Sr=S/K,sotr(FIO,StS,_),StS>Sr.

goal

pr(Fio).

Фото результат:

Объяснение кода:

Этот код определяет три домена:

  1. (S=integer*.) S целочисленного типа*,

  2. (FIO=string.) FIO строкового типа,

  3. (St,Zp,Sum,Kol=integer.) St, Zp, Sum и Kol целочисленного типа.

И определяет три предикатов:

1. nondeterm sotr(FIO,St,Zp).

2. nondeterm pr(FIO).

3. nondeterm sumkol(S,Sum,Kol).

У предикатов sotr(FIO,St,Zp) и sumkol(S,Sum,Kol) определены предложения. Предикат sotr(FIO,St,Zp) определяет пять примеров данных имени сотрудника, его трудового стажа и зарплаты.

sotr("Asan",3,15000).

sotr("Usem",3,11000).

sotr("Aman",5,13000).

sotr("Bektur",1,17000).

sotr("Manas",4,12000).

Предикат sumkol([],0,0) определяет, как вычислить сумму и количество элементов в списке.

Предикат pr(Fio) определяет, как найти сотрудников, чей трудовой стаж выше среднего.

Для этого он сначала находит старшинство всех сотрудников, используя предикат findall(St,sotr(_,St,_),LS) и сохраняет его в списке LS.

Затем сумма и количество элементов в LS вычисляются с использованием предиката sumkol(LS, S, K) и сохраняются в S и K соответственно.

Средний трудовой стаж рассчитывается путем деления S на K (Sr=S/K). Наконец, предикат sotr(FIO,StS,_) используется для поиска сотрудников, чей трудовой стаж выше среднего Sts>Sr.

Цель pr(Fio) состоит в том, чтобы найти сотрудников, чей трудовой стаж выше среднего.