Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Вспомогательные материалы




Графические файлы формата PPM (Portable PixMap)

Файл формата PPM имеет простую структуру. Первая строка файла всегда содержит «магическое число» P6. Во второй строке содержится размер картинки по горизонтали и вертикали в пикселях (целые числа в текстовом формате). Третья строка практически всегда содержит число 255. Начиная с четвертой строки в файле, кодируется цвет каждого пикселя. Под кодировку цвета отводится три байта (R-, G- и B-байты). Рассмотрим пример (кодировка DOS):

P6
3 4
255
я++я++я++я++я++я++я++я++я++я++я++я++

Это изображение представляет собой небольшой ярко красный прямоугольник размером 3 на 4 пикселя. Все пиксели одного цвета – «я++» ({239,43,43} – интенсивности красной, зеленой и синей компонент цвета в цифровом выражении). Первые три строки файла заканчиваются символами конца строки (ASCII-код 10), а не парой «возврат каретки, конец строки», как это принято на платформе Windows. Для создания файла из описанного примера в среде интерпретатора Пролога можно, например, воспользоваться следующим кодом:

make_test_ppm:-

create(H,’test.ppm’),

concat([’P6’,10,’3 4’,10,’255’,10], S),

write(H, S),

write(H,’я++я++я++я++я++я++я++я++я++я++я++я++’),

close(H).

Кроссворды

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

В качестве удобного способа организации простейшей тестовой базы может служить следующий код, записывающий в радел базы данных существительные русского языка в виде списков из ASCII-кодов:

:- eraseall(verb).

:- recordz(verb,”казак”,_).

:- recordz(verb,”роман”,_).

:- recordz(verb,”бокал”,_).

:- recordz(verb,”короб”,_).

:- recordz(verb,”замок”,_).

:- recordz(verb,”канал”,_).

:- recordz(verb,”комок”,_).

:- recordz(verb,”кокон”,_).

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

A B C D E
P   R   T
F G H I J
Q   S   U
K L M N O

Рис. 1. Простейший пример кроссворда

Для представления такого шаблона можно воспользоваться множеством различных вариантов. В качестве одного из возможных решений можно использовать такой код:

form(

[A,B,C,D,E]*[F,G,H,I,J]*[K,L,M,N,O]+

[A,P,F,Q,K]*[C,R,H,S,M]*[E,T,J,U,O]).

Разумеется, арифметические операции здесь не играют своей привычной роли, а лишь служат для сцепления шаблонов для слов, при этом «+» использован для указания перехода к описанию шаблонов расположенных вертикально.

Матрица инцидентности графа

Для графа G = (X, R), где X – множество вершин, а R – множество ребер, матрица инцидентности – это прямоугольная матрица M= { mij }. mij = 1 тогда и только тогда, когда вершина xi инцидентна ребру rj и mij = 0 в противном случае. Пример простейшего графа и его матрицы представлен на рис. 2.

  r 1 r 2 r 3 r 4
x 1        
x 2        
x 3        
x 4        

 

Рис. 2. Пример графа и его матрицы инцидентности

Модульная арифметика (арифметика вычетов)

Если оперировать только с целыми числами и приводить результаты по модулю M, то такая арифметическая система называется одномодульной арифметикой вычетов. Целое число M > 1 при этом называется модулем арифметической системы. Для трех основных арифметических операций в этой арифметике (сложения, умножения и вычитания) можно записать простые утверждения:

ü X есть сумма чисел A и B в арифметике вычетов по модулю M, если X = (A + B) mod M;

ü X есть произведение чисел A и B в арифметике вычетов по модулю M, если X = (A * B) mod M;

ü X есть разность чисел A и B в арифметике вычетов по модулю M, если X = (A + M – B mod M) mod M.

Для осуществления деления в арифметике вычетов приходится прибегать к более громодкой процедуре. В обычной арифметике можно записать такое равенство A/B = A*B- 1. Таким образом, для того чтобы поделить A на B, достаточно умножить A на обратное к B число. В арифметике вычетов именно так и поступают. X есть результат деления числа A на число B в арифметике вычетов по модулю M, если X = (A * B- 1 mod M) mod M. Для расчета обратного элемента (числа) к B по модулю M, т.е. B- 1 mod M, используется расширенный алгоритм Евклида. При произвольных значениях модуля для некоторых чисел обратный элемент может и не существовать. Если в качестве модуля арифметики брать простое целое число, то для любого числа в такой арифметике существует обратный элемент.

Расширенный алгоритм Евклида (как и обычный) предназначен для нахождения наибольшего общего делителя двух целых чисел a, b – НОД(a, b) = d. Однако, кроме решения этой «основной задачи» он позволяет находить целые числа x, y, являющиеся решениями уравнения ax + by = d. Псевдокод для этого алгоритма выглядит так.

НА ВХОДЕ: два неотрицательных числа a и b

НА ВЫХОДЕ: d=НОД(a,b) и целые x,y: ax + by = d.

 

1. Если b=0 положить d:=a, x:=1, y:=0 и возвратить (d,x,y)

2. Положить x1:=0, x2:=1, y1:=1, y2:=0

3. Пока b>0

3.1 q:=[a/b], r:=a-qb, x:=x2-qx1, y:=y2-qy1

3.2 a:=b, b:=r, x2:=x1, x1:=x, y2:=y1, y1:=y

4. Положить d:=a, x:=x2, y:=y2 и возвратить (d,x,y)

Если с помощью расширенного алгоритма Евклида требуется найти обратное по модулю n число для числа а, то достаточно в расширенном алгоритме Евклида положить b = n. При a < n и если n – простое число, алгоритм возвращает d = 1, а обратное к a целое число – либо x (если x >0), либо n + x (в противном случае).

Символы псевдографики

ASCII-коды символов в кодировке DOS, необходимость использования которых возникает при выполнении ряда задач этого пособия, представлены в таблице.

Таблица 1

ASCII-коды символов псевдографики в кодировке DOS (выборочно)

Код                      
Знак

 


СОДЕРЖАНИЕ

 

Предисловие. 3

Списки и строки. 4

Бинарные деревья. 15

Произвольные структуры (деревья) 24

Файлы и разделы базы данных. 33

Литература. 40

Приложение А. Подготовка к работе. 41

Приложение Б. Предикаты Arity/Prolog32. 42

Приложение В. Вспомогательные материалы.. 70

 

 

Редактор З.И. Сныкова
Компьютерная верстка Е.Л. Борисенко
ЛР № 020713 от 27.04.1998
Подписано к печати Формат бумаги 60×84/16
Печать ризограф. Бумага МВ Печ. Л. 5,0
Заказ № Тираж 50 экз. Цена договорная
Отдел множительной техники ИАТЭ
249035, г. Обнинск, Студгородок, 1
       

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 377 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2395 - | 2153 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.