Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб 4 - 6(задания).doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
313.34 Кб
Скачать

3.5. Преобразования, определяемые пользователем

Преобразования действительных чисел в целые или целых в действи­тельные весьма удобны при выполнении математических вычислений. Преоб­разования строк в символы удобны при подготовке обработки данных и их записи во внешнюю память. В этом разделе будет показано, как строить правила для выполнения этих преобразований.

Рассмотрим преобразование действительного числа в целое. В этом при­мере целое значение, соответствующее действительному числу 5432.765, есть 5432. Правило преобразования построено при помощи символа равенства (=):

conv_real_int(R,N) :- R = N.

где R — это переменная для действительных чисел, а N — переменная для целых чисел.

Объявление в разделе predicates следующее:

conv_rea1_int (rea1, integer).

Правило пытается вычислить значение R. Если текущее значение R -действительное число, то правило успешно; в противном случае правило за­вершается неуспешно. При успешном завершении правила целая часть дейст­вительного числа присваивается целочисленной переменной N. В Турбо-Про­логе целые числа ограничены диапазоном от -32 768 до 32 767, поэтому рассматриваемое правило преобразования не будет работать, если значение действительного числа меньше чем -32 768.0 или больше чем 32 767.0.

Правило для преобразования целого числа в действительное следующее:

conv_int_rea1(N,R) :- N=R.

где N — это целочисленная переменная, a R — переменная для действи­тельных чисел. Если N имеет значение 1234, то R получит значение 1234 (десятичная точка подразумевается, но не пишется).

Правило пытается вычислить значение N. Если текущее значение N есть целое число, то правило успешно; в противном случае оно неуспешно. При успешном завершении правило выбирает целое число и присваивает его переменной R. И в этом случае правило преобразования работает только при условии, что целое число находится внутри допустимого диапазона.

Преобразование строки в символ также может быть выполнено при по­мощи простого правила:

conv_str_symb(S,Sb) :- S=Sb.

Например, если S="Turbo PROLOG", то Sb=Turbo PROLOG. Объект S объяв­лен как объект типа string, a Sb объявлен как объект типа symbol.

Программа Conversion2 (рис. 14) использует все рассмотренные правила. Результат ее работы показан на рис. 15.

/* Программа: Conversions2 */

/* Назначение: Демонстрация преобразования: */

/* (1) действительного числа в целое */

/* (2) целого числа в действительное */

/* (3) строки в символ */

predicates

conv rea1_int(rеа1,integer)

conv_int_rea1 (integer, rea1)

conv_str_symb(string,symbol)

goal

XI = 5432.765,

conv_rea1_int(XI,N1),nl,nl,

N2 = 1234,

conv_int_real(N2,X2),nl,nl,

S = "TURBO PROLOG",

conv_str_symb(S,Sb),n1.

clauses

conv_real int(R,N) :-

R = N

write("Input real - ".R),nl,

write("0utput Integer - ", N).

conv_int_real(N,R) :-

N = R,

write("Input Integer - ",N),nl.

write("0utput real - ,"R).

conv str_symb(S,Sb) :-

S = Sb,

write("Input string -",S),nl,

write("0utput symbol - ",Sb).

Рис. 14. Программа Conversion2

Рис. 15. Результат работы программы Conversions2