Содержание

ВВЕДЕНИЕ

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

Сформулировано задание на выполнение курсовой работы, приведены ва-рианты заданий для выбора.

Пособие предназначено для студентов заочной (дистанционной) формы обучения.

1. КУРСОВАЯ РАБОТА

1.1. ТЕМА: разработка алгоритма и программы системы искусственного интеллекта.

1.2.СОДЕРЖАНИЕ КУРСОВОЙ РАБОТЫ:

— постановка задачи;

-математическое описание метода (например, в Latex, WinTex, MS Equa-tion);

-описание алгоритма и схем (например, на языке UML);

— тексты программ на языках логического программирования.

— описание программ.

2. ВАРИАНТЫ ЗАДАНИЙ КУРСОВОЙ РАБОТЫ:

1.Длинная арифметика

Описание метода:

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

ПРОЦЕСС

Мы ограничены размером (величиной) чисел, с которыми можем рабо-тать. А если нам необходимо выполнить арифметические действия над очень большими числами, например,

30! = 265252859812191058636308480000000?

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

Числа, для представления которых в стандартных компьютерных типах данных не хватает количества двоичных разрядов, называются «длинны-ми». Реализация арифметических операций над такими «длинными» чис-лами получила название «длинной арифметики».

Организация работы с «длинными» числами во многом зависит от того, как мы представим в компьютере эти числа. «Длинное» число можно за-писать, например, с помощью массива десятичных цифр, количество эле-ментов в таком массиве равно количеству значащих цифр в «длинном» числе. Но если мы будем реализовывать арифметические операции над этим числом, то размер массива должен быть достаточным, чтобы размес-тить в нем и результат, например, умножения.

Существуют и другие представления «длинных» чисел. Рассмотрим одно из них. Представим наше число

30! = 265252859812191058636308480000000

в виде:

30! = 2 * (104)8 + 6525 * (104)7 + 2859 * (104) + 8121 * (104)5 + 9105 * (104)4 + 8636 * (104)3 + 3084 * (104)2 + 8000 * (104)1 + 0000 * (104)0.

Это представление наталкивает на мысль о массиве, представленном в табл. 1.

Таблица 1

Номер элемента в массиве А

0123456789

Значение

9080003084863691058121285965252

Мы можем считать, что наше «длинное» число представлено в 10000-ой системе счисления (десятитысячно-десятичная система счисления, приве-дите аналогию с восьмерично-десятичной системой счисления), а «цифра-ми» числа являются четырехзначные числа.

Однако мы пойдем по другому, чуть более легкому пути, представим число массивом, каждый разряд которого будет представлен элементом в массиве, тогда получим:

1234567898

Так мы представили число 1234567898 с помощью массива.

9999999999

Так мы представили число 9999999999 с помощью массива.

Теперь определим операцию сложения для этих двух массивов:

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

0000000000

Массив мы назовем «УМ», тогда работу программы можно графически представить так:

0000000000

+

1234567898

+

9999999999

=

Если последний элемент «х» сложим с последним элементом «у» и если число будет больше 9, тогда мы, как бы это делал человек, запишем в «ум» число 1 и получим:

Ум

0000000010

+ Х

1234567898

+ У

9999999999

= Ответ

0000000007

Если вы обратили внимание на стрелочку, то должны были заметить, что элемент массива изменился, тоесть, другими словами, мы «запомнили» единичку.

При дальнейшем подсчете мы будем уже учитывать эту единичку.

В нашей программе мы определили операцию сложения, отнимания и ум-ножения для чисел длинной арифметики.

Скриншоты:

Внешний вид программы:

Меню:

Текст программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

Label4: TLabel;

Edit3: TEdit;

N6: TMenuItem;

procedure N6Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function WIB(s1,s2: string): boolean;

var ls1,ls2,i: integer;

ls3: string;

flag: boolean;

begin

ls1:=length(s1); ls2:=length(s2); flag:=false;

if ls1strtoint(s2[i]) then begin break; end;

if strtoint(s1[i])

Выдержка из текста

Nothing:=»;

//——- запишем массивы ————-

for i:=1 to ls1 do

begin

if s1[i] in [‘0’..’9′] then

begin

Nothing:=»;

Nothing:=Nothing+s1[i];

x[ls1+1-i]:=strtoint(Nothing);

end;

end;

for j:=1 to ls2 do

begin

if s2[j] in [‘0’..’9′] then

begin

Nothing:=»;

Nothing:=Nothing+s2[j];

y[ls2+1-j]:=strtoint(Nothing);

end;

end;

//——— конец формирования массивов ———-

//——— конец препроцессинга ——————

flag:=false;

for i:=1 to ls1 do

begin

if x[i]+y[i]+ym[i]=y[i] then a[i]:=x[i]-y[i]

else

begin

a[i]:=10+x[i]-y[i];

x[i+1]:=x[i+1]-1;

end;

end;

for i:=1 to ls1 do begin a1:=a1+inttostr(a[ls1+1-i]); end;

MINUS:=a1;

//——- конец опериции отнимания —————-

end;

function YMNOSH(s1,s2: string): string;

var ls1,ls2,i,j,k: integer;

s3,nothing,a1,answer,newedit1,newedit2: string;

x,y,ym,a: array[1..200] of integer;

flag: boolean;

ch,ch1,ch2,ran: string;

begin

//————— препроцессинг —————————

for i:=1 to 200 do x[i]:=0;

for i:=1 to 200 do y[i]:=0;

for i:=1 to 200 do ym[i]:=0;

for i:=1 to 200 do a[i]:=0;

ls1:=length(s1);

ls2:=length(s2);

Nothing:=»;

//——- запишем массивы ————-

for i:=1 to ls1 do

begin

if s1[i] in [‘0’..’9′] then

begin

Nothing:=»;

Nothing:=Nothing+s1[i];

x[ls1+1-i]:=strtoint(Nothing);

end;

end;

for j:=1 to ls2 do

begin

if s2[j] in [‘0’..’9′] then

begin

Nothing:=»;

Nothing:=Nothing+s2[j];

y[ls2+1-j]:=strtoint(Nothing);

end;

end;

//——— конец формирования массивов ———-

//——— конец препроцессинга ——————

ch:=»;

newedit1:=Form1.edit1.text;

newedit2:=Form1.Edit2.Text;

answer:=»;

ch1:=»;

ch2:=»;

for j:=1 to ls2 do

begin

ch2:=»;

ch1:=»;

ch:=»;

for i:=1 to ls1 do

begin

ch:=ch+inttostr((y[j]*x[i]+ym[i]) mod 10);

ym[i+1]:=((y[j]*x[i]+ym[i]) div 10);

if i=ls1 then if ym[i+1]0 then ch:=ch+inttostr(ym[i+1]);

end;

for i:=length(ch) downto 1 do

Список использованной литературы

1.И.Соммервилл Инженерное програаммное обеспечениея. М.: «Виль-ямс», 2002. 624 с.

2.Г. Буч Объектно-ориентированный анализ и проектирование с примерами приложений на C++, 2-е изд./Пер. с англ. М.: Издательство Бином, СПб: Невский диалект, 1998

3.Стерлинг Л. Шапиро Э. Искусство программирования на языке Пролог /Пер. с англ. М.: Мир, 1990

4.Братко,Иван Алгоритмы искусственного интеллекта на языке PROLOG;пер.с англ.:. / Иван Братко — М.: Вильямс, 2004

5.Логическое программирование. Сборник статей. / Под ред. В.Н. Агафоно-ва. М.: Мир, 1988

6.Язык Пролог в пятом поколении ЭВМ. / Сост. Н.И. Ильинский М.: Мир, 1988

7.Хоггер К. Введение в логическое программирование. М.: Мир, 1988

8.Клоксин У. Программирование на языке Пролог. / Меллиш К. М.: Мир, 1987

9.Малпас Дж Реляционный язык Пролог и его применение. М.: Наука, 1990

10.Братко И. Программирование на языке Пролог для искусственного ин-теллекта. М.: Мир, 1990

11.Набебин А.А. Логика и Пролог в дискретной математике. М.: Издатель-ство МЭИ, 1996

12.Чень Ч. Математическая логика и автоматическое доказательство теорем . / Ли Р М.: Наука, 1983

13.Hassan Ait-Kaci Warren s Abstract Machine: A Tutorial Reconstruction. MIT Press, 1991

14.K. Apt Logic Programming // J. van Leeuwen (Ed.) Handbook of Theoretical Computer Science. MIT Press, 1990

Похожие записи