rolisz's site

Rezolvare subiect licență 2013

This one.

Ex 1.

class Produs(object):
    def __init__(self, denumire):
        self._denumire = denumire

    def get_denumire(self):
        return self._denumire

    def afisare(self):
        print self._denumire

class ProdusPerisabil(Produs):
    def __init__(self, denumire, valabilitate):
        self._valabilitate = valabilitate
        super(ProdusPerisabil, self).__init__(denumire)

    def afisare2(self):
        self.afisare()
        print self._valabilitate

if __name__ == '__main__':
    l = [Produs("Bec"), ProdusPerisabil("Branza", 60), Produs("Cana")]
    i = raw_input("Dati denumirea")
    for p in l:
        if p.get_denumire() == i:
            p.afisare()
        if p.get_denumire() > i:
            break

d.

Creare(l, e1, e2, ..., e_n): Pre­condiții: l - listă vidă, e1, e2, ... e_n - obiecte Post­condiții: e1, e2, ..., e_n sunt în această ordine în l

Iterator(l, i): Pre­condiție: l - lista valida Post­condiție: i iterator pe l

  1. Tabele baza de date

Tabelele sunt în prima formă normală pentru că nu au atribute repetitive. Sunt în a două formă normală pentru că sunt în 1NF și toate atributele neprime sunt complet dependent funcționale de chei. Sunt în 3NF pentru că sunt în 2NF și toate atributele neprime nu sunt tranzitiv dependente de vreo cheie a unui tabel.

Edit: Mi s-a atras atenția că la tabelul „c­i­ti­tori_­doc­u­mente” câmpul id nu este necesar, ba chiar poate e greșit. Dar nu o să refac diagrama (pentru că lene și pentru că lipsă chef).

b.

SELECT * FROM `cititori` LEFT JOIN `cititori_documente` ON
`cititori`.`cod_citior` = `cititori_documente`.`cod_cititor`
LEFT JOIN `documente` ON `cititori_documente`.`cota_documente`
= documente`.`cota`
WHERE `documente`.`tip_document` = "raport de cercetare" AND NOT
EXISTS (
SELECT * FROM `cititori_documente`
LEFT JOIN `documente` ON `cititori_documente`.`cota_documente`
= `documente`.`cota`
WHERE `cititori_documente`.`cod_cititor` =
`cititori.`cod_cititor` AND `documente.`tip_document` =
"carte"
)

SELECT * FROM `cititori` LEFT JOIN `cititori_documente` ON
`cititori`.`cod_citior` = `cititori_documente`.`cod_cititor`
LEFT JOIN `documente` ON `cititori_documente`.`cota_documente`
= `documente.`cota` WHERE `documente`.`cota` IN (SELECT cota
FROM documente LEFT JOIN autori_documente ON documente.cota =
autori_documente.cota_documente GROUP BY cota HAVING COUNT( * ) >5)

Cu algebra re­la­tion­ala:

$$ Pi_{c­i­ti­tori.cod_c­i­ti­tor, cititori.nume}(sig­ma_{­doc­u­mente.tip_­doc­u­ment=raport de cercetare}(citi­to­ri­o­times_{c­i­ti­tori.cod_citior= citi­tori_­doc­u­mente.cod_c­i­ti­tor} citi­tori_­doc­u­mente otimes_{citi­tori_­doc­u­mente.co­ta_­doc­u­mente=documente.cota} documente - sig­ma_{­doc­u­mente.tip_­doc­u­ment='carte'}(citi­to­ri­o­times_{c­i­ti­tori.cod_citior= citi­tori_­doc­u­mente.cod_c­i­ti­tor} citi­tori_­doc­u­mente otimes_{citi­tori_­doc­u­mente.co­ta_­doc­u­mente=documente.cota} documente) $$

$$ Docs = Pi_{­doc­u­mente.cota}(gam­ma_{{­count(*)} group by {au­tori_­doc­u­mente.id_autori} hav­ing{­count(*) > 5}} (doc­u­menteo­times_{­doc­u­mente.cota=au­tori_­doc­u­mente.co­ta_­doc­u­mente} au­tori_­doc­u­mente)) Pi_{c­i­ti­tori.cod_c­i­ti­tor, cititori.nume}(sig­ma_{c­i­ti­tori_­doc­u­mente.cota in Docs}(citi­to­ri­o­times_{c­i­ti­tori.cod_citior= citi­tori_­doc­u­mente.cod_c­i­ti­tor} citi­tori_­doc­u­mente documente)) $$

  1. a. 1. i. copil1: 2, copil2: 3, copil3: 4 ii. copil1: 3, copil2: 2, copil3: 4 iii. copil1: 3, copil2: 4, copil3: 2 iv. copil1: 4, copil2: 2, copil3: 3 v. copil1: 4, copil2: 3, copil3: 2 vi. copil1: 2, copil2: 4, copil3: 3
  2. Deadlock, deoarece open-urile blochează până nu apare cineva care să facă operația opusă (citire/scriere).
  3. 3
  4. 7

b. 1. Se iterează peste toți parametrii de la linia de comandă. 2. Se verifică dacă paremetrul cu numărul de ordine A este format dintr-o singură cifră. Este trimis prin grep să fie vericat de expresia regulară ^[0-9]$. 3. i. 10 ii. 5 iii. 1 iv. 0

Feel free to suggest better solutions or im­prove­ments.