2018 ФиЛП Исб-3курс и Исб-3(ОЗ) ЛЕК=11шт Л/Р=8шт Зачет => Заключительное занятие 21.12.2018 - чтобы на нём получить Зачёт => нужно сдать все лабораторки по Функциональному программированию => из этого учебника: https://pcoding.ru/pdf/jsFuncCoding.pdf https://goo.gl/g6xQ6s рейтинг группы https://pcoding.ru/pdf/Prolog.pdf учебник по Прологу Если копировать программы из этого файла к себе и открывать в Прологе, то будут проблемы с кодировкой. Как преодолеть в Notepad++: 1) скопировать отсюда и вставить в пустой текстовый файл, 2) сначала преобразовать в ANSI (меню Кодировки / Преобразовать в ANSI) 3) потом меню Кодировки / Кодировки / Кириллица / OEM 866 4) теперь можно открывать в Prolog'е ============================================================ - ЛАБОРАТОРНЫЕ РАБОТЫ - ЛР1 Комбинаторика на фактах _1_ Теория: страницы из учебника 13-24. _2_ Вопросы: 1) виды предложений в Прологе стр.13-... 2) что такое предикат? стр.16 3) База данных, База знаний, Экспертная система. стр.17-18 4) если в программе на Прологе нет алгоритма, как же она работает? 5) унификация 6) бэктрекинг 7) зачем в Прологе нужны рекурсии 8) дана программа: DOMAINS i = integer PREDICATES t(i,i) CLAUSES t(0,1). t(X,Y):- 1=X, 3=Y. Если в окне Диалога сделать такой запрос: t(X,3), то какой будет ответ? _3_ Задания: https://pcoding.ru/prolog/res/2013_lr2.pdf Будем делать задачи с 1 по 8 любого варианта. к задаче № 7 PREDICATES f(integer) find(integer) CLAUSES % база фактов f(0). f(1). f(2). f(3). f(4). f(5). f(6). f(7). f(8). f(9). % база пpавил % найти тpехзначные числа, кpатные 99 или 121 find(Num):- f(A), f(B), f(C), Num = 100*A + 10*B + C, Num mod 121 = 0. % тpехзначное кpатное 121 find(Num):- f(A), f(B), f(C), Num = 100*A + 10*B + C, Num mod 99 = 0. % тpехзначное кpатное 99 ЛР2 Комбинаторика на рекурсии _1_ Теория: страницы из учебника 24-33. _2_ Вопросы: Что такое рекурсия и из чего она должна состоять? Как работает бэктрекинг? Чем отличается запуск из Диалогового окна и запуск из Внутренней цели? Поясните смысл литералов в Прологе: = ; , ! _3_ Задания: http://pcoding.ru/prolog/res/2013_lr3.pdf Нужно сделать все задачи с 1 по 6 любого варианта. Как подключать модули написано тут: учебник - https://pcoding.ru/pdf/Prolog.pdf Глава 2.4.2 - Организация модулей Пример программы и модуля (modul.txt) брать отсюда: -modul.txt- DOMAINS i = integer s = string r = real PREDICATES for(i,i,i) CLAUSES for(B, B, B):-!. for(A, B, A). for(A, B, N):- Aa = A + 1, for(Aa,B,N). -FOR.PRO- include "modul.txt" PREDICATES find(i,i,i) print CLAUSES find(A,B,Num):- for(A, B, Num), Num mod 33 = 0. print:- find(20,120,Num), write("Num=",Num), nl, fail. print. GOAL print. ЛР3 Динамические Базы Данных _1_ Теория: страницы из учебника Глава 3 - стр.78-87 или из методички https://pcoding.ru/prolog/res/labrab_prolog_4.pdf _2_ Вопросы: Что такое Динамическая База Данных? Из чего должна состоять ДБД? Как сохранить ДБД в файл? Как факты из файла загрузить в ДБД запущенной программы? _3_ Задания: брать из методички https://pcoding.ru/prolog/res/labrab_prolog_4.pdf Нужно сделать задание из Части 2 - Журнал учебной группы - стр.6-8 и выполнить задачи для самостоятельного исполнения - стр.9 ============================================================ РАЗДЕЛ: Функциональное программирование на JS ЛР4 Обработка массивов Читать учебник: https://pcoding.ru/pdf/jsFuncCoding.pdf Делать задания практикума там же по Теме №1. - lr_04.js - let modul = require("./modul.js"); let bin = "1101"; let dec; console.log("bin =", bin); dec = parseInt(bin, 2); console.log("dec =", dec); dec = modul.binToDec(bin); console.log("dec =", dec); console.log("dec = ", bin .split('') .map((elm)=>elm=+elm) .reverse() .reduce((acc,elm,ind)=>acc+elm*Math.pow(2,ind)) ); - modul.js - function binToDec(bin) { let dec = 0; let len = bin.length; for (let i=0; iy? x: y; } module.exports.binToDec = binToDec; bin = "1101"; // console.log( bin .split('') .map(elm=>+elm) .reverse() .reduce((acc,elm,ind)=>acc+elm*Math.pow(2,ind)) ); array = [1, 8, 3, 4, 6]; for (let index = 0; index < array.length; index++) { console.log(array[index]); } array.forEach(element=>{console.log(element)}); function print(str) { console.log(str); } array.map(print); //map reduce filter array.map(function (elm) { console.log(elm); }) array.map(elm=>console.log(elm)); str = "1752740"; //arr = str.split(''); console.log( str.split('') // массив .filter(num=>num%2!=0) .sort( (a,b)=>a-b ) .join(",") ); ЛР5 Работа с файлами в Node.js ЛР6 Экспертная система obj = { name: "Иванов Иван", age: 22, getName: function (arg) { return this.name.split(' ')[arg]; }, check: () => this.age>17? "приз": "не приз" }; // найти оштбку вывода console.log(obj.getName(1), obj.getName(0)); console.log(obj.check()); console.log(obj.age); ============================================================ - ЛЕКЦИИ - Лекция 1 - 03 09 18 - Декларативное программирование Алгоритмическое программирование Программирование без алгоритма Обзор технологий программирования Унификация - сопоставление Пролог Prolog База фактов + База правил = База знаний Программа в Прологе - это База знаний Диалоговый режим Пример программы: PREDICATES num(integer) find(integer) CLAUSES % база фактов num(14). num(112). num(777). num(334). % база пpавил find(Num):- num(Num), Num>99, Num<1000, Num mod 2 = 0. Лекция 2 - 10 09 18 - Комбинаторика на фактах write nl GOAL Внутренняя и внешняя цели Управление откатом 1=2 или fail Найти двузначное число, сумма цифр которого равна 10. Перебрать все факты, перебрать правила Можно ли подсчитать кол-во правильных решений? DOMAINS i = integer PREDICATES num(i) find(i) print ttt CLAUSES % база фактов num(14). num(112). num(777). num(334). % база пpавил find(Num) :- num(Num), Num>99, Num<1000, Num mod 2 = 0. print:- num(Num), write(Num), nl, fail. print. ttt:- write("+++"),nl, print, write("---"). GOAL ttt. PREDICATES f(integer) find(integer) CLAUSES % база фактов f(0). f(1). f(2). f(3). f(4). f(5). f(6). f(7). f(8). f(9). % база пpавил find(Num):- f(A), f(B), Num = 10*A+B, Num>9, Num mod 17 = 0. % двузначное кpатное 17 Лекция №3 - 16.09.18 - Рекурсия и перебор без фактов Разобрать задачу № 7 - показать перевызов PREDICATES f(integer) find(integer) CLAUSES % база фактов f(0). f(1). f(2). f(3). f(4). f(5). f(6). f(7). f(8). f(9). % база пpавил % найти тpехзначные числа, кpатные 99 или 121 find(Num):- f(A), f(B), f(C), Num = 100*A + 10*B + C, Num mod 121 = 0. % тpехзначное кpатное 121 find(Num):- f(A), f(B), f(C), Num = 100*A + 10*B + C, Num mod 99 = 0. % тpехзначное кpатное 99 Максимум из двух / из трёх - тоже с перевызовом Призывник switch break - показать отсечение Одно предложение/два предложения - литерал ; Повторитель головы Структура предложения и виды предложений Эмуляция if then else case/switch for И ИЛИ Начать про рекурсию Лабиринт - с презентации Факториал - сделать Цикл for - сделать Ещё примеры программ с лекции 3: DOMAINS s = string i = integer PREDICATES fact(s,i) priz(s,s) check(i,s) CLAUSES fact("WWWWW", 15). fact("RR", 22). fact("EEE", 33). fact("U", 19). priz(Name, Kat):- fact(Name, Age), check(Age, Kat). check(Age, Kat):- Age<18, Kat="молодой",!; Age<28,"пpизывник"=Kat,!; "дембель"=Kat. DOMAINS r = real PREDICATES fact(r,r) CLAUSES fact(X,Res):- X=1,Res=1,!; Xx=X-1, fact(Xx,ResTemp), Res=ResTemp*X. DOMAINS i = integer PREDICATES for(i,i,i) CLAUSES for(B,B,B):-!. for(A,B,A). for(A,B,Res):- Aa=A+1, for(Aa,B,Res). % find(A,B,Num):- for(A,B,Num), Num mod 17 = 0. % fail Лекция 4 - Динамические Базы Данных Числа Фибоначчи Диалог и makewindow Анонимная переменная (max, retractall, readchar) DOMAINS i = integer r = real PREDICATES fib(i,r) DATABASE db(i,r) CLAUSES fib(N,1):- N<=2,!. fib(N,F):- db(N,F),!. fib(N,F):- N1=N-1, fib(N1,F1), N2=N-2, fib(N2,F2), F=F1+F2, assert(db(N,F)). GOAL retractall(_), makewindow(1,12,7," window ",1,1,18,32), clearwindow(), consult("fibbd.txt"), fib(44,Res), cursor(2,2), write(Res), save("fibbd.txt"). Базовые механизмы Логического программирования Унификация БэкТрекинг Рекурсия Работа машины вывода при: - наличии на фактов - отсутсвии фактов Управление машиной вывода Откат Отсечение ИСб-2018 о/з ЛЕК=9шт Л/Р=6шт ЭКЗАМЕН список группы | 1 2 3 4 5 6 К Эк ---------------- Pr Pr Pr JS JS ЭС 1 Вербицкий Р.В. 5 5 1 1 1 1 2 Елисеев С.В. 5 5 1 3 Котельников П.Ю. 5 5 1 1 1 1 4 Мальцев А.А. 5 5 5 Парфенов Я.А. 5 5 1 6 Петрова И.Ю. 5 5 1 1 1 1 7 Сидякин И.Ю. 5 0 8 Харламов Д.О. 5 0 9 Чернова А.С. 5 0 Логическое программирование - Prolog Тема 1. Унификация. Тема 2. Бэктрекинг. Перебор на фактах. Тема 3. Рекурсия. Тема 4. Динамические базы данных. Тема 5. Экспертные системы. Функциональное программирование - js + python Тема 6. js в консоли и браузере Тема 7. Экспертная система в js Тема 8. функциональный стиль Тема 9. обработка массивов Лекция 3 -modul.txt- DOMAINS i = integer s = string r = real PREDICATES for(i,i,i) CLAUSES for(B, B, B):-!. for(A, B, A). for(A, B, N):- Aa = A + 1, for(Aa,B,N). -FOR.PRO- include "modul.txt" PREDICATES find(i,i,i) print CLAUSES find(A,B,Num):- for(A, B, Num), Num mod 33 = 0. print:- find(20,120,Num), write("Num=",Num), nl, fail. print. GOAL print. -mwc12.PRO- include "modul.txt" PREDICATES find(i,i,i,i,i) print CLAUSES find(A, B, M, W, C):- for(A, B, M), for(A, B, W), for(A, B, C), 12=M+W+C, 12=M*4+W*0.5+C*0.25. print:- find(0,12, M, W, C), write(" M=",M, " W=",W, " C=",C), nl, fail. print. GOAL print. Лекция 5 - 06.10.2018 - ЭС Презентация - https://pcoding.ru/prolog/lek/eks_sist.htm сначала Рекурсия + сохранение промежуточных результатов: https://codepen.io/pCoding/pen/JmRRBY /* вычисление чисел Фибоначчи рекурсия обычная и с сохранением промежуточных результатов */ var fib = [0,1,1]; for (let i = 0; i <= fib.length; i++) { document.write(fib[i],"
"); } function fib_rec(n) { return n<3? 1: fib_rec(n-2)+fib_rec(n-1); } function fib_rec_arr(n) { if (fib[n]===undefined) fib[n] = fib_rec_arr(n-2)+fib_rec_arr(n-1); return fib[n]; } n = 43; // 43= 8 сек для fib_rec document.write( fib_rec_arr(n) ); ЛАБОРАТОРНЫЕ РАБОТЫ ЛР3 Динамические Базы Данных _1_ Теория: страницы из учебника Глава 3 - стр.78-87 или из методички https://pcoding.ru/prolog/res/labrab_prolog_4.pdf _2_ Вопросы: Что такое Динамическая База Данных? Из чего должна состоять ДБД? Как сохранить ДБД в файл? Как факты из файла загрузить в ДБД запущенной программы? _3_ Задания: брать из методички https://pcoding.ru/prolog/res/labrab_prolog_4.pdf Нужно сделать задание из Части 2 - Журнал учебной группы - стр.6-8 и выполнить задачи для самостоятельного исполнения - стр.9 |||||||||||||||||||||||||||| js + функциональное программирование |||||||||||||||||||||||||||| Тема 6 как работать с js через браузер как работать с js в консоли как передать аргументы внутрь программы start.bat как сделать свой модуль - для браузерной версии - для node.js как работать с файлами сложности асинхронного ввода с консоли для пользователя пишем ЭС Лекция let bin = "1101"; let dec; console.log("bin =", bin); dec = parseInt(bin, 2); console.log("dec =", dec); dec = binToDec(bin); console.log("dec =", dec); function binToDec(bin) { let dec = 0; for (let i=0; i 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 ||||||||||||||||||||||| lr_00.js let modul = require("./modul.js"); let bin = "1101"; let dec; console.log("bin =", bin); dec = parseInt(bin, 2); console.log("dec =", dec); dec = modul.binToDec(bin); console.log("dec =", dec); modul.js function binToDec(bin) { let dec = 0; let len = bin.length; for (let i=0; iy? x: y; } module.exports.binToDec = binToDec; Источник: https://www.sport-express.ru/football/L/russia/premier/2017-2018/ место Команда И В Н П М О 1 Локомотив 30 18 6 6 41 - 21 60 2 ЦСКА 30 17 7 6 49 - 23 58 3 Спартак 30 16 8 6 51 - 32 56 4 Краснодар 30 16 6 8 46 - 30 54 5 Зенит 30 14 11 5 46 - 21 53 6 Уфа 30 11 10 9 34 - 30 43 7 Арсенал Т 30 12 6 12 35 - 41 42 8 Динамо 30 10 10 10 29 - 30 40 9 Ахмат 30 10 9 11 30 - 34 39 10 Рубин 30 9 11 10 32 - 25 38 11 Ростов 30 9 10 11 27 - 28 37 12 Урал 30 8 13 9 31 - 32 37 13 Амкар 30 9 8 13 20 - 30 35 14 Анжи 30 6 6 18 31 - 55 24 15 Тосно 30 6 6 18 23 - 54 24 16 СКА-Хабаровск 30 2 7 21 16 - 55 13 № Фамилия Имя Отчество Возраст Средний балл 1 Абрамович Петя Иванович 24 4.5 2 Кокорин Петро Петрович 18 3.8 3 Саакашвили Адольф Семёнович 33 4.1 4 Папов Коля Олич 19 4.4 5 Некто Оле Лукойе 14 3.3 База данных к Экспертной системе: живое плавает _кит _слон сделал человек на колесах 4 колеса _автомобиль с двигателем _мотоцикл _велосипед _телевизор _камень