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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful