Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Упражнение

Напишите программу на Турбо Прологе, которая получала бы список ад-

ресов, содержащихся в программе в виде предложений:

address("Sylvia Dackson", "14 Raylway Boulevard",

"Any Town", 27240).

и выдавала бы их в виде, подходящем для почтового отправления:

Sylvia Dackson

14 Raylway Boulevard

Any Town

27240

Предикат writef/*

Предикат writef позволяет выполнить форматированный вывод; он ис-

пользует следующий формат:

writef(FormatString,Arg1,Arg2,...,ArgN) /* (i,i,i,...i) */

Аргументы Arg1,...,Argn должны быть константами или связанными пере-

менными, принадлежащим стандартным доменам. Сложные домены форматировать

нельзя. Строка форматирования содержит обычные символы и форматные специ-

фикаторы; обычные символы печатаются без модификации, а форматные специ-

фикаторы имеют следующую форму:

%-m.pf

Символы спецификаторов формата, следующие за знаком процента, явля-

ются необязательными и имеют следующее значение:

дефис (-) показывает, что поле слева выравнивается (по умолчанию

выравнивается справа).

m поле десятичное число, определяющее минимальную длину поля.

p поле десятичное число, описывающее либо точность

представления с плавающей точкой, либо максимальное

число символов, печатаемых в строке.

f поле описывает форматы, отличные от форматов, принятых по

умолчанию для данного объекта. Например, поле f может

описывать, какие целые числа должны быть напечатаны,

как беззнаковые или шестнадцатиричные числа, или какие

вещественные должны быть напечатаны в шестнадцатиричном

представлении.

Турбо Пролог распознает следующие спецификаторы формата поля f:

f вещественные в представлении с фиксированной точкой ( 123.4)

e вещественные в экспотенциальном представлении ( 1.234e2 )

g вещественные в формате f или e ( этот формат по умолчанию )

d символьные или целые как десятичные числа

u символьные или целые как беззнаковые целые

x символьные или целые как шестнадцатиричные числа

c символьные или целые как символы

R как число ссылки на базу данных (только дя домена ref )

X как длинное шестнадцатиричное число

s как строки ( simbols и string )

----------------------------------------------------------------

Примеры форматного вывода

1. Следующая программа иллюстрирует действие различных форматных

спецификаторов при форматном выводе с помощью writef.

/* Program CH12EX05.PRO - Демонстрация writef*/

/* * * * * * * * * * * * * * * * * * * *

* writef похож на операторы форматной печати в других *

* языках программирования. writef принимает выводную *

* строку и выводит переменные и константы как ее *

* аргументы *

* *

* writef(FormatString,Arg1,Arg2,...) *

* *

* * * * * * * * * * * * * * * * * * * */

А = one,

B = 330.12,

C = 4.3333375,

D = "one two three",

writef ("A = '%-7'\nB = '%8.1e '\n",A,B),

writef ("A = '%'\nB = '%8.4e '\n",A,B),nl,

writef ("C = '%-7.7g'\nD = '%7.7 '\n",C,D),

writef ("C = '%-7.0f'\nD = '%0 '\n",C,D),

writef("char:%c,decimal:%d,hex:%x,unsigned:%u",97,'a',

33,-1).

После запуска эта пограмма создаст следующий вывод:

A = ' one '

B = ' 3.3E+02'

A = ' one '

B = '3.3012E+02'

D = 'One two'

C = '4 '

D = 'one two three'

char: a, decimal: 97, hex: 21, unsigned: 65535

2. Это другой пример, показывающий, как вы можете использовать

writef для форматного вывода.

/* Program CH12EX06.PRO-Опять демонстрация writef */

goal

person (N,A,I),

/* * * * * * * * * * * * * * * * * * * *

* *

* Name выровненое вправо, до 15 символов длиной *

* Age выровненое вправо, длиной 2 символа *

* Income выравненое вправо, 9 символов, 2 символа *

* после запятой, представление с фиксирован- *

* ной точкой *

* * * * * * * * * * * * * * * * * * * */

writyef("Name = %-15,Age=20,Income=$%9.2f\n",N,A,I).

Турбо Пролог может создать выводимую информацию, аналогичную следую-

щей:

Name = Pete Ashton , Age = 20, Income=$ 11111.11

Name = Marc Spiers , Age = 32, Income=$ 22222.22

Name = Kim Clark, Age = 28, Income=$ 33333.33

Чтение

Турбо Пролог включает в себя несколько стандартных предикатов для

чтения. Из них пять основных: readln (для чтения строк символов целиком);

readint, readreal и readchar (для чтения целых, вещественных и символьных

значений соответственно); и readterm (для чтения составных объектов). Все

эти предикаты могут быть переопределены для чтения из файлов.

Имеются некоторые другие, более специализированные предикаты, отно-

сящиеся к категории чтения: file4_sr (для чтения всего текстового файла в

строку), inkey ( для чтения символа с клавиатуры, если он нажат),

keypressed ( для определения была ли нажата клавиша на клавиатуре) и

unreadchar ( для возвращения символов в буфер клавиатуры). Эти специали-

зированные предикаты не дают не изменяют своего действия при переопреде-

лении ввода.

Соседние файлы в папке Документация