Advertisement
zerosiedem

Untitled

May 25th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5.  
  6. struct Produkt
  7. {
  8.     char * nazwa;
  9.     float cena;
  10.     Produkt * lewo;
  11.     Produkt * prawo;
  12. };
  13.  
  14. Produkt * DodajProdukt(Produkt * Drzewo, char * Nazwa, float Cena);
  15. float Cena(Produkt * Drzewo, char * Nazwa);
  16. void ZwolnijPamiec(Produkt * Drzewo);
  17.  
  18. Produkt * StworzElement(char * Napis, float Cena);
  19.  
  20. int main()
  21. {
  22.     // Tworze drzewo
  23.     Produkt * Drzewo = NULL;
  24.    
  25.     Drzewo = DodajProdukt(Drzewo, "Truskawki", 9.99);
  26.     DodajProdukt(Drzewo, "Jablka", 4.12);
  27.     DodajProdukt(Drzewo, "Platki owsiane", 12.16);
  28.     DodajProdukt(Drzewo, "Kawa rozpuszczalna", 1.88);
  29.     DodajProdukt(Drzewo, "Herbata", 2.18);
  30.     DodajProdukt(Drzewo, "Cytryna", 3.39);
  31.     DodajProdukt(Drzewo, "Mleko", 1.99);
  32.     DodajProdukt(Drzewo, "Jogurt", 0.99);
  33.     DodajProdukt(Drzewo, "Woda mineralna", 1.10);
  34.     DodajProdukt(Drzewo, "Kiwi", 2.49);
  35.  
  36.     printf("Cena produktu - Mleko: %.2lf\n", Cena(Drzewo, "Mleko"));
  37.     printf("Cena produktu - Herbata: %.2lf\n", Cena(Drzewo, "Herbata"));
  38.     printf("Cena produktu - Orzechy: %.2lf\n", Cena(Drzewo, "Orzechy"));
  39.     printf("Cena produktu - Melon: %.2lf\n", Cena(Drzewo, "Melon"));
  40.  
  41.     // Usuwam drzewo
  42.     ZwolnijPamiec(Drzewo);
  43.  
  44.     _getch();
  45.     return 0;
  46. }
  47.  
  48.  
  49. Produkt * DodajProdukt(Produkt * Drzewo, char * Nazwa, float Cena)
  50. {
  51.     if (Drzewo != NULL)
  52.     {
  53.         Produkt * Kopia = Drzewo;
  54.         while (true)
  55.         {
  56.             if (strcmp(Kopia->nazwa, Nazwa) < 0)
  57.             {
  58.                 if (Kopia->prawo != NULL) Kopia = Kopia->prawo;
  59.                 else
  60.                 {
  61.                     Kopia->prawo = StworzElement(Nazwa, Cena); // tworze nowy element
  62.                     return Kopia->prawo; // zwracam wskaznik na nowy element
  63.                 }
  64.             }
  65.             else
  66.             {
  67.                 if (Kopia->lewo != NULL) Kopia = Kopia->lewo;
  68.                 else
  69.                 {
  70.                     Kopia->lewo = StworzElement(Nazwa, Cena); // tworze nowy element
  71.                     return Kopia->lewo; // zwracam wskaznik na nowy element
  72.                 }
  73.             }
  74.         }
  75.     }
  76.     else Drzewo = StworzElement(Nazwa, Cena); // tworze nowy element
  77.     return Drzewo; // zwracam wskaznik na nowy element
  78. }
  79.  
  80. float Cena(Produkt * Drzewo, char * Nazwa)
  81. {
  82.     if (Drzewo != NULL)
  83.     {
  84.         while (true)
  85.         {
  86.             int rezultatPorownania = strcmp(Drzewo->nazwa, Nazwa);
  87.             if (rezultatPorownania == 0) return Drzewo->cena; // znalazlem!!!!!!!!!!!!!!!!!
  88.             else
  89.             {
  90.                 if (rezultatPorownania < 0)
  91.                 {
  92.                     if (Drzewo->prawo != NULL) Drzewo = Drzewo->prawo; // szukam dalej
  93.                     else return 0.0; // nie znaleziono nic
  94.                 }
  95.                 else
  96.                 {
  97.                     if (Drzewo->lewo != NULL) Drzewo = Drzewo->lewo; // szukam dalej
  98.                     else return 0.0; // nie znaleziono nic
  99.                 }
  100.             }
  101.         }
  102.     }
  103.     return 0.0; // drzewo puste to zwracam 0
  104. }
  105.  
  106. void ZwolnijPamiec(Produkt * Drzewo)
  107. {
  108.     if (Drzewo->lewo != NULL) ZwolnijPamiec(Drzewo->lewo);
  109.     if (Drzewo->prawo != NULL) ZwolnijPamiec(Drzewo->prawo);
  110.  
  111.     if(Drzewo->nazwa != NULL)
  112.         free(Drzewo->nazwa); // DODATKOWE UWAGA - zwalniam pamiec zaalokowanego NAPISU!!! produktu
  113.  
  114.     free(Drzewo);
  115.     Drzewo = NULL;
  116. }
  117.  
  118. Produkt * StworzElement(char * Napis, float Cena)
  119. {
  120.     Produkt * NowyElement = (Produkt*)malloc(sizeof(Produkt));
  121.  
  122.     // Alokuje pamiec na napis
  123.     NowyElement->nazwa = (char*)malloc(sizeof(char) * (strlen(Napis) + 1));
  124.     strcpy(NowyElement->nazwa, Napis);
  125.     NowyElement->nazwa[strlen(Napis)] = '\0';
  126.  
  127.     // Podpinam cene
  128.     NowyElement->cena = Cena;
  129.  
  130.     NowyElement->lewo = NULL;
  131.     NowyElement->prawo = NULL;
  132.    
  133.     return NowyElement;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement