ГОТОВЫЕ ДИПЛОМНЫЕ РАБОТЫ, КУРСОВЫЕ РАБОТЫ, ДИССЕРТАЦИИ И РЕФЕРАТЫ

Рекурсивно-логическое программированиие

Автор ошибка
Вуз (город) МГИУ
Количество страниц 15
Год сдачи 2008
Стоимость (руб.) 1500
Содержание ВВЕДЕНИЕ

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




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
Номер элемента в массиве А
0 1 2 3 4 5 6 7 8 9
Значение
9 0 8000 3084 8636 9105 8121 2859 6525 2


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







Однако мы пойдем по другому, чуть более легкому пути, представим число массивом, каждый разряд которого будет представлен элементом в массиве, тогда получим:
1 2 3 4 5 6 7 8 9 8

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

9 9 9 9 9 9 9 9 9 9

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



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

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

0 0 0 0 0 0 0 0 0 0

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

0 0 0 0 0 0 0 0 0 0
+
1 2 3 4 5 6 7 8 9 8
+
9 9 9 9 9 9 9 9 9 9
=
Если последний элемент «х» сложим с последним элементом «у» и если число будет больше 9, тогда мы, как бы это делал человек, запишем в «ум» число 1 и получим:

Ум
0 0 0 0 0 0 0 0 1 0
+ Х
1 2 3 4 5 6 7 8 9 8
+ У
9 9 9 9 9 9 9 9 9 9
= Ответ
0 0 0 0 0 0 0 0 0 7

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

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


Скриншоты:

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



Меню:

Текст программы:
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])
Список литературы 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
Выдержка из работы 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