Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. #include "student_leaf.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include "read_print.h"
  5.  
  6. #define MAX_N 5
  7. #define LEN 1234
  8.  
  9. void delet(student_leaf* a)
  10. {
  11.     if(a -> get_down()) delet(a -> get_down());
  12.     if(a -> get_next()) delet(a -> get_next());
  13.     delete a;
  14. }
  15.  
  16. void printl(student_leaf* a, int n)
  17. {
  18.     int i;
  19.     if(a != 0)
  20.     {
  21.         if ((n == MAX_N) || ((a -> get_next() == 0) && (a -> get_down() == 0))) {for(i = 0; i < n; i++){printf("    ");}printf("%s %d\n", (a -> get_name()), (a -> get_value()));}
  22.         else
  23.         {
  24.         if((a -> get_down()) != 0) printl((a -> get_down()), n + 1);
  25.         for(i = 0; i < n; i++)
  26.         {
  27.            printf("    ");
  28.         }
  29.         printf("%s %d\n", (a -> get_name()), (a -> get_value()));
  30.         if((a -> get_next()) != 0) printl((a -> get_next()), n + 1);
  31.         }
  32.      }
  33. }
  34.  
  35. int better(student_leaf* a, student_leaf* b)
  36. {
  37.     if(strcmp(a -> get_name(), b -> get_name()) < 0) return -1;
  38.     else if(strcmp(a -> get_name(), b -> get_name()) == 0) return 0;
  39.     else return 1;
  40. }
  41.  
  42. student_leaf* add(student_leaf* a, student_leaf *b)
  43. {
  44.     b -> set_num(better(a, b));
  45.     printf("%d KEK\n", b -> get_num());
  46.     if(b -> get_num() == 1)
  47.     {
  48.         if(a -> get_down() == 0) a -> set_down(b);
  49.         else if(a -> get_down() -> get_num() != 1) {b -> set_next(a -> get_down()); a -> set_down(b);}
  50.         else a -> set_down(add(a -> get_down(), b));
  51.     }
  52.     else if(b -> get_num() == 0)
  53.     {
  54.         if(a -> get_down() == 0) a -> set_down(b);
  55.         else if(a -> get_down() -> get_num() == 0) a -> set_down(add(a -> get_down(), b));
  56.         else if(a -> get_down() -> get_num() < 0) {b -> set_next(a -> get_down()); a -> set_down(b);}
  57.         else
  58.         {
  59.             if(a -> get_down() -> get_next() == 0) a -> get_down() -> set_next(b);
  60.             else if(a -> get_down() -> get_next() -> get_num() == 0) a -> get_down() -> set_next(add(a -> get_down() -> get_next(), b));
  61.             else {b -> set_next(a -> get_down() -> get_next()); a -> get_down() -> set_next(b);}
  62.         }
  63.     }
  64.     else
  65.         if(a -> get_down() == 0) a -> set_down(b);
  66.         else if(a -> get_down() -> get_num() < 0) a -> set_down(add(a -> get_down(), b));
  67.         else if(a -> get_down() -> get_num() == 0)
  68.         {
  69.             if(a -> get_down() -> get_next() == 0) a -> get_down() -> set_next(b);
  70.             else a -> get_down() -> set_next(add(a -> get_down() -> get_next(), b));
  71.         }
  72.         else
  73.         {
  74.             if(a -> get_down() -> get_next() == 0) a -> get_down() -> set_next(b);
  75.             else if(a -> get_down() -> get_next() -> get_next() == 0) a -> get_down() -> get_next() -> set_next(b);
  76.             else a -> get_down() -> get_next() -> set_next(add(a -> get_down() -> get_next() -> get_next(), b));
  77.         }
  78.    //printf("%s\n", a -> get_down-> get_name());
  79.    return a;
  80. }
  81.  
  82. student_leaf* read(const char* fin, int i)
  83. {
  84.     FILE* fp;
  85.     int val;
  86.     i = 0;
  87.     char name[LEN];
  88.     student_leaf* a = new student_leaf;
  89.     student_leaf* b = new student_leaf;
  90.     if(!(fp = fopen(fin, "r"))) return 0;
  91.     fscanf(fp, "%s %d", name, &val);
  92.     b -> init(name, val, 0);
  93.     a = b;
  94.     i++;
  95.     while (fscanf(fp, "%s %d", name, &val) == 2)
  96.     {
  97.     b = new student_leaf;
  98.         b -> init(name, val, 0);
  99.         a = add(a, b);
  100.         i++;
  101.     }
  102.     if (!feof(fp))
  103.     {
  104.         fclose(fp);
  105.         return 0;
  106.     }
  107.     return a;
  108.  
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement