/* - varianta cu liste simplu inlantuite */ #include #include #include #include <stdio.h> <stdlib.h> <conio.h> <string.

h>

struct nod { int cv[15]; int val; int buc; int vnd;

// // // //

codul produsului valoarea nr bucati pe stoc nr bucati vandute

struct nod *urm; // urmatorul element } *v; // varful listei // Capatul (sfarsitul) listei a fost considerat acel element // care are valoarea pointerului 'c->urm' = NULL // redefinirea functiei pow(n,exp) -- ridicarea lui n la puterea exp long pow (int n, int exp) { int i, val = 1; for (i=0; i<exp; i++) val *= n; return val; } // functie de conversie din baza 2 in baza 10 int bin2dec (int bin[15]) { int i, dec = 0; for (i=0; i<15 && bin[i]!=-1; i++) dec += pow(2, bin[i]); return dec; } // functie de afisare a produselor din stoc void afisare (struct nod *v) { int i; struct nod *c = v; printf("\n\nProduse in stoc:\n"); while (c) { if (c->buc > 0) { for (i=0; (i<15) && (c->cv[i] != -1); i++) printf("%d", c->cv[i]);

1

i<len.} printf("\t%d\t%d\n". valid=1. c->buc). valid = 1. } printf("\nApasati o tasta pentru a continua. printf("\n\nProduse vandute:\n"). c->val. gets(codtemp). len = strlen(codtemp). c = c->urm. c->val. i++) if (codtemp[i]!='0' && codtemp[i]!='1') valid = 0. 2 . char codtemp[15]. int cod[15]. while (c) { if (c->vnd > 0) { for (i=0. do { printf("Cod: "). len. c->vnd). *n."). } printf("\nApasati o tasta pentru a continua. for (i=0. i=0. getch(). } // functie de afisare a produselor vandute void afisarev (struct nod *v) { int i. i++) printf("%d". struct nod *c = v. } printf("\t%d\t%d\n". } while (len==0 || len>15 || valid==0). getch()."). *m. } // functie de adaugare de noi produse void adaugare (void) { struct nod *c. printf("\n\nAdaugare produs nou:\n"). (i<15) && (c->cv[i] != -1). c->cv[i]). c = (struct nod*)malloc(sizeof(struct nod)). c = c->urm.

crearea legaturilor -m = v. printf("Bucati: "). &c->buc). } for (i=len. n = v. // daca se indeplineste conditia. 3 . printf("Bucati candute: "). i++) c->cv[i] = -1. i<15. v->urm = NULL. m = m->urm. inseram inaintea lui m n = m.// codul nu poate sa depaseasca 15 caractere printf("Valoare: "). // am folosit n pt a retine elementul anterior lui m // este necesar pt a introduce pe c intre n si m } n m c if (m == v) { if (!v) // v == NULL { v = c. scanf("%d". } else { n = v. while (m) // m != NULL { if ( bin2dec(c->cv) < bin2dec(m->cv) ) break. scanf("%d". &c->vnd). for (i=0. i++) { c->cv[i] = codtemp[i]-'0'. i<len. scanf("%d". // adaugarea elementului in lista propriu-zisa // -. &c->val).

} // golirea buffer-ului pt citire noua // functie de stergere a unui element void stergere (void) { struct nod *c.v = c. } while (len>15). printf("\n\nStergere produs:\n"). } gets(codtemp). i++) { cod[i] = codtemp[i]-'0'. while (c) { good = 1. m = c. // codul nu poate sa depaseasca 15 caractere for (i=0. do { printf("Cod: "). if (good) break. len. i<len. c = c->urm. c->urm = m. i<15. *m. i++) cod[i] = -1. len = strlen(codtemp). i<15. v->urm = n. for (i=0. cod[15]. char codtemp[15]. } else { } n->urm = c. c = v. good = 0. } if (good) { 4 . int i=0. gets(codtemp). i++) if (c->cv[i] != cod[i]) good = 0. } for (i=len.

break. printf(" Optiune: "). printf("\nProdusul precizat nu exista. printf(" 1. break. m c printf("\nApasati o tasta pentru a continua. opt = getche(). } void main() { char opt. printf(" 3. break."). free(c). break.if (v == c) v = v->urm. Iesire\n"). getch(). printf(" 4. afisarev(v). adaugare(). m->urm = c->urm. Adaugare\n"). Afisare produse vandute\n"). Stergere\n"). printf(" 0. printf("\n"). } else printf("\nProdusul precizat a fost sters. 5 . printf("\n").")."). } afisare(v). do { clrscr(). printf(" 2. Afisare produse in stoc\n"). switch (opt) { case '1': case '2': case '3': case '4': } } while (opt!='0'). stergere().

} // functie de conversie din baza 2 in baza 10 int bin2dec (int bin[15]) { int i.h> <stdlib. int val. bin[i]). // varful listei // Capatul (sfarsitul) listei a fost considerat acel element // care are valoarea pointerului 'c->urm' = NULL // redefinirea functiei pow(n. while (c) { if (c->buc > 0) { for (i=0.exp) -. printf("\n\nProduse in stoc:\n")./* .h> <conio. for (i=0.varianta cu liste dublu inlantuite */ #include #include #include #include <stdio. // elementul urmator struct nod *ant. val = 1. (i<15) && (c->cv[i] != -1). i++) dec += pow(2. int buc. c->cv[i]). return val. i<15 && bin[i]!=-1. dec = 0. i++) val *= n. i++) printf("%d". 6 . i<exp. int vnd. return dec. struct nod *c = v. } // functie de afisare a produselor din stoc void afisare (struct nod *v) { int i. // // // // codul produsului valoarea nr bucati pe stoc nr bucati vandute ant inf urm struct nod *urm. int exp) { int i. // elementul anterior } *v.h> <string.ridicarea lui n la puterea exp long pow (int n. for (i=0.h> struct nod { int cv[15].

while (c) { if (c->vnd > 0) { for (i=0. (i<15) && (c->cv[i] != -1). getch(). len. len = strlen(codtemp). i++) if (codtemp[i]!='0' && codtemp[i]!='1') valid = 0. c->val. i++) printf("%d". char codtemp[15]. good=0. *m. valid=1. i<len. c->val. } // functie de adaugare de noi produse void adaugare (void) { struct nod *c. } printf("\nApasati o tasta pentru a continua. } c = c->urm. printf("\n\nProduse vandute:\n").printf("\t%d\t%d\n". int cod[15]. } printf("\nApasati o tasta pentru a continua. for (i=0. *n. printf("\t%d\t%d\n". getch(). c = (struct nod*)malloc(sizeof(struct nod))."). c->buc)."). } c = c->urm. c->cv[i]). struct nod *c = v. gets(codtemp). printf("\n\nAdaugare produs nou:\n"). } // functie de afisare a produselor vandute void afisarev (struct nod *v) { int i. 7 . c->vnd). valid = 1. i=0. do { printf("Cod: ").

for (i=0. m->ant = c. printf("Bucati candute: "). scanf("%d". inseram inaintea lui m } m = m->urm. &c->buc). 8 . c->ant = NULL. &c->val). i++) c->cv[i] = -1. break. while (v && m->urm) { good = 0. &c->vnd). i<15. i<len. scanf("%d". n m c if (good) { if (m == v) { v = c. // codul nu poate sa depaseasca 15 caractere printf("Valoare: "). } // daca se indeplineste conditia. i++) { c->cv[i] = codtemp[i]-'0'. scanf("%d". c->urm = m.} while (len==0 || len>15 || valid==0).crearea legaturilor -m = v. // v != NULL && m->urm != NULL if ( bin2dec(c->cv) < bin2dec(m->cv) ) { good = 1. // adaugarea elementului in lista propriu-zisa // -. printf("Bucati: "). } for (i=len.

} else { } if (m == v) { if (!v) // v == NULL { // lista este vida // nodul inserat devine primul din lista v = c. len. cod[15].} else { n = m->ant. v->urm = m. v->ant = NULL. gets(codtemp). int i=0. n->urm = c. } // golirea buffer-ului pt citire noua c // functie de stergere a unui element void stergere (void) { struct nod *c. v->urm = NULL. c->ant = n. m->ant = c. } else { // nodul inserat devine varful listei v = c. } else { } } } m->urm = c. char codtemp[15]. v->ant = NULL. good = 0. 9 . c->urm = m. c->urm = NULL. c->ant = m.

i++) if (c->cv[i] != cod[i]) good = 0. } for (i=len. i<len. printf("\nApasati o tasta pentru a continua. do 10 . do { printf("Cod: "). c->ant->urm = c->urm. len = strlen(codtemp). printf("\nProdusul precizat a fost sters. i++) { cod[i] = codtemp[i]-'0'. if (good) break. for (i=0. i<15. } c = c->urm.")."). while (c) { good = 1. } void main() { char opt.").printf("\n\nStergere produs:\n"). } else printf("\nProdusul precizat nu exista. getch(). if (good) { if (v == c) v = v->urm. } while (len>15). gets(codtemp). i<15. // codul nu poate sa depaseasca 15 caractere for (i=0. i++) cod[i] = -1. free(c). c = v.

Iesire\n"). printf(" 4. printf(" 0. afisarev(v).{ clrscr(). Adaugare\n"). opt = getche(). printf(" Optiune: "). Afisare produse in stoc\n"). Stergere\n"). printf(" 1. printf(" 3. printf(" 2. printf("\n"). Afisare produse vandute\n"). break. stergere(). switch (opt) { case '1': case '2': case '3': case '4': } } while (opt!='0'). break. break. 11 . } afisare(v). adaugare(). break. printf("\n").

} 12 . buc. vnd. int cv[15]. // functie recursiva de inserare in arbore int insert_arb (struct nod *c.h> <string. // valoarea // nr bucati pe stoc // nr bucati vandute // left // right // varful listei struct nod *l. int len) { struct nod *n./* . } *v. int vnd. v->val = -1. } // nodul respectiv este pe pozitia dorita si se // scrie informatia nodului daca e cazul if (poz==len) { // valoarea nodului nu este nula => codul mai e folosit // se ignora cea de-a doua valoare if (c->val!=-1) return 0. v->l = NULL. return 1. v->r = NULL.h> <conio. c->buc = buc. c->val = val.h> <stdlib. struct nod *r.h> struct nod { int val. val. int buc.varianta cu arbori */ #include #include #include #include <stdio. // daca nu exista nodul respectiv se creeaza fizic // si se adauga legaturile (fara valoare) if (v == NULL) { v = (struct nod*)malloc(sizeof(struct nod)). c->vnd = vnd. int poz. c = v.

&val). do { v 1 printf("Cod: "). poz+1. 0 valid = 1. printf("\n\nAdaugare produs nou:\n"). n->val = -1. poz+1. i<len. n->val = -1. n->l = NULL. valid=1. len. scanf("%d". len = strlen(codtemp). c->r = n. n->l = NULL. len). n->r = NULL. n->r = NULL. for (i=0. i++) if (codtemp[i]!='0' && codtemp[i]!='1') valid = 0. } insert_arb(c->r. c->l = n. gets(codtemp). } } // functie de adaugare produs nou void adaugare (void) { int cod[15]. 13 . } while (len==0 || len>15 || valid==0). // codul nu poate sa depaseasca 15 caractere printf("Valoare: ").// daca pozitia curenta din cod este 1 se merge // pe partea dreapta a arborelui if (cv[poz]==1) { if (c->r == NULL) // daca nu exista nodul din dreapta { // se creaza fizic (alocare+legaturi) n = (struct nod*)malloc(sizeof(struct nod)). } insert_arb(c->l. len). i=0. } else { if (c->l == NULL) // daca nu exista nodul din stanga { // se creaza fizic (alocare+legaturi) n = (struct nod*)malloc(sizeof(struct nod)). char codtemp[15].

\n\n"). i<len. &vnd). %d\n". i++) cv[i] = -1. printf("Bucati candute: "). else printf("\nProdusul exista deja in baza de date.len) == 1) printf("\nProdusul a fost introdus cu succes. for (i=0. // golirea buffer-ului pt citire noua printf("\nApasati o tasta pentru a continua. %d %d\n".\n\n").x). i++) { cv[i] = codtemp[i]-'0'. v->val. 14 .x). scanf("%d". if (v->r != NULL) afis_rec (v->r. v->val. } } // functia de afisare void afisare (struct nod *v) { printf("\n\nProduse in stoc:\n"). // adaugarea elementului in lista propriu-zisa // -. getch(). i<15.0. } // functie recursiva pentru afisare // x == 0 => afisare toate produsele // x == 1 => afisare produsele vandute int afis_rec (struct nod *v. v->buc. &buc)."). scanf("%d". gets(codtemp). } for (i=len. v->vnd).printf("Bucati: "). v->buc.crearea legaturilor -if (insert_arb(v. int x) { if (v != NULL) { if (v->val != -1) if (x == 0) printf("%d %d else if (v->vnd>0) printf("%d if (v->l != NULL) afis_rec (v->l. v->vnd).

0).len). c = 0. } // functie recursiva de stergere int stergere_rec (struct nod *c. else stergere_rec (c->l. len. c->vnd = 0. getch(). } else { // se anuleaza nodul (valorile) c->val = -1. if (poz == len) { // nodul nu mai are descendenti => stergere fizica if (c->l==NULL && c->r==NULL) { free(c). afis_rec (v."). c->buc = 0.poz+1. int len) { if (!c) // c == NULL return 0. } } // functia de stergere void stergere (void) { int i=0. return 1.").len). printf("\nApasati o tasta pentru a continua. cod[15]. int cod[15]. } // afisare produse vandute void afisarev (struct nod *v) { printf("\n\nProduse vandute:\n"). printf("\nApasati o tasta pentru a continua. return 1. } } else { if (cod[poz]==1) stergere_rec (c->r. good = 0.cod. int poz.1). getch().afis_rec (v.poz+1.cod. 1 c 15 .

do { printf("Cod: "). printf("\n\nStergere produs:\n"). adaugare(). } void main() { char opt. i<len. } if (stergere_rec(v. do { clrscr()."). break. stergere().cod. // codul nu poate sa depaseasca 15 caractere si trebuie sa fie valid for (i=0. Iesire\n").len)) printf("\nProdusul precizat a fost sters. good = 1."). Adaugare\n")."). break. len = strlen(codtemp). i<len. for (i=0. getch(). printf("\n"). i++) { cod[i] = codtemp[i]-'0'. Afisare produse in stoc\n"). i++) if (codtemp[i]!='0' && codtemp[i]!='1') good = 0. } while (len==0 || len>15 || good==0). switch (opt) { case '1': case '2': case '3': case '4': } } while (opt!='0'). } afisare(v). Afisare produse vandute\n"). break. afisarev(v). printf(" 0. printf(" 3. printf(" 2. Stergere\n"). printf(" Optiune: "). 16 . gets(codtemp). printf("\n"). else printf("\nProdusul precizat nu exista. break. printf(" 4. opt = getche(). printf("\n\nApasati o tasta pentru a continua. printf(" 1.char codtemp[15].0.