UL/FRI/VSP-RI/PJ/Izpiti/2007-02-05
Iz E-študij, proste zakladnice študentskega znanja
|
Izpit z dne 05.02.2007
Čas pisanja: 75 minut.
|
1. naloga
Sestavi a) dvoumno in b) nedvoumno kontekstno neodvisno gramatiko za vsa stevila v slovenscini od ena do sto (brez presledkov; npr. 87 se zapise "sedem in osem deset" pri cemer gramatike ne generira presledkov med besedami)
2. naloga
Dan je seznam studentov in njihoveih ocen vaj obeh semiraskih nalog iz PJ. En element seznama je trojcek ime-ocena1-ocena2. Ce katere od seminarskih nalog student ni opravil, je ocena enaka 0. Sestavi program, ki izpise tabelo, tako da za vsakega studenta izpise v vrstici ime, oceno prve seminarske, oceno druge seminarske, oceno iz vaj. Ocena iz vaj je povprecje ocen obeh seminarskih, zaokrozena navzgor, ce je druga seminarska bolje ocenjena od prve, sicer zaokrozena navzdol, ce pa katera od seminarskih ni narejena, je ocena enaka 5. Na koncu tabele naj bo se ena vrstcia, v kateri so izracunane povprecne ocene, brez zaokrozevanja (iz povprecnih ocen seminarskih so izvzete neocenjene).
npr.:
?- tabela([gregor-10-7, stanka-6-0, tone-9-10]). IME PRIIMEK DRUGA VAJE gregor 10 7 8 stanka 6 0 5 tone 9 10 10 POVPR 8.333 8.5 7.6666
Rešitev
tabela(Ime1-Sa1-Sb1, Ime2-Sa2-Sb2, Ime3-Sa3-Sb3) :-
povprecje(Sa1,Sb1,Povp1),
povprecje(Sa2,Sb2,Povp2),
povprecje(Sa3,Sb3,Povp3),
write('IME PRVA DRUGA VAJE'),nl,
write([Ime1, Sa1, Sb1, Povp1]),nl,
write([Ime2, Sa2, Sb2, Povp2]),nl,
write([Ime3, Sa3, Sb3, Povp3]),nl,
Psa is (Sa1+Sa2+Sa3)/3,
Psb is (Sb1+Sb2+Sb3)/3,
Ppov is (Povp1+Povp2+Povp3)/3,
write(['POVPR',Psa,Psb,Ppov]).
povprecje(Sa,Sb,Povp) :-
Sa > 0,
Sb > 0,
Sa < Sb,
PovpTemp is ((Sa+Sb)/2) - (((Sa+Sb)mod 2)/2),
Ost is ((Sa+Sb) mod 2)/2,
zaokrozi(0,Ost,PovpTemp,Povp);
Sa > 0,
Sb > 0,
PovpTemp is ((Sa+Sb)/2) - (((Sa+Sb)mod 2)/2),
Ost is ((Sa+Sb) mod 2)/2,
zaokrozi(1,Ost,PovpTemp,Povp);
Povp is 5.
zaokrozi(X,Ost,PovpTemp,Povp) :-
Ost < 0.5,
Povp is PovpTemp;
Ost > 0.5,
Povp is PovpTemp + 1;
X = 0,
Ost = 0.5,
Povp is PovpTemp + 1;
X = 1,
Ost = 0.5,
Povp is PovpTemp.
3. naloga
Sestavi sintakticni analizator v prologu z uporabo prologovih gramaticnih pravil, ki preveri, ce je izraz glede na gramatiko iz prve naloge sintakticno pravilen, in ce je, naj vrne tudi stevilcno vrednost.
npr.:
?- stevil([sedem, in, osem, deset],[],X). X = 87
4. naloga
S semaforji zelimo sprogramirati 5 enakih procesov, ki se izvajajo vzporedno in ki komunicirajo med seboj preko treh vmesnikov - kriticnih sekcij. Prvi vmesnik je kretnica, ki vsebuje podatek A ali B. A in B sta imeni drugega in tretjega vmesnika.
Vsak proces v nedogled ponavlja sledece korake: iz prvega vmesnika prebere vrednost in jo spremeni v nasprotno drugo vrednost (A v B ali B v A). Zatem vzame (in ga zbrise iz vmesnika) en podatek iz vmesnika, katerega ime je prebral v prvem vmesniku (ce je podatek na voljo, torej ce je izbrani vmesnik ni prazen), ga obedla in spremenjenega pusti v vmesniku (ce le-ta ni poln), katerega ime je zapisal v prvem vmesniku.
Na zacetku je v prvem vmesniku vrednost A v drugih dveh pa po 2 podatka, druga dva vmesnika imata prostora za 3 podatke.
Sestavi psevdokodo enega procesa z ustrezno zascito kriticnih sekcij, da ne pride do mrtve tocke!