Documente Academic
Documente Profesional
Documente Cultură
ALGORITMI
Realizator:
Mrcu Lucian Dan
FACULTATEA DE MATEMATIC I INFORMATIC
secia:Informatic romn
an I,grupa 211
Profesor ndrumtor:
Czibula Gabriela
creeaza (mdo, R)
distruge(mdo)
pre: mdoMDO
post:spatiul alocat pentru mdo a fost eliberat
adauga(mdo, c, v)
sterge(mdo, c, v)
cauta(mdo, c, l)
functieDispersie(mdo, c)
pre: mdoMDO
SAU
c TCheie
post: returneaza c%M
actualizeazaPrimLiber()
pre: post: actualizeazaPrimLiber<-prima locatie libera;
iterator(mdo,i)
pre: mdoMDO
multimeaCheilor(mdo, m)
pre: mdoMDO
creeaza(i, mdo)
pre: mdo: MultiDictionarOrdonat;
post: s-a creat iteratorul i vid, iar curent refer primul element din mdo;
getCurent(i, e)
pre: i: IteratorMultidictionar
post: e:TElement este elementul curent din iteratie;
pozitie_vida(i)
pre: i: IteratorMultidictionar
post: valid=true daca curent refera o pozitie valida din mdo;
valid=false in caz contrar;
urmator(i)
pre: i: IteratorMultidictionar;
post: curent refera urmatorul element din colectie;
returneaza_cheie(i)
pre: i: IteratorMultidictionar;
post: returneaza cheia elementului curent din iteratie;
returneaza_valoare(i)
pre: i: IteratorMultidictionar;
post: returneaza valoarea elementului curent din iteratie;
2.Implementare TAD
subalgoritm adauga(TElement x)
daca prim=NIL atunci
aloca(nou);
prim<-ultim;
ultim<-nou;
dim<-dim+1;
altfel
daca(compara(x,[prim].elem)) atunci
aloca(nod);
aloca(nou);
[p].prec<-nou;
prim<-nou;
dim<-dim+1;
daca(compara(x, [prim].elem))atunci
aloca(p);
p<-prim;
cat timp([p].urm!=NULLsi compara(x,[[prim].urm]elem)) executa
p=[p].urm;
sf cat_timp
daca([p].urm=NIL){
aloca(nou);
[p].urm<-nou;
ultim<-nou;
dim<-dim+1;
altfel
aloca(nou)
[[p].urm].prec<-nou;
[p].urm<-nou;
dim<-dim+1;
sf_daca
sf_daca
sf_daca
sf_subalgorimt
Complexitate adaugare:
CazFavorabil:(1);
CazMediu: (n);
CazDefavorabil: (n);
Subalgoritm cauta(TElement x)
Aloca(q);
q<-prim;
cat timp(q!=NIL && [x]operator=([q].elem)=false) executa
q=[q].urm;
sf_cat_timp
daca(q=NIL) atunci
return NIL;
return [q].elem;
sf_subalgoritm
subalgoritm stergere(TElement x)
aloca(q);
q<-prim;
cat timp(q!=NIL && [x].operator=([q].elem)=false) executa
q<-[q].urm;
sf_cat_timp
daca(q=NIL)atunci
return NIL;
altfel
daca([q].prec=NIL && [q].urm=NIL)atunci
e<-[q].elem;
dealoca(prim);
prim<-NIL;
ultim<-NIL;
dim<-dim-1;
return e;
altfel
daca([q].prec!=NIL && [q].urm=NIL)atunci
e<-[q].elem;
q<-[ultim].prec;
dealoca(ultim);
ultim<-q;
[ultim].urm=NIL;
Dim<-dim-1;
return e;
altfel
daca([q].prec=NIL && [q].urm!=NIL)atunci
e=[q].elem;
q =[prim].urm;
dealoca(prim);
prim<-q;
[prim].prec=NIL;
Dim<-dim-1;
return e;
altfel
e=[q].elem;
[[q].prec].urm=[q].urm;
[[q].urm].prec=[q].prec;
dim<-dim-1;
return e;
sf_daca
sf_daca
sf_algoritm
functie size()
return dim;
functie vida()
if(prim=NIL)
return true;
return false;
sfarsit_functie
3.Implementare iterator
Subalgoritm creeaza(it, mdo)
it.mdo <- mdo
creeaza(l, mdo.R) {=> l : ListaOrdonata & vida(l)}
Pentru i <- 0,m-1
l <- interclasare(l, mdo.lo[i], mdo.R)
sf_pentru
iterator(l, it.itL)
sf_subalgoritm
Subalg urmator(it)
urmator(it.itL)
sf_subalgoritm
Functia interclasare(l1,l2,R)
creeaza(l,R) {l : ListaOrdonata}
iterator(l1,it1)
iterator(l2,it2)
Cat timp valid(it1) si valid(it2) exec
element(it1,e1)
element(it2,e2)
Daca e1 R e2 atunci
adauga(l,e1)
urmator(it1)
Altfel
adauga(l,e2)
urmator(it2)
sf_daca
sf_cattimp
Cat timp valid(it1) exec
element(it1,e1)
adauga(l,e1)
urmator(it1)
sf_cattimp
Cat timp valid(it2) exec
element(it2,e2)
adauga(l,e2)
urmator(it2)
sf_cattimp
interclasare <- l
sf_functie
4.Enunul problemei
S se creeze o aplicaie folosit pentru gestionarea notelor studenilor
din acelasi an al unei facultati. Aplicatia va retine numarul matricol al fiecarui
student(un numar natural) precum si nota/notele obtinuta/e de acesta la
examenele din timpul sesiunii. Aplicatia va permite adaugare unui nou
student, adaugarea unei note asociate unui student existent, stergerea unei
note, afisarea studentilor si a notelor.
USER INTERFACE
OrderedMultiMap
ListaOrdonata
ELEMENT
NOD
IntElement
MultiMap
Map
Element
Element
HashElemen
t
7. Scenariu de rulare
Utilizator
Program
Descriere
*optiune 1
pereche(11,10)
*optiune 1
pereche(12,7)
*optiune 1
pereche(11,9)
*optiune 1
pereche(13,6)
*optiune 2
*adauga (11,10)
Adauga o nota.
*adauga (12,7)
Adauga o nota.
*adauga (11,9)
Adauga o nota.
*adauga (13,6)
Adauga o nota.
Note stocate:
(13,6)
(12,7)
(11,10)
(11,9)
*optiune 3 pereche
(11,9)
Note stocate:
(13,6)
(12,7)
(11,10)
*optiune 3 pereche
(11,9)
-----
*optiune 2
Note stocate:
(13,6)
(12,7)
(11,10)
--
*optiune 4
EXIT