/* - 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

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

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

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

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

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

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

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

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

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

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

int poz. val. v->val = -1.h> <stdlib. c->buc = buc. int len) { struct nod *n. return 1.h> <conio. buc. c->val = val. int buc. c->vnd = vnd. int vnd. v->l = NULL. c = v.varianta cu arbori */ #include #include #include #include <stdio. } 12 .h> <string. } *v. vnd. // functie recursiva de inserare in arbore int insert_arb (struct nod *c. } // 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. struct nod *r. int cv[15]. // valoarea // nr bucati pe stoc // nr bucati vandute // left // right // varful listei struct nod *l. // daca nu exista nodul respectiv se creeaza fizic // si se adauga legaturile (fara valoare) if (v == NULL) { v = (struct nod*)malloc(sizeof(struct nod)).h> struct nod { int val./* . v->r = NULL.

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

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

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

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

Sign up to vote on this title
UsefulNot useful