Advertisement
catalin_stefann11

Untitled

Jun 14th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.89 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "malloc.h"
  3. #include "string.h"
  4.  
  5. using namespace std;
  6.  
  7.  
  8. struct Produse {
  9.     char* denumire;
  10.     int cantitate;
  11.     char* unitate_de_masura;
  12. };
  13.  
  14. struct Comanda
  15. {
  16.     int id_comanda;
  17.     char* denumire_client;
  18.     int numar_produse_comanda;
  19.     Produse** vector_produse_comandate;
  20.     char* data_livrare;
  21.  
  22. };
  23.  
  24.  
  25. struct BST
  26. {
  27.     Comanda* info;
  28.     BST* left;
  29.     BST* right;
  30.    
  31. };
  32.  
  33.  
  34. Produse* creareProdus(char* den, int cant, char* um)
  35. {
  36.     Produse* newProdus = (Produse*)malloc(sizeof(Produse));
  37.     newProdus->cantitate = cant;
  38.     newProdus->denumire = (char*)malloc(strlen(den) + 1);
  39.     newProdus->unitate_de_masura = (char*)malloc(strlen(um) + 1);
  40.     strcpy(newProdus->denumire, den);
  41.     strcpy(newProdus->unitate_de_masura, um);
  42.     return newProdus;
  43. }
  44.  
  45. Comanda* creareComanda(int id, char* den, int nr_prod,
  46.     Produse** vector, char*data)
  47. {
  48.     Comanda* newComanda = (Comanda*)malloc(sizeof(Comanda));
  49.     newComanda->id_comanda = id;
  50.     newComanda->numar_produse_comanda = nr_prod;
  51.     newComanda->vector_produse_comandate = (Produse**)malloc(sizeof(Produse*)*nr_prod);
  52.     for (int i = 0; i < nr_prod; i++)
  53.     {
  54.         newComanda->vector_produse_comandate[i] = (Produse*)malloc(sizeof(Produse));
  55.         newComanda->vector_produse_comandate[i] = vector[i];
  56.     }
  57.     newComanda->data_livrare = (char*)malloc(strlen(data) + 1);
  58.    
  59.     newComanda->denumire_client = (char*)malloc(strlen(den) + 1);
  60.     strcpy(newComanda->data_livrare, data);
  61.     strcpy(newComanda->denumire_client, den);
  62.  
  63.     return newComanda;
  64. }
  65.  
  66. BST* creareNod(Comanda* c)
  67. {
  68.     BST* nod = (BST*)malloc(sizeof(BST));
  69.     nod->info = creareComanda(c->id_comanda, c->denumire_client,
  70.         c->numar_produse_comanda, c->vector_produse_comandate, c->data_livrare);
  71.     nod->right = nod->left = NULL;
  72.     return nod;
  73.  
  74. }
  75.  
  76.  
  77. void inserareNod(BST** radacina, BST* nod)
  78. {
  79.     if ((*radacina)==NULL)
  80.     {
  81.         (*radacina) = nod;
  82.     }
  83.     else
  84.     {
  85.         if ((*radacina)->info->id_comanda < nod->info->id_comanda)
  86.             inserareNod(&(*radacina)->left, nod);
  87.         else
  88.             if ((*radacina)->info->id_comanda > nod->info->id_comanda)
  89.                 inserareNod(&(*radacina)->right, nod);
  90.             else
  91.                 printf("Cheie existenta");
  92.     }
  93. }
  94.  
  95. void creareArboreBinarCautare(BST** radacina, FILE* fisier)
  96. {
  97.     int id_comanda;
  98.     char nume[20];
  99.     int nr_produse;
  100.     char data[20];
  101.     char nume_produs[15];
  102.     int cantitate;
  103.     char unitate_masura[3];
  104.     fscanf(fisier, "%d", &id_comanda);
  105.     while (!feof(fisier))
  106.     {
  107.         Produse** vector_produse = NULL;
  108.         fscanf(fisier, "%s", &nume);
  109.         fscanf(fisier, "%d", &nr_produse);
  110.         vector_produse = (Produse**)malloc(sizeof(Produse*)*nr_produse);
  111.         fscanf(fisier, "%s", &data);
  112.         for (int i = 0; i < nr_produse; i++)
  113.         {
  114.             vector_produse[i] = (Produse*)malloc(sizeof(Produse));
  115.             fscanf(fisier, "%s", &nume_produs);
  116.             fscanf(fisier, "%d", &cantitate);
  117.             fscanf(fisier, "%s", &unitate_masura);
  118.             Produse* p = creareProdus(nume_produs, cantitate, unitate_masura);
  119.             vector_produse[i] = p;
  120.         }
  121.         Comanda* c = creareComanda(id_comanda, nume, nr_produse, vector_produse, data);
  122.         BST* nod = creareNod(c);
  123.         inserareNod(radacina, nod);
  124.         fscanf(fisier, "%d", &id_comanda);
  125.     }
  126. }
  127.  
  128.  
  129. void afisareStructuraInOrdine(BST* radacina)
  130. {
  131.     if (radacina)
  132.     {
  133.         afisareStructuraInOrdine(radacina->left);
  134.         printf("%d\n",radacina->info->id_comanda);
  135.        
  136.         afisareStructuraInOrdine(radacina->right);
  137.     }
  138. }
  139.  
  140. int* IntoareUnVector(BST* radacina, char* data,int &i, int* vector2)
  141. {
  142.    
  143.     int vector[5];
  144.    
  145.     if (radacina) {
  146.         if (strcmp(radacina->info->data_livrare, data) == 0)
  147.         {
  148.             vector[i] = radacina->info->id_comanda;
  149.  
  150.             vector2[i] = vector[i];
  151.             i++;
  152.         }
  153.             IntoareUnVector(radacina->left, data ,i,vector2);
  154.             IntoareUnVector(radacina->right, data,i,vector2);
  155.         }
  156.        
  157.          
  158.    
  159.     return vector2;
  160.    
  161. }
  162.  
  163.  
  164. int NumarNoduriFrunza(BST* radacina, char* nume_client,int &numar)
  165. {  
  166.     if (radacina)
  167.     {
  168.         if(radacina->left==NULL&&radacina->right==NULL)
  169.             if (strcmp(radacina->info->denumire_client, nume_client)==0)
  170.             {
  171.                 numar++;
  172.             }
  173.         NumarNoduriFrunza(radacina->left, nume_client, numar);
  174.         NumarNoduriFrunza(radacina->right, nume_client, numar);
  175.     }
  176.     return numar;
  177. }
  178.  
  179.  
  180. void AfisarePeNiveleFrumos(BST* radacina, int nivel)
  181. {
  182.     if (radacina)
  183.     {
  184.         for (int i = 0; i < nivel; i++)
  185.         {
  186.             printf("\t");
  187.            
  188.         }
  189.        
  190.         printf("%d\n", radacina->info->id_comanda);
  191.        
  192.        
  193.         AfisarePeNiveleFrumos(radacina->left, nivel + 1);
  194.        
  195.        
  196.         AfisarePeNiveleFrumos(radacina->right, nivel + 1);
  197.     }
  198.     else
  199.     {
  200.         for (int i = 0; i < nivel; i++)
  201.         {
  202.             printf("\t");
  203.  
  204.         }
  205.         printf("NULL\n");
  206.  
  207.     }
  208.    
  209. }
  210.  
  211.  
  212. void ModificaProduseComandate(BST** radacina,int numar_produse, char** denumiri, int* cantitati, char** unitati_masura,int id_comanda)
  213. {
  214.     if ((*radacina))
  215.     {
  216.         if ((*radacina)->info->id_comanda == id_comanda)
  217.         {
  218.             free((*radacina)->info->vector_produse_comandate);
  219.             (*radacina)->info->vector_produse_comandate = (Produse**)malloc(sizeof(Produse*)*numar_produse);
  220.             (*radacina)->info->numar_produse_comanda = numar_produse;
  221.  
  222.             for (int i = 0; i < numar_produse; i++)
  223.             {
  224.                 (*radacina)->info->vector_produse_comandate[i] = (Produse*)malloc(sizeof(Produse));
  225.                 (*radacina)->info->vector_produse_comandate[i]->cantitate = cantitati[i];
  226.                 (*radacina)->info->vector_produse_comandate[i]->denumire = (char*)malloc(sizeof(strlen(denumiri[i] + 1)));
  227.                 (*radacina)->info->vector_produse_comandate[i]->unitate_de_masura = (char*)malloc(sizeof(strlen(unitati_masura[i] + 1)));
  228.                 strcpy((*radacina)->info->vector_produse_comandate[i]->denumire, denumiri[i]);
  229.                 strcpy((*radacina)->info->vector_produse_comandate[i]->unitate_de_masura, unitati_masura[i]);
  230.  
  231.  
  232.             }
  233.  
  234.         }
  235.  
  236.         ModificaProduseComandate(&(*radacina)->right, numar_produse, denumiri, cantitati, unitati_masura, id_comanda);
  237.         ModificaProduseComandate(&(*radacina)->left, numar_produse, denumiri, cantitati, unitati_masura, id_comanda);
  238.  
  239.     }
  240. }
  241.  
  242.  
  243.  
  244.  
  245. void main()
  246. {
  247.     BST* radacina = NULL;
  248.     FILE* fisier = fopen("Date.txt", "r");
  249.     char buffer[20];
  250.    
  251.     creareArboreBinarCautare(&radacina, fisier);
  252.     printf("Afisare structura \n");
  253.     //afisareStructuraInOrdine(radacina);
  254.     char data[20] = "15.06.2019";
  255.     int i = 0;
  256.     int* vector2=NULL;
  257.     vector2 = (int*)malloc(sizeof(int) * 5);
  258.     vector2 = IntoareUnVector(radacina,data,i,vector2);
  259.     if (i==0)
  260.         printf("nu exista nicio comanda care sa corespunda");
  261.     else
  262.  
  263.         for (int j = 0; j < i; j++)
  264.             printf("vectorul cu id comenzi : vector[%d]= %d\n", j,vector2[j]);
  265.  
  266.     char nume[20] = "Mihai";
  267.     int numar = 0;
  268.     numar = NumarNoduriFrunza(radacina, nume, numar);
  269.     printf("Numarul de frunze cu numele Mihai%d\n", numar);
  270.    
  271.     printf("=====AFISARE PE NIVELE======\n");
  272.     AfisarePeNiveleFrumos(radacina, 0);
  273.  
  274.     char* denumiri[10] = { "Pepene","Morcov" };
  275.     char* unitati_de_masura[10] = { "kg","kg" };
  276.     int numar_produse = 2;
  277.     int cantitati[2] = { 333,333 };
  278.  
  279.     ModificaProduseComandate(&radacina, numar_produse, denumiri, cantitati, unitati_de_masura, 2);
  280.  
  281.     afisareStructuraInOrdine(radacina);
  282.  
  283.  
  284.  
  285.  
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement