B

Documente similare
1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Slide 1

E_d_Informatica_sp_MI_2015_bar_02_LRO

Subiectul 1

Programarea şi utilizarea calculatoarelor

Microsoft Word - Lab1a.doc

Microsoft Word - Curs_07.doc

Clasa IX 1. O lăcustă face salturi, fiecare salt în linie dreaptă şi de două ori mai lung ca precedentul. Poate vreodată lăcusta să revină în punctul

Paradigme de Programare

Prelegerea 3 În această prelegere vom învăţa despre: Clase speciale de latici: complementate. modulare, metrice, distributive şi 3.1 Semi-distributivi

Analiză statică Analiza fluxului de date 23 octombrie 2014

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Analiză de flux de date 29 octombrie 2012

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

ALGORITHMICS

SSC-Impartire

E_d_Informatica_sp_SN_2014_bar_10_LRO

BARAJ NR. 1 JUNIORI FRANŢA ianuarie Fie x şi y două numere întregi astfel încât 5x + 6y şi 6x + 5y să fie pătrate perfecte. Arătaţi că

tehnologii web

I. INTRODUCERE 1. Necesitatea studiului logicii Teodor DIMA În activitatea noastră zilnică, atunci când învăţăm, când încercăm să fundamentăm o părere

Communicate at your best - Manual - Cap 3 - RO

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Lab6LCD

Cursul 7 Formula integrală a lui Cauchy Am demonstrat în cursul precedent că, dacă D C un domeniu simplu conex şi f : D C o funcţie olomorfă cu f cont

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Paradigme de programare

Coman Marinela Furnizor program formare acreditat: CCD BRĂILA Denumire program: INFORMATICĂ ŞI TIC PENTRU GIMNAZIU Clasa a V-a Categorie: 1; Tip de co

Slide 1

Limbaje de Programare Curs 6 – Functii de intrare-iesire

MergedFile

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Secţiunea 5-6 avansaţi PROBLEMA 1 Concurs online de informatică Categoria PROGRAMARE 100 puncte NR Un număr natural nenul V care se plictisea singur,

Aggregating Data

COMENTARII FAZA JUDEŢEANĂ, 9 MARTIE 2013 Abstract. Personal comments on some of the problems presented at the District Round of the National Mathemati

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Microsoft Word - Algoritmi genetici.docx

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Logică computațională O introducere practică pentru studenți la informatică Note de curs Adrian Crăciun 24 ianuarie

Curs 10 Aplicaţii ale calculului diferenţial. Puncte de extrem 10.1 Diferenţiale de ordin superior S¼a trecem acum la de nirea diferenţialelor de ordi

DAN LASCU ADRIANA-LIGIA SPORIŞ ANDA OLTEANU PAUL VASILIU MATEMATICĂ. CULEGERE DE PROBLEME TIP GRILĂ PENTRU ADMITEREA ÎN ACADEMIA NAVALĂ MIRCEA CEL BĂT

1. a. Să se scrie un algoritm care să afişeze toate numerele de patru cifre care au cifra sutelor egală cu o valoare dată k, şi cifra zecilor cu 2 mai

1

MergedFile

Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Microsoft Word - cap1p4.doc

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

PowerPoint Presentation

Microsoft Word - Mapa 0.doc

Nr. 932 din Avizat ISJ Vâlcea, Inspector școlar informatică, Ciochină Luisa EXAMEN DE ATESTARE A COMPETENȚELOR PROFESIONALE A ABSOLVENȚILOR

I

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a ac

D.Rusu, Teoria măsurii şi integrala Lebesgue 6 MĂSURA LEBESGUE Cursul 5 Teorema 6.26 Există submulţimi ale lui R care nu sunt măsurabile Lebesgue. Dem

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Proiectarea Sistemelor Software Complexe

Analiz¼a Matematic¼a - Curs 6 M¼ad¼alina Roxana Buneci

Elemente de aritmetica

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

O teoremă de reprezentare (II) Marian TETIVA 1 Abstract. In this paper some (in general well-known) results on complete sequences are exposed, with ap

SECURITATE ȘI CRIPTOGRAFIE

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

Microsoft Word - D_ MT1_II_001.doc

PowerPoint-Präsentation

Microsoft Word - Mihailesc Dan_Test logica (1).doc

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

CONCURSUL DE MATEMATICǍ ISTEŢII D ARBORE EDIŢIA a X-a - 20 aprilie 2019 Clasa a IV-a BAREM DE CORECTARE ŞI NOTARE SUBIECTUL I Se punctează doar rezult

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

OLM_2009_barem.pdf

BAREM PROFIL UMANIST Subiectul 1 (40 de puncte) Nr Itemul Variante acceptabile Specificări Punctaj total 1. Rescrie, din lista propusă, un sinonim con

Microsoft Word - C05_Traductoare de deplasare de tip transformator

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Microsoft Word - lab_access.doc

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Microsoft Word - a5+s1-5.doc

Logică și structuri discrete Mulțimi Casandra Holotescu

PowerPoint Presentation

proiectarea bazelor de date

Slide 1

Curs7

Managementul Resurselor Umane

programă şcolară pentru clasa a 11a, liceu

Paradigme de programare

Modelarea si Simularea Sistemelor de Calcul

Electricitate II

Personal profile – Michael

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

în Tabletă convertibilă GHID DE UTILIZARE 8085 LKB001X CJB1FH002AZA

Subiecte_funar_2006.doc

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Probleme rezolvate informatica: Probleme rezolvate grafuri si a

PROIECT DIDACTIC DATE DE IDENTIFICARE Data: Școala : Școala Gimnazială Grigore Moisil Ploiești Clasa: a VI-a Profesor: Ilie Oana Magdalena Disciplina:

Aero-BCD, , Prof. L. Costache & M. Olteanu Notițe de Adrian Manea Seminar 5 Șiruri și serii de funcții. Serii de puteri 1 Șiruri de funcții D

PPSD

Investeşte în oameni Proiect cofinanţat din Fondul Social European prin Programul Operaţional Sectorial pentru Dezvoltarea Resurselor Umane

Transcriere:

F.I.A. Laboratorul numărul 3 Cătălin Stoean Unificarea şi recursivitatea Unificarea Unificarea reprezintă modul în care Prologul realizează potrivirile între termeni. La prima vedere, procesul de unificare pare explicat de fraza obiectul ţintă poate fi potivit obiectului sursă. Presupunerea implicită este că numai obiectul ţintă este modificat. Dar nu se întâmplă astfel: se încearcă atât modificarea obiectului ţintă, cât şi a obiectului sursă. De exemplu, dacă se încearcă potrivirea termenului autor(mihai, X) cu termenul autor(y, eminescu) am fi tentaţi să credem că unica substituţie care se face este X/eminescu. Unificarea realizează însă ambele substituţii: X/eminescu şi Y/mihai. În urma acestui proces, ambii termeni arată astfel: autor(mihai, eminescu). Concluzie: procesul de unificare se realizează în ambele sensuri. Exemple: X = marian. marian = andrei X = marian, X = Y. X = barbat(marian). X = Y. întoarce rezultat pozitiv (Yes). întoarce No pentru că nu pot fi potriviţi doi atomi distincţi. X = marian, Y = marian; întoarce Yes. întoarce Yes. întoarce Yes, iar daca mai târziu una din variabile ia o valoare şi cealaltă o va avea. Interogări Introduceţi următoarele interogări şi asiguraţi-vă că înţelegeţi de ce unificarea în unele cazuri reuşeşte, iar în unele nu: 2 + 1 = 3. f(x, a) = f(a, X). marian = marian. place(maria, X) = place(x, andrei). f(x, Y) = f(p, P). Recursivitatea Programarea în Prolog depinde foarte mult de această tehnică numită recursivitate. În principiu, recursivitatea implică definirea unui predicat în funcţie de el însuşi. Cheia care ne asigură că această tehnică are sens constă în aceea că întotdeauna trebuie să definim predicatul la o scală mai mică. Recursia de la nivelul algoritmilor este echivalentă cu demonstrarea prin inducţie din matematică. O definiţie recursivă (în orice limbaj, nu numai în Prolog) trebuie să aibă întotdeauna cel puţin două părţi: o condiţie elementară şi o parte recursivă. 1

Condiţia elementară defineşte un caz simplu, care ştim că este întotdeauna adevărat. Partea recursivă simplifică problema eliminând iniţial un anumit grad de complexitate şi apoi apelându-se ea însăşi. La fiecare nivel, condiţia elementară este verificată: dacă s-a ajuns la ea, recursivitatea se încheie; altfel, recursivitatea continuă. Vom ilustra recursivitatea prin următorul exemplu: discuta_despre(a, B) :- cunoaste(a, B). discuta_despre(x, Y) :- cunoaste(x, Z), discuta_despre(z, Y). Aceasta o putem explica într-o frază astfel: Poţi discuta despre cineva dacă o cunoşti pe persoana respectivă sau daca cunoşti pe cineva care discută despre ea. Ajungerea la o soluţie pentru o problemă dată depinde de posibilitatea de a opri recursivitatea la un anumit punct. Pentru a înţelege mai bine cum funcţionează recursivitatea putem să ne imaginăm că pentru exemplul de mai sus, se formează următorul arbore care are clauze ca noduri: Iata programul Prolog pe care îl puteţi testa: cunoaste(maria, ana). cunoaste(ana, mircea). cunoaste(mircea, mihai). discuta_despre(a, B) :- cunoaste(a, B). discuta_despre(x, Y) :- cunoaste(x, Z), discuta_despre(z, Y). Folosiţi următoarea interogare:? - discuta_despre(x, Y), write(x), write(' discuta despre '), write(y), nl, fail. Explicaţi rezultatul acestei interogări. 2

Exerciţii rezolvate 1. Calculaţi factorialul unui număr. Vom rezolva această problemă folosind următoarea funcţie recursivă: 1, dacă x = 0; fact(x) = fact(x - 1) * x, altfel În exemplul de faţă, putem recunoaşte condiţia elementară ca fiind fact(0) = 1; aceasta este condiţia care va stopa recursivitatea. Cunoscând această condiţie, putem scrie programul: factorial(0,1). factorial(n,f) :- N>0, N1 is N-1, factorial(n1,f1), F is N * F1. Pentru a calcula factorialul numărului 3, vom face o interogare după cum urmează:? factorial(3, F). Răspunsul va fi: F = 6. Următorul arbore este construit pentru interogarea factorial(3, F). Ca noduri are clauze care nu conţin variabile libere, ci instanţe ale acestora: O alta posibilitate de a realiza acest program este aceea de a folosi un predicat cu trei argumente astfel: factorial(0,f,f). factorial(n,a,f) :- N > 0, A1 is N*A, N1 is N -1, factorial(n1,a1,f). Interogarea o vom realiza în felul următor:? factorial(3, 1, F). Vom primi răspunsul F = 6. 3

Iată cum funcţionează acest program: al doilea argument este cel în care calculăm rezultatele parţiale; el porneşte de la valoarea 1 (cea dată în cadrul interogării). În final, variabila care reprezintă ultimul argument, va fi unificată cu variabila din cel de-al doilea argument, variabilă care va conţine rezultatul final. 2. Rezolvaţi problema turnurilor din Hanoi. Scopul acestui puzzle este de a muta n discuri de pe bara din stânga pe bara din dreapta folosind bara din centru ca pe una auxiliară. Important este că un disc mai mare nu poate fi aşezat pe un disc mai mic si la un moment dat poate fi mutat numai unul. Imaginea următoare arată care este configuraţia de pornire pentru n = 3. În continuare, programul recursiv care rezolvă acest puzzle: muta(1, X, Y, _) :- write('muta discul din '), write(x), write(' in '), write(y), nl. muta(n,x,y,z) :- N > 1, M is N - 1, muta(m,x,z,y), muta(1,x,y,z), muta(m,z,y,x). Interogarea va arăta astfel:? muta(3, stanga, dreapta, centru). Muta discul din stanga in centru Muta discul din dreapta in centru Muta discul din centru in stanga Muta discul din centru in dreapta Yes Prima clauză din program se referă la mutarea unui singur disc. Cea de a doua arată cum poate fi obţinută recursiv o soluţie. Să vedem mai bine cum raţionează sistemul atunci când avem interogarea muta(3, stanga, dreapta, centru). Avem N = 3, X = stanga, Y = dreapta, Z = centru: muta(3, stanga, dreapta, centru) are loc dacă: muta(2, stanga, centru, dreapta) şi (notez clauza cu *) muta(2, centru, dreapta, stanga). (notez clauza cu **) Mai departe, aceasta se poate scrie desfăşurat astfel: 4

muta(3, stanga, dreapta, centru) are loc dacă: muta(1, stanga, centru, dreapta) şi * muta(1, dreapta, centru, stanga) şi muta(1, centru, stanga, dreapta) şi muta(1, centru, dreapta, stanga) şi ** muta(1, stanga, dreapta, centru). Exerciţii 1. Definiţi un predicat Prolog care să calculeze suma primelor n numere naturale nenule. 2. Scrieţi un predicat Prolog care să calculeze pentru un n dat valoarea elementului x n din şirul: x n = 1 + 2 1 + 3 1 + + n 1 3. Următorul predicat calculează valorile funcţiei lui Ackerman: n + 1, dacă m = 0; ac: N N N, ac(m, n) = ac(m-1, 1), dacă n = 0; ac(m 1, ac(m, n - 1)), altfel Scrieţi un predicat care să calculeze valoarea acestei funcţii într-un anumit punct. 4. Scrieţi un predicat Prolog care să calculeze cel mai mare divizor comun dintre două numere. 5. Definiţi un predicat Prolog care să calculeze valoarea funcţiei lui Fibonacci întrun punct.(f(1) = f(2) = 1; f(n) = f(n - 2) + f(n - 1) pentru n >= 3). 6. Scrieţi un predicat Prolog care să calculeze n m, unde n şi m sunt numere naturale. 7. Să se verifice dacă un număr k este divizor al unui număr n. Construiţi apoi un predicat Prolog care să afişeze toţi divizorii unui număr natural n. Notă: predicatul predefinit mod ne dă restul împărţirii primului operand la cel de-al doilea. 5