Логіка
задачі на мові програмування b> Prolog b> p>
Завдання 1. p>
Ввести
запропонований текст програми, реалізувати її і записати на диск. p>
predicates p>
hello. p>
goal p>
hello. p>
clauses p>
hello: - p>
makewindow (1,7,7, "Моя перша програма", 4,56,14,22), p>
nl,
write ( "Введіть ваше ім'я, n", "потім натисніть
Enter ."), p>
cursor (4,6), p>
readln (Name), nl, p>
write ( "Ласкаво пожаловатьn в PDC
Prolog, n ","", Name ,"!"). p>
Результат:
Ласкаво просимо до PDC Prolog,
Vladimir! P>
Навмисне
ввести друкарські помилки в текст програми і ознайомитися з повідомленнями про ці
всі помічені, виправити їх. p>
predicates p>
hello. p>
goal p>
hello. p>
clauses p>
hello: - p>
makewindow (1,7,7, "Моя перша програма", 4,56,14,22) p>
nl, write ( "Введіть ваше ім'я, n", "потім натисніть Enter ."), p>
cursor (4,6), p>
readln (Name) nl, p>
write ( "Ласкаво пожаловатьn в PDC
Prolog, n ",", Name ,!"). p>
Результат:
423 Syntax eror. P>
Завдання 2. p>
Реалізувати
програму з введенням перерахованих нижче цілей і перевірити отримані результати.
Цілі зовнішні. P>
predicates p>
book (symbol, symbol, symbol, integer). p>
clauses p>
book ( "Фігурне В.Е.", "IBM PC
для користувача "," ФиС ", 1988). p>
book ( "Пєтухов
О.А. "," Проектування ОРБД "," Суднобудування ", 1984). P>
book ( "Пєтухов
О.А. "," Об'єктно-реляційні моделі
даних "," СЗПІ ", 1987). p>
book ( "Пєтухов
О.А. "," Моделювання СМО "," СЗПІ ", 1989). P>
book ( "Пєтухов О.А.", "PDC
Prolog "," СЗПІ ", 2000). P>
book ( "Анкудинов Г.І.", "Теорія
автоматів "," СЗПІ ", 1997). p>
book ( "Миколаїв
В.І. "," Дискретні структури "," СЗПІ ", 1999). P>
Результат: X = Proektirovanie OR BD, Y = SUDOSTROENIE,
Z = 1984 p>
X = Object models of DATA, Y = SZPI, Z = 1987 p>
X = Modelirovanie CMO, Y = SZPI, Z = 1989 p>
X = PDC Prolog, Y = SZPI, Z = 2000 p>
4 Solutions p>
X = Proektirovanie OR BD p>
X = Object models of DATA p>
X = Modelirovanie CMO p>
X = PDC Prolog p>
4 Solutions p>
E = Petuchov OA, X = Object models of DATA, Z = 1987 p>
E = Petuchov OA,
X = Modelirovanie CMO, Z = 1989 p>
E = Petuchov O.A., X = PDC Prolog, Z = 2000 p>
E = Ankudinov G.I., X = Automat theory, Z = 1997 p>
E = Nikolaev VI, X = Diskretniye struktury, Z = 1999 p>
5 Solutions p>
Завдання 3. p>
Реалізувати
програму з введенням всіх перерахованих зовнішніх цілей і перевірити одержані
результати: p>
domains p>
name = symbol p>
year_in,
year_out = integer p>
predicates p>
parents (name, name) p>
woman (name) p>
man (name) p>
offspring (name, name) p>
father (name, name) p>
mother (name, name) p>
parent_parents (name, name) p>
brother (name, name) p>
grandfather (name, name) p>
grandmother (name, name) p>
emperor (name, year_in, year_out) p>
emperor_was (name, integer) p>
clauses p>
parents ( "Петро III", "Павло I "). p>
parents ( "Катерина
II "," Павло I "). p>
parents ( "Павло I", "Олександр I "). p>
parents ( "Павло I", "Микола I "). p>
parents ( "Микола
I "," Олександр II "). p>
parents ( "Олександр
II "," Олександр III "). p>
parents ( "Олександр
III "," Микола II "). p>
woman ( "Катерина II "). p>
man ( "Петро III "). p>
man ( "Павло I "). p>
man ( "Алексндр I "). p>
man ( "Микола I "). p>
man ( "Олександр II "). p>
man ( "Олександр III "). p>
man ( "Микола II "). p>
offspring (Y, X):-parents (X, Y). p>
father (X, Y):-parents (X, Y), man (X). p>
mother (X, Y):-parents (X, Y), woman (X). p>
parent_parents (X, Z):-parents (X, Y), parents (Y, Z). p>
brother (X, Y):-parents (Z, X), parents (Z, Y), man (X), X <> Y. p>
grandfather (X, Y):-father (X, Z), father (Z, Y). p>
grandmother (X, Y):-mother (X, Z), father (Z, Y). p>
emperor ( "Петро
III ", 1761,1762). P>
emperor ( "Катерина II", 1762,1796). p>
emperor ( "Павло
I ", 1796,1801). P>
emperor ( "Олександр
I ", 1801,1825). P>
emperor ( "Микола
I ", 1825,1855). P>
emperor ( "Олександр
II ", 1855,1881). P>
emperor ( "Олександр III", 1881,1894). p>
emperor ( "Микола
II ", 1894,1917). P>
emperor_was (X, Y):-emperor (X, A, B), Y> = A, Y <= B. p>
Результат:
Y = aleksandr I X = petr III, A = 1761,
B = 1762 X = pavel I p>
1 Solution X = ekaterina
II, A = 1762, B = 1769 1 Solution p>
X = pavel I, A = 1796, B = 1801 p>
X = aleksandr
I, A = 1801, B = 1825 p>
X = nikolay I, A = 1825, B = 1855 p>
X = aleksandr II, A = 1855, B = 1881 p>
X = aleksandr III, A = 1881, B = 1894 p>
X = nikolay II, A = 1894, B = 1917 p>
8 Solutions p>
Завдання 4. p>
Реалізувати
наведену програму: p>
domains p>
name = symbol p>
predicates p>
star (name) p>
planet (name) p>
revolve (name, name) p>
satellite (name, name). p>
goal p>
satellite (X, "Марс "), p>
write (X, "супутник Марса ."), p>
nl. p>
clauses p>
star ( "Сонце "). p>
planet ( "Земля "). p>
planet ( "Марс "). p>
revolve ( "Земля", "Сонце "). p>
revolve ( "Марс", "Сонце "). p>
revolve ( "Місяць", "Земля "). p>
revolve ( "Фобос", "Марс "). p>
revolve ( "Деймос", "Марс "). p>
satellite (X, Y):-planet (Y), revolve (X, Y). p>
Результат:
Фобос супутник Марса. P>
Написати і
реалізувати програму встановлення родинних зв'язків: Василь має доньку
Ольгу, у якої два сини Михайло і Максим. Використовувати зовнішні і внутрішні
мети. p>
domains p>
name = symbol p>
predicates p>
men (name) p>
mama (name) p>
sons (name, name) p>
doughter (name, name) p>
deda (name, name) p>
brother (name, name). p>
goal p>
doughter (Z, Y), p>
write (Z, Y), p>
nl. p>
clauses p>
men ( "Vaciliy "). p>
men ( "Michail "). p>
men ( "Maxim"). p>
mama ( "Olga "). p>
sons ( "Michail", "Olga "). p>
sons ( "Maxim", "Olga "). p>
doughter ( "Olga", "Vasiliy "). p>
deda (X, Y): - men (X), men (Y), sons (X, Y), doughter (Z, Y). p>
brother (X, Y): - men (X), men (Y), sons (X, Z), sons (Y, Z), X <> Y. p>
Результат: Olga, Vaciliy p>
Завдання 5. p>
Реалізувати
наступну програму: Отримати
псевдовипадкові речові числа в діапазоні від 0 до 1. p>
goal p>
random (X), p>
Z = X, p>
write ( "псевдовипадкове дійсне число
від 0 до 1: ", Z), p>
nl. p>
Результат: 0,64823988962 p>
Отримати
випадкові цілі числа в діапазоні від 0 до 10 і від 10 до 35. p>
goal p>
random (10, X), p>
Z = X, p>
write ( "псевдовипадкове дійсне число
від 0 до 10: ", Z), p>
nl. p>
Результат: 5 p>
goal p>
random (25, X), p>
Z = X + +10, p>
write ( "псевдовипадкове дійсне число
від 10 до
35:, Z), p>
nl. p>
Результат: 21 p>
Завдання 6. p>
Реалізувати наведену пргограмму
для обчислення p>
goal p>
write ( "X =
"), p>
readint (X), p>
nl, p>
write ( "K =
"), p>
readreal (K), p>
nl, p>
Z = exp (sin (X)) + sqrt (K + X * X), p>
write ( "Z =
", Z). P>
Результат: X = 5,
K = 16, Z = 6,7864292326 p>
В режимі
калькулятора обчислити X = (2 + 5) * 3,4, тобто вводячи значення 2, 5, 3.4 з
клавіатури. p>
goal p>
write ( "X =
"), p>
readint (X), p>
nl, p>
write ( "K =
"), p>
readint (K), p>
nl, p>
write ( "N = "), p>
readreal (N), p>
nl p>
Z = (X + K) * N, p>
write ( "Z =
", Z). P>
Результат: 23,8 p>
Завдання 7. p>
Реалізувати
наведену програму з зовнішньої зв'язком, виконавши всі чотири арифметичні
операції. p>
predicates p>
operation (symbol, real, real) p>
clauses p>
operation ("+", X, Y):-Z = X + Y, p>
write (X ,"+", Y ,"=", Z), p>
nl. p>
operation ("-", X, Y):-Z = X-Y, p>
write (X ,"-", Y ,"=", Z), p>
nl. p>
operation ("*", X, Y):-Z = X * Y, p>
write (X ,"*", Y ,"=", Z), p>
nl. p>
operation ("/", X, Y):-Z = X/Y, p>
write (X ,"/", Y ,"=", Z), p>
nl. p>
Результат: Z = 8 2 Z = 8-2 Z = 8 * 2 Z = 8/2 p>
Z = 10 Z = 6 Z = 16 Z = 4 p>
1 Solution 1 Solution 1 Solution 1 Solution p>
2. Реалізувати
цю ж програму з внутрішньою метою p>
predicates p>
operation (symbol, real, real) p>
Goal p>
write ( "Vvedite chisla "), p>
nl, p>
readreal (X), p>
nl, p>
readreal (Y), p>
nl, p>
operation ("+", X, Y), p>
operation ("-", X, Y), p>
operation ("*", X, Y), p>
operation ( "/", X, Y). p>
clauses p>
operation ("+", X, Y):-Z = X + Y, p>
write (X ,"+", Y ,"=", Z), p>
nl. p>
operation ("-", X, Y):-Z = X-Y, p>
write (X ,"-", Y ,"=", Z), p>
nl. p>
operation ("*", X, Y):-Z = X * Y, p>
write (X ,"*", Y ,"=", Z), p>
nl. p>
operation ("/", X, Y):-Z = X/Y, p>
write (X ,"/", Y ,"=", Z), p>
nl. p>
Результат:
Vvedite chisla p>
2 p>
4 p>
2 +4 = 6 p>
2-4 =- 2 p>
2 * 4 = 8 p>
2/4 = 0,5 p>
Завдання 9. p>
Реалізувати
програму завдання 4 з новою метою, що використовує вбудований предикат fail, і
проаналізувати отриманий результат. p>
domains p>
name = symbol p>
predicates p>
men (name) p>
mama (name) p>
sons (name, name) p>
doughter (name, name) p>
deda (name, name) p>
brother (name, name). p>
goal p>
deda (X, "Vaciliy "), p>
write (X, "Vaciliy "), p>
nl. p>
clauses p>
men ( "Vaciliy "). p>
men ( "Michail "). p>
men ( "Maxim"). p>
mama ( "Olga "). p>
sons ( "Michail", "Olga "). p>
sons ( "Maxim", "Olga "). p>
doughter ( "Olga", "Vasiliy "). p>
deda (X, Y)
: - men (X), men (Y), sons (X, Y), doughter (Z, Y), nl, p>
write ( "", X), nl, fail. p>
brother (X, Y): - men (X), men (Y), sons (X, Z), sons (Y, Z), X <> Y. p>
Результат: Michail p>
Maxim p>
Завдання 10. p>
Реалізувати
програми обчислення суми таких рядів: p>
1 + 2 + 3 + ... + 9 + 10 p>
2 + 4 + 6 + ... + 14 + 16 p>
10 + 9 + 8 + ... + 2 + 1 p>
1 + 3 + 5 + ... + 13 + 15 p>
domains p>
number, sum = integer p>
predicates p>
sum (number, sum) p>
goal p>
write ( "Сума ряду: "), p>
sum (1, sum), write (sum). p>
clauses p>
sum (11,0). p>
sum (Number, Sum) :-- p>
New_number = Number 1, p>
sum (New_number, Partial_sum), p>
Sum = Number + Partial_sum. P>
Результат:
Сума ряду: 55 p>
domains p>
number, sum = integer p>
predicates p>
sum (number, sum) p>
goal p>
write ( "Сума ряду: "), p>
sum (2, sum), write (sum). p>
clauses p>
sum (18,0). p>
sum (Number, Sum) :-- p>
New_number = Number 2, p>
sum (New_number, Partial_sum), p>
Sum = Number + Partial_sum. P>
Результат: Сума ряду: 72 p>
domains p>
number, sum = integer p>
predicates p>
sum (number, sum) p>
goal p>
write ( "Сума ряду: "), p>
sum (9, sum), write (sum). p>
clauses p>
sum (0,11). p>
sum (Number, Sum) :-- p>
New_number = Number-1, p>
sum (New_number, Partial_sum), p>
Sum = Number + Partial_sum p>
Результат:
Сума ряду: 55 p>
domains p>
number, sum = integer p>
predicates p>
sum (number, sum) p>
goal p>
write ( "Сума ряду: "), p>
sum (1, sum), write (sum). p>
clauses p>
sum (17,0). p>
sum (Number, Sum) :-- p>
New_number = Number 2, p>
sum (New_number, Partial_sum), p>
Sum = Number + Partial_sum. P>
Результат:
Сума ряду: 64 p>
Завдання 12. p>
Написати
програму, що створює список міст. Виконати програму з різними
внутрішніми і зовнішніми цілями. p>
domains p>
town_list = town * p>
town = symbol p>
predicates p>
towns (town_list) p>
goal p>
towns ([A, B, C, D, E ]), p>
write (A ,",", B ,",", C ,",", D ,",", E). p>
clauses p>
towns ([ "Kazan", "Nignekamsk", "Elabuga", "Bugulma", "Almetevsk"]). p>
Результат: Kazan, Nignekamsk, Elabuga, Bugulma,
Almetevsk p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.monax.ru/
p>