Sunteți pe pagina 1din 8

FORMULAREA ENUNTURILOR UNOR PROBLEME PROLOG

-------------------------------------------

Formulati textul problemei pentru programul Prolog de mai jos,


text care sa includa si o lista de 5 cerinte posibile pentru programul
dat, pe care apoi sa le rulati. Explicati sectiunile care apar si rolul
lor.
==============================================================
Problema 1.
Se intalnesc 6 sportivi la o cafenea. Acestia incep sa discute despre ce
sporturi sunt pasionati. Astfel constata ca:
Lui Ellen ii place tennis,
Lui John ii place football,
Lui Tom ii place baseball,
Lui Eric ii place swimming,
Lui Mark ii place lui tennis,
Lui Bill ii plac sporturile placate si de Tom.

1. Sa se verifice ca lui bill ii place ce ii place lui tom. (Yes)


2. Sa se verifice ca lui tom ii place baseball.(Yes)
3. Sa se verifice ca lui mark ii place swimming. (No)
4. Sa se verifice ca lui eric ii place tennis.(No)
5. Sa se verifice ca lui bill ii place baseball. (Yes)
predicates
likes(symbol,symbol)

clauses
likes(ellen, tennis).
likes(john, football).
likes(tom, baseball).
likes(eric, swimming).
likes(mark, tennis).
likes(bill, Activity) if likes(tom, Activity).
=================================================================
Problema 2.
Exista 2 personae carora le plac anumite masini si le pot cumpara doar daca sunt
pentru vanzare. Despre aceste personae stim urmatoarele:
Numele persoanelor sunt Kelly si judy.
Lui Kelly ii place hot_rod.
Lui judy ii place pizza.
Ele pot cumpara doar daca sunt personae, obiectul cumparat este o masina, le
place acea masina iar masina este de vanzare.
Despre masini stim urmatoarele lucruri:
Hot_rod este o masina.
Lemon este o masina.
Lemon este de vanzare.
Hot_rod este de vanzare.
Mai avem un obiect numit pizza care este de vanzare.

1. Sa se verifice daca lui kelly ii place pizza. (No)


2. Sa se verifice daca lui judy ii place pizza.(Yes)
3. Sa se verifice daca Kelly poate cumpara o masina hot_rod.(Yes)
4. Sa se verifice daca judy poate cumpara pizza. (No-eroare)
5. Sa se verifice daca judy poate cumpara o masina lemon.(No)
predicates
can_buy(symbol, symbol)
person(symbol)

car(symbol)
likes(symbol, symbol)
for_sale(symbol)

clauses
can_buy(X, Y) :-
person(X),
car(Y),
likes(X, Y),
for_sale(Y).

person(kelly).
person(judy).

car(lemon).
car(hot_rod).

likes(kelly, hot_rod).
likes(judy, pizza).

for_sale(pizza).
for_sale(lemon).
for_sale(hot_rod).
================================================================
Problema 3.
Avem o biblioteca cu carti. Cartile au un titlu si un nr de pagini. Ele sunt
scrise de un autor si au primit un titlu. In biblioteca avem si nuvele lungi
care au un titlu. Stim anumite lucruri despre carti si nuvelele lungi:
Fleming a publicat titlul “DR NO”.
Melville a publicat titlul “MOBY DICK”.
“MOBY DICK” are 250 de pagini.
“DR NO” are 310 pagini.
O carte este o nuvela lunga daca are titlu, a fost scrisa de un autor avand
acelasi titlul si este o carte cu un numar de pagini mai mare de 300.

1. Sa se verifice daca “DR NO” a fost scrica de fleming. (yes)


2. Sa se verifice de cine a fost scrisa "MOBY DICK" (melville)
3. Sa se verifice daca "MOBY DICK" este o carte cu 250 de pagini.(Yes)
4. Sa se verifice daca "MOBY DICK" este o nuvela lunga. (No)
5. Sa se verifice daca “DR NO” este o nuvela lunga. (Yes)
domains
title, author = symbol
pages = integer

predicates
book(title, pages)
written_by(author, title)
long_novel(title)

clauses
written_by(fleming, "DR NO").
written_by(melville, "MOBY DICK").
book("MOBY DICK", 250).
book("DR NO", 310).
long_novel(Title) :-
written_by(_, Title),
book(Title, Length),
Length > 300.
=================================================================
Problema 4.
Avem un fastfood care serveste pizza si brussels_sprouts. Cunoastem
urmatoarele lucruri:
Unei personae ii place ceva.
Ceva are un anumit gust.
Si avem mancare.
Lui bill ii place ceva daca este mancare si are un gust bun.
Pizza are gust bun.
Brussels_sprouts au gust rau.
Brussels_sprouts este o mancare.
Pizza este o mancare.

1. Sa se verifice daca pizza are gust good.(yes)


2. Sa se verifice daca brussels_sprouts are gust good. (no)
3. Sa se verifice daca lui bill ii place pizza. (yes)
4. Sa se verifice daca lui bill ii place brussels_sprouts.(no)
5. Sa se verifice daca lui bill ii place burger.(no)
predicates
likes(symbol,symbol)
tastes(symbol,symbol)
food(symbol)

clauses
likes(bill, X) :-
food(X), tastes(X, good).

tastes(pizza, good).
tastes(brussels_sprouts, bad).

food(brussels_sprouts).
food(pizza).
===========================================================
Problema 5.
Avem personae si lucruri despre care se cunosc.
Unei personae ii place un lucru.
O persoana citeste.
O persoana este curioasa.
Lui john ii place wine.
Lui lane ii place skiing.
Cuiva ii plac books daca acel cineva citeste si este curios.
Lui lance ii plac books.
Lui lance ii plac films.
John citeste.
John este curios.

1. Sa se verifice daca lui john ii place wine.(yes)


2. Sa se verifice daca lui john ii place skiing.(no)
3. Sa se verifice daca lui john ii plac books.(yes)
4. Sa se verifice daca lui lance ii place books.(yes)
5. Sa se verifice daca luilance ii place films.(yes)

domains
name, thing = symbol
predicates
likes(name, thing)
reads(name)
is_inquisitive(name)

clauses
likes(john, wine).
likes(lance, skiing).
likes(Z, books) :-
reads(Z), is_inquisitive(Z).
likes(lance, books).
likes(lance, films).

reads(john).
is_inquisitive(john).
======================================================
Problema 6.
Avem o gradina zoologice despre care se cunosc:
Avem tipuri de animale.
Ceva este ceva.
Ceva traieste.
Ceva poate inota.
/’ avem o sectiune goal care va returna la rulare acelasi rezultat daca vom rula
codul de mai jos, in acest caz va rezulta “A shark can swim’/
Ungulate este un tip de animal.
Fish este un tip de animal.
Zebra este un ungulate.
Herring este un fish.
Shark este un fish.
Zebra traieste on_land.
Frog traieste on_land.
Frog traieste in_water.
Shar traieste in_water.
O creatura poate inota daca este un tipul lui este un animal si traieste in apa.

Pentru a Evita returnarea “a shark can swim” vom sterge sectiunea de goal.
1.sa se verifice daca frog poate swim.(no)
2. sa se verifce daca shark poate swim.(yes)
3. sa se verifce daca zebra este fish.(no)
4. sa se verifice daca shark este animal.(no)
5. sa se verifice daca shark traieste in_water.(yes)

predicates
type(symbol, symbol)
is_a(symbol, symbol)
lives(symbol, symbol)
can_swim(symbol)

goal
can_swim(What) ,
write("A ", What, " can swim.").

clauses
type(ungulate, animal).
type(fish, animal).
is_a(zebra, ungulate).
is_a(herring, fish).
is_a(shark, fish).

lives(zebra, on_land).
lives(frog, on_land).
lives(frog, in_water).
lives(shark, in_water).

can_swim(Y) :-
type(X, animal) ,
is_a(Y, X) ,
lives(Y, in_water).
==============================================================
Problema 7.
Avem o reprezenta de masini in care se cunosc urmatoarele lucruri:
Se poate cumpara o masina de un anumit model si culoare.
O masina este reprezentata de mode, culoare si un pret.
Culoare este reprezenta de numele culorii si un adjective.
Se poate cumpara o masina de un model si o culoare daca masina are un model,
culoare sip ret, culoare este sexy si pretul este mai mic de 25000.
Avem o masina maserati verde la un pret de 25000.
Avem o masina corvette negru la un pret de 24000.
Avem o masina corvette rosie la un pret de 26000.
Avem o masina porshe rosie la un pret de 24000.
Avem o culoare rosie sexy.
Avem o culoare neagra rea.
Avem o culoare verde ingrijit.

1. Sa se verifice ce masini sunt rosii si preturile lor.(corvette, 26000)


(porseh, 24000)
2. Sa se verifice daca se poate poate cumpara un Maserati verde.(no)
3. Sa se verifice daca se poate cumpara un corvette black.(no)
4. Sa se verifice daca se poate cumpara un corvette rosu.(no)
5. Sa se verifice daca se poate cumpara un porshe rosu.(yes)

predicates
buy_car(symbol, symbol)
car(symbol, symbol, integer)
colors(symbol, symbol)

clauses
buy_car(Model, Color) :-
car(Model, Color, Price),
colors(Color, sexy),!,
Price < 25000.

car(maserati, green, 25000).


car(corvette, black, 24000).
car(corvette, red, 26000).
car(porsche, red, 24000).
colors(red, sexy).
colors(black, mean).
colors(green, preppy).
=========================================================
Problema 8.
Se introduce un numar. Daca numarul este 1 se va afisa "You type 1.", daca
numarul este 2 se va afisa "You typed two.", daca numarul este 3 se va afisa
"Three is what you typed.”, iar orice alt numar va afisa “I don't know that
number!”.

1. Se introduce 1. (You type 1.)


2. Se introduce 2. (You typed two.)
3. Se introduce 3. (Three is what you typed.)
4. Se introduce 4. (I don't know that number!)
5. Se introduce 5. (I don't know that number!)
predicates
action(integer)

clauses
action(1):-
write("You type 1.").
action(2):-
write("You typed two.").
action(3):-
write("Three is what you typed.").
action(X):-
X<>1, X<>2, X<>3,
write("I don't know that number!").

goal
write("Type a number from 1 to 3: "),
readreal(Choice), /* readreal (integer) reads only an integer */
action(Choice). /* binds Choice to the integer typed *//*
============================================================================
Problema 9.
Avem un grup de personae despre care stim:
Doua personae pot fi prietene.
O persoana poate fi fata.
O persoana place alta persoana.
Bill si jane sunt prieteni daca jane este o fata iar lui bill ii place de jane.
Bill si jim sunt prieteni daca lui jim ii place baseball.
Bill si sue sunt prieteni daca sue este fata.
Mary este fata.
Jane este fata.
Sue este fata.
Lui jim ii place baseball.
Lui bill ii place de sue.
1. Sa se verifice daca mary este fata.(yes)
2. Sa se afiseze toate fetele.(mary, jane, sue)
3. Sa se verifice daca bill si jane sunt prieteni.(no)
4. Sa se verifice daca bill si jim sunt prieteni.(yes)
5. Sa se verifice daca bill si sue sunt prieteni.(yes)
predicates
friend(symbol, symbol)
girl(symbol)
likes(symbol, symbol)

clauses
friend(bill, jane) :-
girl(jane), likes(bill, jane), !.
friend(bill, jim) :-
likes(jim, baseball), !.
friend(bill, sue) :-
girl(sue).
girl(mary).
girl(jane).
girl(sue).
likes(jim, baseball).
likes(bill, sue).
==========================================================
Problema 10.
Avem o clasa de elevi, fiecare elev are un nume si o nota(gpa). Se cunosc:
Un student poate fi honor_student.
Fiecare student are un nume si o nota.
Un student poate fi in perioada de probation.
Un honor poate fi honor_student daca are un nume si o nota, nota sa fie mai amre
sau egala cu 3.5 si nu este in perioada de probation.
Betty Blue este un student cu nota 3.5.
David Smith este un student cu nota 2.0.
John Johnson este un student cu nota 3.7.
Betty Blue este in perioada de probation.
David Smith este in perioada de probation.

1. Sa se verifice ce student are nota 3.5. (Betty Blue)


2. Sa se verifice daca John Johnson este in perioada de probation. (no)
3. Sa se verifice daca Betty Blue este honor_student.(no)
4. Sa se verifice daca David Smith este honor_student.(no)
5. Sa se verifice daca John Johnson este honor_student. (yes)
domains
name = symbol
gpa = real

predicates
honor_student(name)
student(name, gpa)
probation(name)

clauses
honor_student(Name):-
student(Name, GPA),
GPA>=3.5,
not(probation(Name)).

student("Betty Blue", 3.5).


student("David Smith", 2.0).
student("John Johnson", 3.7).
probation("Betty Blue").
probation("David Smith").
==================================================================
Problema 11.
Avem un grup de personae care au carduri de credit si acestea pot face
cumparaturi. Se cunosc:
O persoana poate face cumparaturi.
O personae are un card de credit.
O persoana poate avea un card gol de credit.
O persoana poate face cumparaturi daca are un carded credit iar cardul de credit
nu este gol.
Chris are un card de credit visa.
Chris are un card de credit diners.
Joe are un card de credit shell.
Sam are un card de credit mastercard.
Sam are un card de credit citibank.
Chris are gol cardul de credit diners.
Chris are gol cardul de credit visa.
Sam are gol cardul de credit mastercard.

1. Sa se verifice ce carduri are chris. (visa, diners)


2. Sa se verice ce carduri sunt goale. (diners, mastercard, visa)
3. Sa se verifice daca lui Chris ii place sa faca cumparaturi. (no)
4. Sa se verifice daca lui joe ii place sa faca cumparaturi. (joe can shop
with shell credit card)p
5. Sa se verifice daca lui sam ii place sa faca cumparaturi. (sam can shop
with citibank credit card)

predicates
likes_shopping(symbol)
has_credit_card(symbol, symbol)
bottomed_out(symbol, symbol)

clauses
likes_shopping(Who) :-
has_credit_card(Who, Card),
not (bottomed_out(Who, Card) ) ,
write(Who, " can shop with the ",Card, " credit card.\n").

has_credit_card(chris, visa).
has_credit_card(chris, diners).
has_credit_card(joe, shell).
has_credit_card(sam, mastercard).
has_credit_card(sam, citibank).

bottomed_out(chris, diners).
bottomed_out(sam, mastercard).
bottomed_out(chris, visa).

S-ar putea să vă placă și