Главная страница
Навигация по странице:

  • Отчет о выполненной самостоятельной работе должен содержать

  • 1.6 Арифметические вычисления

  • Пример 1.

  • Комментарий

  • Пример 2.

  • Результат выполнения программы

  • Пример 3.

  • Пример

  • Результат выполнения программы: 1-й случай:X=3N=2Y=92-й случай:X=2N=-2Y=0.25 Пример

  • Решение : Составим правило move

  • ИИСС. Практикум решения задач по курсу Основы искусственного интеллекта


    Скачать 0.73 Mb.
    НазваниеПрактикум решения задач по курсу Основы искусственного интеллекта
    Дата17.11.2022
    Размер0.73 Mb.
    Формат файлаdoc
    Имя файлаmetod_VP.doc
    ТипПрактикум
    #795277
    страница4 из 8
    1   2   3   4   5   6   7   8

    ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ


    1. База данных содержит факты вида: отдыхает(имя, город), украина(город), россия(город), женщина (имя), мужчина(имя ).

    а) вывести список женщин, отдыхающих в России;

    б) вывести список мужчин, отдыхающих на Украине.

    2. База данных содержит факты вида: книга(автор, название, издательство, год_издания), украина(город).

    а) вывести весь список книг;

    б) вывести список книг авторов Пушкина и Чехова;

    в) вывести список книг, изданных в издательстве «Питер» не ранее 2000 года.

    3. Составить программу, реализующую авиасправочник. В справочнике содержится следующая информация о каждом рейсе: номер рейса, пункт назначения, время вылета, дни(ежедн., чет, нечет). Вывести:

    а) всю информацию из справочника;

    б) информацию о самолетах, вылетающих в заданный пункт по четным дням;

    в) информацию о самолетах, вылетающих ежедневно не позже указанного времени.

    4. Составить программу, реализующую географический справочник. В справочнике содержится следующая информация о каждой стране: название страны, название столицы, численность населения, географическое положение (Европа или Азия ). Вывести:

    а) всю информацию из справочника;

    б) информацию о странах, численность населения которых превышает заданное значение;

    в) информацию о европейских странах, численность населения которых не превышает заданное значение.

    5. Составить программу, реализующую словарь. В словаре содержится следующая информация: слово и его перевод (русские и английские слова). Реализовать вывод всего словаря, перевод с русского на английский, с английского на русский (с несколькими значениями).

    6. Составить программу, реализующую телефонный справочник. В справочнике содержится следующая информация о каждом абоненте: имя и телефон. Реализовать вывод всей информации из справочника, поиск телефона по имени, поиск имени по телефону

    7. База данных содержит факты вида: ученик(имя, класс) и увлекается(имя, хобби). Составить программу, которая выводит:

    а) список всех учеников и их увлечения;

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

    8. База данных содержит факты вида: ученик(имя, класс) и играет(имя, вид_спорта). Составить программу, которая:

    а) выводит список всех учеников заданного класса и вид спорта, которым они увлекаются;

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

    1. тему лабораторной работы;

    2. условие задачи;

    3. листинг программы;

    4. результаты ее тестирования с различными исходными данными.

    1.6 Арифметические вычисления

    Хотя Пролог не предназначен для решения вычислительных задач, его возможности вычислений аналогичны соответствующим возможностям таких языков программирования как Basic, C, Pascal.

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

    Таблица 1. Математические операции и функции в Прологе

    X + Y

    Сумма X и Y

    X – Y

    Разность X и Y

    X * Y

    Произведение X и Y

    X / Y

    Деление X на Y

    X mod Y

    Остаток от деления X на Y

    X div Y

    Целочисленное деление X на Y

    abs(X)

    Абсолютная величина числа X

    sqrt(X)

    Квадратный корень из X

    random(X)

    Случайное число в диапазоне от 0 до 1

    random(Int,X)

    Случайное целое число в диапазоне от 0 до Int

    round(X)

    Округление Х

    trunc(X)

    Целая часть Х

    sin(X)

    Синус X

    cos(X)

    Косинус X

    arctan(X)

    Арктангенс Х

    tan(X)

    Тангенс X

    ln(X)

    Натуральный логарифм X

    log(X)

    Логарифм Х по основанию 10


    Пример 1.

    Вычислить значение выражения Z=(2*X+Y)/(X-Y) для введенных X и Y.

    Решение:

    PREDICATES

    знач_выраж(real,real)

    CLAUSES

    знач_выраж(X,Y):-X<>Y, Z=(2*X+Y)/(X-Y),

    write("Z=",Z);

    write ("Делить на 0 нельзя!").

    GOAL

    Write("X="),readreal(X),

    Write("Y="),readreal(Y),знач_выраж(X,Y),nl.
    Комментарий: readreal – предикат для ввода действительных чисел
    Результат выполнения программы:

    1-й случай:

    X=4

    Y=4

    Делить на 0 нельзя!

    2-й случай:

    X=5

    Y=2

    Z=4

    Пример 2.

    Найти минимальное из двух введенных A и B.

    Решение:

    PREDICATES

    min(integer,integer,integer)

    CLAUSES

    min(A,B,A):-A<=B,!.

    min(A,B,B).

    GOAL

    Write("A="),readreal(A),Write("B="),readreal(B),

    min(A,B,Min),write("min=",Min),nl.
    Результат выполнения программы:

    1-й случай:

    A=5

    B=17

    min=5

    2-й случай:

    A=35

    B=18

    min=18

    3-й случай:

    A=8

    B=8

    min=8
    Пример 3.

    Определить, является четным или нечетным случайным образом выбранное число от 0 до 20.

    Решение:

    PREDICATES

    chet

    CLAUSES

    chet:-random(20,X),write(X),X mod 2=0,

    write(" - четное"),!.

    chet:-write( " - нечетное").

    GOAL

    chet.
    Результат выполнения программы:

    1-й случай:

    6 – четное

    2-й случай:

    19 – нечетное

    ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

    1. Составить программу для вычисления значения выражения Y=(X2+1)/(X-2) для введенного X.

    2. Составить программу для вычисления значения выражения S=2(X2+Y2)/(X+Y) для введенных X и Y.

    3. Составить программу для вычисления значения выражения z=exsinx +3lnx для введенного X.

    4. Составить программу для вычисления значения выражения y=ln(lg(sinx+ex))для введенного X.

    5. Составить программу для вычисления среднего арифметического двух введенных чисел.

    6. Составить программу для вычисления среднего геометрического двух введенных чисел.

    7. Составить программу для проверки введенного натурального числа на четность.

    8. Составить программу для проверки попадает ли введенное число X в заданный промежуток [a,b].

    9. Составить программу для выбора наименьшего из трех введенных чисел.

    10. Составить программу для выбора наибольшего из трех введенных чисел.


    Отчет о выполненной самостоятельной работе должен содержать:

    1. тему лабораторной работы;

    2. условие задачи;

    3. листинг программы;

    4. результаты ее тестирования с различными исходными данными.

    1.7 Рекурсия

    Рекурсивная процедура – это процедура, вызывающая сама себя до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию. Такое условие называют граничным. Рекурсивное правило всегда состоит по крайней мере из двух частей, одна из которых является нерекурсивной. Она и определяет граничное условие.

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

    База данных содержит следующие факты:

    roditel(ivan,oleg).

    roditel(inna,oleg).

    roditel(oleg,dima).

    roditel(oleg,marina).

    Составить рекурсивное правило предок и определить всех предков и их потомков.

    Решение:

    DOMAINS

    name=string

    PREDICATES

    roditel(name,name)

    predok(name,name)

    CLAUSES

    roditel(ivan,oleg).

    roditel(inna,oleg).

    roditel(oleg,dima).

    roditel(oleg,marina).

    predok(X,Z):-roditel(X,Z). % нерекурсивная часть правила

    predok(X,Z):-roditel(X,Y), % рекурсивная часть правила

    predok(Y,Z).

    GOAL

    predok(X,Y),

    write("Рredok -",X," Еgo potomok-",Y),nl,fail.
    Результат выполнения программы:

    Рredok -ivan Еgo potomok-oleg

    Рredok -inna Еgo potomok-oleg

    Рredok -oleg Еgo potomok-dima

    Рredok -oleg Еgo potomok-marina

    Рredok -ivan Еgo potomok-dima

    Рredok -ivan Еgo potomok-marina

    Рredok -inna Еgo potomok-dima

    Рredok -inna Еgo potomok-marina
    Пример2. Вычисление факториала.

    Решение:

    PREDICATES

    fact(integer,integer)

    CLAUSES

    fact(0,1):-!. % Факториал нуля равен единице

    fact(N,F):- N1=N-1, % уменьшаем N на единицу,

    fact(N1,F1), % вычисляем факториал нового числа,

    F=N*F1. % а затем умножает его на N

    GOAL

    write("N="),readint(N),fact(N,F),write("F=",F),nl.
    Результат выполнения программы:

    1-й случай:

    N=0

    F=1

    2-й случай:

    N=1

    F=1

    3-й случай:

    N=4

    F=24
    Пример 3

    Составить программу для вычисления Y=Xn, X, n – целые числа

    Решение:

    Составим правило stepen, состоящее из 3-х частей.

    1-я часть правила (нерекурсивная) определяет, что Х0=1.

    2-я часть правила (рекурсивная) вычисляет Хn для положительного n.

    3-я часть (рекурсивная) - вычисляет Хn для отрицательного n (добавляется необходимое условие Х<>0)
    PREDICATES

    stepen(real,real,real)

    CLAUSES

    stepen(X,0,1):-!.

    stepen(X,N,Y):-N>0,N1=N-1,stepen(X,N1,Y1),Y=Y1*X,!.

    stepen(X,N,Y):-X<>0,K=-N,stepen(X,K,Z),Y=1/Z.

    GOAL

    write("X="),readreal(X),

    write("N="),readreal(N),

    stepen(X,N,Y),write("Y=",Y),nl.
    Результат выполнения программы:

    1-й случай:

    X=3

    N=2

    Y=9

    2-й случай:

    X=2

    N=-2

    Y=0.25
    Пример 4 . Ханойские башни

    Имеется три стержня: A, B и C. На стержне А надеты N дисков разного диаметра, надетые друг на друга в порядке убывания диаметров. Необходимо переместить диски со стержня А на стержень С используя В как вспомогательный, если перекладывать можно только по одному диску и нельзя больший диск класть на меньший.

    Решение:

    Составим правило move, определяющее порядок переноса дисков.

    1-я (нерекурсивная) часть правила определяет действие, если на стержне находится 1 диск.

    2-я (рекурсивная) часть правила перемещает сначала верхние N-1 диск на стержень B, используя С как вспомогательный, затем оставшийся диск на стержень C и, наконец, диски со стержня B на C, используя А как вспомогательный.

    PREDICATES

    move(integer,char,char,char)

    CLAUSES

    move(1,A,B,C):-

    write("Перенести диск с ",A," на  ",C),nl,!.

    move(N,A,B,C):-

    M=N-1,move(M,A,C,B),

    write("Перенести диск с ",A," на  ",C),nl,

    move(M,B,A,C).

    GOAL

    write("Ханойские башни"), nl,

    write("Количество дисков:"), readint(N),nl,

    move(N,'A','B','C').

    Результат выполнения программы:

    Ханойские башни

    Количество дисков:3
    Перенести диск с A на C

    Перенести диск с A на B

    Перенести диск с C на B

    Перенести диск с A на C

    Перенести диск с B на A

    Перенести диск с B на C

    Перенести диск с A на C
    1   2   3   4   5   6   7   8


    написать администратору сайта