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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful