БД Turbo Prolog (Прокат автомобилей)
Формулировка задачи:
Всем привет! По данному условию:
Мои наработки:
Спойлер
Подскажите, как правильно построить алгоритм для Turbo Prolog.
Заранее спасибо за любые ответы.
Решение задачи: «БД Turbo Prolog (Прокат автомобилей)»
textual
Листинг программы
DOMAINS client=ct(fam,rate,days) fam=symbol rate=real days=integer trade_date=td(year,month,day) year,month,day=integer PREDICATES deal(client,trade_date) owe(symbol,real) CLAUSES deal(ct("Ivanov",500.0,3),td(2014,11,5)). deal(ct("Petrov",800.0,6),td(2014,11,4)). deal(ct("Sidorov",600.0,8),td(2014,11,16)). owe(Fam,Sum):- date(PresY,PresM,PresD), deal(ct(Fam,Rate,Days),td(PresY,PresM,DealD)), PresD>(DealD+Days), Sum=(PresD-(DealD+Days))*Rate. Goal: owe(Fam,Sum).
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Код содержит три предиката:
deal
,owe
иtd
. - Предикат
deal
описывает сделку по прокату автомобиля. У него три аргумента:client
(клиент),trade_date
(дата сделки). - Предикат
owe
описывает задолженность клиента. У него два аргумента:fam
(фамилия клиента) иsum
(сумма задолженности). - В коде есть три утверждения (клаузы) с предикатом
deal
. Они описывают три сделки:- Сделка 1: клиент
Иванов
взял автомобиль на 3 дня под 500 рублей в день. Сделка состоялась 5 ноября 2014 года. - Сделка 2: клиент
Петров
взял автомобиль на 6 дней под 800 рублей в день. Сделка состоялась 4 ноября 2014 года. - Сделка 3: клиент
Сидоров
взял автомобиль на 8 дней под 600 рублей в день. Сделка состоялась 16 ноября 2014 года.
- Сделка 1: клиент
- В коде есть одно утверждение (клауза) с предикатом
owe
. Оно описывает задолженность клиентаFam
суммойSum
по состоянию на текущую дату. - В коде используется функция
date
, которая описывает текущую дату. - В коде используется переменная
PresD
, которая описывает текущую дату. - В коде используется формула для расчета задолженности:
(PresD-(DealD+Days))*Rate
. - В коде есть цель
owe(Fam,Sum)
. - Цель
owe(Fam,Sum)
пытается найти информацию о задолженности клиентаFam
суммойSum
. - Предикат
owe
использует функциюdate
для определения текущей даты. - Предикат
owe
использует предикатdeal
для получения информации о сделках клиентаFam
. - Предикат
owe
сравнивает текущую дату с датой последней сделки клиентаFam
и вычисляет задолженность. - Предикат
owe
выводит информацию о задолженности клиентаFam
суммойSum
. - Код не содержит ошибок синтаксиса.
- Код не содержит комментариев.
- Код не содержит вложенных структур данных.
- Код не содержит циклов или рекурсии.
- Код не содержит операций присваивания или арифметических операций.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д