Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_lab_Visual_Prolog программисты дневное.doc
Скачиваний:
3
Добавлен:
02.05.2019
Размер:
451.58 Кб
Скачать
  1. Дан набір фактів, які мають такі відомості про книги: прізвище автора, назву книги і рік видання. Знайти і вивести на екран по кожному автору назви його книг і їх кількість.

  2. Дан файл з фактами, які мають відомості з прайс - паперів магазинів по продажу комп’ютерів: назва пристрою, параметри, вартість, № магазину. Визначити і вивести на екран діапазон вартості для кожного виду комплектуючих комп’ютеру, які продаються в магазині.

Варіант 25

  1. Дан набір фактів, які мають такі відомості про книги: прізвище автора, назву книги і рік видання. Знайти кількість книг, виданих кожним автором у вказаному році, а також вивести прізвища авторів, які видавалися в цьому році. Роки задавати діапазоном і перебирати їх програмно.

  2. Дан файл з фактами, які мають відомості з прайс - паперів магазинів по продажу комп’ютерів: назва пристрою, параметри, вартість, № магазину. Визначити і вивести на екран № магазинів у яких вартості кожного виду комплектуючих комп’ютеру найменші.

1.4 Зміст звіту

Звіт повинен мати наступні пункти:

1.4.1 Тему, мету роботи

1.4.2 Завдання

1.4.3 Текст програми

1.4.4 Вхідний дані і результат роботи програми

При захисті лабораторних робіт враховується:

  • якість програми;

  • знання роботи програми;

  • знання матеріалу лекцій за темою.

1.5 Контрольні питання

1.5.1 Чим відрізняються декларативні мови програмування від алгоритмічних мов?

1.5.2 З яких секцій складається програма на Пролозі? Вкажіть їх призначення.

1.5.3 Які типи тверджень ви знаєте? В якій формі вони записуються?

1.5.4 Як Visual Prolog визначає чи відноситься факт до статичної бази даних або динамічної?

1.5.5 Які ви знаєте предикати роботи з динамічною базою даних?

1.5.6 Які є правила підготовки фактів для завантаження їх під час роботи програми?

1.5.7 Що таке механізм звороту?

1.5.8 Що відбувається зі змінними під час роботи механізму звороту?

1.5.9 Що таке анонімна змінна? Для чого вона використовується?

2 Лабораторна робота № 2 робота з рядками методом висхідної рекурсії

2.1 Мета роботи

Мета лабораторної роботи:

  • навчитися використовувати стандартні предикати роботи з рядками;

  • навчитися писати та налагоджувати програми, які оброблюють рядки методом висхідної рекурсії.

2.2 Методичні вказівки до виконання лабораторної роботи

2.2.1 Виконайте приклади, які подано нижче. Переконайтесь, що ви розумієте як працюють стандартні предикати роботи з рядками і як працює процедура, що написана висхідним методом рекурсії.

Приклад 1

Введіть з клавіатури рядок. Сформуйте новий рядок з першого та останнього символу рядку, який введено і виведіть новий рядок на екран.

Predicates

nondeterm Go (string, string)

Goal

Readln ( Str), go(Str, Str1),!.

Clauses

Go(Str,Str1):-str_len(Str,Len),Len<=1,Str1="",write("Довжина рядку< 2 ").

Go (Str, Str1):-subchar(Str,1, C), str_len(Str, L),

L1=L-1,frontstr(L1,Str,_,C1),

frontchar(Str1,C,C1).

Перший предикат subchar одержує 1ий символ введеного рядку і розміщує його в змінну С. Предикат str_len визначає довжину введеного рядку і розміщує її в змінну L. Предикат Frontstr відокремлює від рядку рядок, який містить останній символ і розміщує його в змінну С1. Предикат frontchar приєднує перший символ до рядку з останнім символом.

Зверніть увагу, що одержаний перший символ рядку типу char, а одержаний останній символ рядку типу string. Предикат frontchar працює на приєднання або відокремлення символу залежно від конкретизації змінних.

Зверніть увагу, що після виконання програми утиліта Test Goal повертає значення всіх змінних з секції Goal.

Приклад 2

Введіть з клавіатури рядок зі слів. Сформуйте новий рядок зі слів введеного рядку, які починаються на англійську букву „а” і виведіть новий рядок на екран.

Predicates

nondeterm Do_new (string, string, string)

Goal

Readln(St),concat(" ",St,Str), do_new(Str, "", Res),!.

Clauses

Do_new("", Str1, Str1):-write(Str1),nl.

Do_new(Str, Str1, Res):- fronttoken(Str,W,R),

frontchar(W, 'a', _),concat(Str1," ", Str2),

concat(Str2,W, Str3),!,do_new(R, Str3, Res);

fronttoken(Str,_,R), !,do_new(R, Str1, Res).

Вводиться рядок і до його початку приєднується пропуск. Новий рядок подається порожнім.

Правило має дві гілки.

По першій гілці оброблюються слова, що починаються з букви „а”. Перший предикат fronttoken відокремлює слово від рядку. Предикат frontchar перевіряє чи починається слово на букву „а”. Предикат concat приєднує слово, що починається на букву „а” в кінець рядку, що одержується. Після чого процедура Do_new викликається з залишком рядку і одержаним новим рядком.

По другій гілці оброблюються слова, що не починаються з букви „а”. Предикат fronttoken відокремлює слово від рядку. Після чого процедура Do_new викликається з залишком рядку і тим самим новим рядком.

Граничною умовою є факт, в якому рядок, що вводився, стає порожнім.

Зверніть увагу, що третій аргумент – змінна, яка залишається весь час вільною. Для привласнювання результату третьому аргументу, треба вказати для другого і третього аргументу факту однакові імена.

2.2.2 Виконайте завдання свого варіанту за № в журналі. Налагодьте вашу програму за допомогою трасування. Під час трасування переконайтесь, що ваша програма не має зайвих розв'язків або не виконує непотрібних дій. Використовуйте для цього відсік.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]