rolisz's site

Rezolvare model subiect examen de licență

Subiectul este pe siteul facultății.

1. a.

class B(object):
def __init__(self, b=0):
self.b = b
def print(self):
print self.b

b.

class D(B):
def __init__(self, d="", b=0):
self.d = d
super(D, self).__init__(b)

def print(self):
print self.d, self.b

c.

def construire():
return [B(8), D("D5", 5), B(-3), D("D9", 9)]

d.

def filtreaza(l):
return filter(lambda x: x.b \> 6, l)

e. Creeare lista: creaza(l, e1, ... en) Pre­con­di­tii: e1, e2, ..., e_n sunt obiecte, n >= 0. Post­con­di­tie: l ii lista formata din e1, e2,... e_n.

Filtrare???

2. A.

DROP TABLE IF EXISTS \`Activitati\`;
CREATE TABLE \`Activitati\` (
\`cod_activitati\` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
\`descriere\` VARCHAR(50) ,
\`tip_activitate\` VARCHAR(50) ,
PRIMARY KEY (\`cod_activitati\`)
);

DROP TABLE IF EXISTS \`Angajati\`;
CREATE TABLE \`Angajati\` (
\`cod_angajat\` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
\`nume\` VARCHAR(50),
\`echipa\` INTEGER,
PRIMARY KEY (\`cod_angajat\`)
);

DROP TABLE IF EXISTS \`echipe\`;
CREATE TABLE \`echipe\` (
\`id\` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
\`lider\` INTEGER NULL DEFAULT NULL,
PRIMARY KEY (\`id\`)
);

DROP TABLE IF EXISTS \`activitati_angajati\`;
CREATE TABLE \`activitati_angajati\` (
\`id\` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
\`activitate\` INTEGER NULL DEFAULT NULL,
\`angajat\` INTEGER NULL DEFAULT NULL,
PRIMARY KEY (\`id\`)
);

ALTER TABLE \`Angajati\` ADD FOREIGN KEY (echipa) REFERENCES \`echipe\`
(\`id\`);
ALTER TABLE \`echipe\` ADD FOREIGN KEY (lider) REFERENCES \`Angajati\`
(\`cod_angajat\`);
ALTER TABLE \`activitati_angajati\` ADD FOREIGN KEY (activitate)
REFERENCES \`Activitati\` (\`cod_activitati\`);
ALTER TABLE \`activitati_angajati\` ADD FOREIGN KEY (angajat)
REFERENCES \`Angajati\` (\`cod_angajat\`);

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.

B. i.

SELECT \* FROM \`angajati\` LEFT JOIN \`activitati_angajati\` ON
\`angajati\`.\`cod_angajat\` = \`activitati_angajati\`.\`angajat\`
LEFT JOIN \`activitati\` ON \`activitati_angajati\`.\`activitate\` =
\`activitati\`.\`cod_activitati\`
WHERE \`activitati\`.\`tip_activitate\` = "Proiectare" AND NOT
EXISTS (
SELECT \* FROM \`activitati_angajati\`
LEFT JOIN \`activitati\` ON \`activitati_angajati\`.\`activitate\` =
\`activitati\`.\`cod_activitati\`
WHERE \`activitati_angajati\`.\`angajat\` =
\`angajati\`.\`cod_angajat\` AND \`activitati\`.\`tip_activitate\` =
"Testare"
)

ii. ~~~~.sql SELECT * FROM angajati LEFT JOIN echipe ON angajati.cod_an­ga­jat = echipe.lider WHERE echipe.id = (SELECT echipa FROM angajati GROUP BY angajati.echipa HAVING COUNT( * ) >3)

3\. A.
Run - starea în care un proces are acces la procesor și rulează și
execută comenzi. Când îi expiră timeshare-ul, trece în starea ready,
când așteaptă să primească iarăși controlul procesorului. Dacă procesul
face comenzi de I/O, până acestea returnează, el va fi trecut în starea
waiting.
B.
~~~~.c
\#include <sys wait.h>
\#include <stdio.h>
\#include <stdlib.h>
\#include <unistd.h>
\#include <string.h>

int main(int argc, char \*argv[])
{
int pipefd[2];
int n = 1;
pid_t cpid;
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) {
int dn = 0;
if (read(pipefd[0], &dn, sizeof(dn)) \< 0)
exit(EXIT_FAILURE);
dn = dn\*2;
write(pipefd[1], &dn, sizeof(dn));
_exit(EXIT_SUCCESS);
} else {}
write(pipefd[1], &n, sizeof(n));
wait(NULL);
if (read(pipefd[0], &n, sizeof(n)) \< 0)
exit(EXIT_FAILURE);
printf("Numar dublu %d", n);
exit(EXIT_SUCCESS);
}
}

C. Scriptul initial numara cate linii are fiecare fisier .txt din folderul curent. Se itereaza peste fiecare fisier, cu wc -l se obtine numarul de linii din el in format "nr nu­me_­fisier". Cu cut se taie dupa spatiu si se ia prima coloana. Cu expr se face insumarea. Ca sa numere doar numarul de linii din fisierele cu mai mult de 10 linii:

N=0
for F in \*.txt; do
K=\`wc -l $F | cut -d " " -f1\`
if [ $K -ge 10 ]
then
N=\`expr $N + $K\`
fi
done
echo $N

untagged