ГОТОВЫЕ ДИПЛОМНЫЕ РАБОТЫ, КУРСОВЫЕ РАБОТЫ, ДИССЕРТАЦИИ И РЕФЕРАТЫ
Рекурсивно-логическое программированиие | |
Автор | ошибка |
Вуз (город) | МГИУ |
Количество страниц | 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 |