Advertisement
Guest User

Untitled

a guest
Dec 9th, 2011
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.95 KB | None | 0 0
  1. Задача заключается в создании набора функций, которые помогут в украшении елки.
  2. Украшение ёлки это тяжелая работа, нужно экспериментировать с украшениями, подходят ли они друг к другу. Во время экспериментов также следует обеспечить безопасность и гарантировать, что ёлочные игрушки не вспыхнут. Соблюдение безопасности в эксплуатации игрушек поможет набор функций, которые вы напишете для этого примера
  3.  
  4. Моделирование ёлки для упрощения будем представлять как тройную нелинейную структуру (каждый узел имеет максимум 3 потомка). Узлы представляют освещение нашей ёлки. К узлам можем поместить украшения (декорации) Декорациями будут свечки и бенгальские огни.
  5.  
  6. Узлы деревы представляет структура TNODE (указана ниже). Целое дерево представлено указателем на корневой узел.
  7. Функция имеет вид:
  8.  
  9. int setDecoration ( TNODE ** root, char * path, int decor );
  10. функция моделирует (создаёт) дерево и помещает на него украшения.
  11. root (inout) - указатель на корень дерева
  12. ASCIIZ строка описывает путь от корня к украшениям и вид декорации, размещённый в целевом узле.
  13. Функция начинает проходить дерево от корня. Как проходит промежуточными узлами, последовательно продолжает ветвями от 0 до 2 (числа от 1 до 2), которые слева направо читает в указанном пути. В целевом узле функция ставит желаемую игрушку (если уже была - будет заменена). Если узел на нужный путь несуществует, функция создает промежуточные узлы (моделирует дерево). В этих созданных промежуточных узлах будет поставлена игрушка на значение DECORATION_NONE. Внимание, функция создаёт только нужные узлы, не более того. Если функция завершается успешно - возвращает 1. Если функция неправильная (указанный путь содержит другие символы кроме 0,1,2, функция на дереве ничего не меняет и возвращает значение 0.
  14.  
  15. int cutBranch ( TNODE ** root, char * path );
  16. Функция удаляет часть (или всё) дерева, в том числе все ветви и украшения. Функция должна освободить память, выделенную для удалённой части дерева и должна ставить ссылку на родителя на NULL.
  17. Функция имеет параметры:
  18. root (inout) -указатель на корень дерева
  19. ASCIIZ строка обозначает путь от корня к узлу, который должен быть удалён (этот узел и
  20. все его приемники должны быть удалены)
  21. Функция ищет узел к удалению (отрезанию) по тем же правилам, как и та, которая создаёт их. (всё норм - вернёт 1, если что-то не так (неправильный путь или узел несуществует) - функция ничего не изменит и вернёт значение 0. Если путь задан, как пустая строка - удаляем всё дерево
  22.  
  23. int easyToCatchFire ( TNODE * root );
  24. Функция определит, воспламенится ли дерево. Если где-то на дереве рядом свечка и бенгальский огонь - дерево сгорит. Под определением рядом обозначено, что в отношении родительский узел-узла наследника или 2 узла-брата рядом.
  25.  
  26. void destroyTree ( TNODE * root );
  27. Функция освободит ресурсы, которые были выделенны для реализации дерева. Вызывается всегда.
  28.  
  29.  
  30. TNODE - структура описывает 1 узел дерева.
  31.  
  32. компоненты:
  33. m_Decoration - в этом узле будет игрушка,
  34. m_Parent - ссылка на родителя в дереве (NULL для корня дерева),
  35. m_Branches - ссылка на потомки в дереве (NULL - потомка несуществует).
  36.  
  37. для некоторых операций целесообразно создать рекурсию
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46. #include <stdio.h>
  47. #include <stdlib.h>
  48. #include <string.h>
  49.  
  50. #define MAX_BRANCHES 3
  51. #define DECORATION_NONE 0
  52. #define DECORATION_CANDLE 1
  53. #define DECORATION_SPARKLER 2
  54.  
  55. typedef struct TNode
  56. {
  57. struct TNode * m_Parent;
  58. struct TNode * m_Branches[MAX_BRANCHES];
  59. int m_Decoration;
  60. } TNODE;
  61.  
  62.  
  63.  
  64. int setDecoration ( TNODE ** root, char * path, int decor )
  65. {
  66.  
  67. }
  68. int cutBranch ( TNODE ** root, char * path )
  69. {
  70.  
  71. }
  72. int easyToCatchFire ( TNODE * root )
  73. {
  74.  
  75. }
  76. void destroyTree ( TNODE * root )
  77. {
  78.  
  79. }
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88. int main ( int argc, char * argv [] )
  89. {
  90.  
  91. TNODE * n;
  92. int x;
  93.  
  94. n = NULL;
  95. x = setDecoration ( &n, (char*) "000", DECORATION_SPARKLER ); /* x = 1 */
  96. x = setDecoration ( &n, (char*) "001", DECORATION_SPARKLER ); /* x = 1 */
  97. x = setDecoration ( &n, (char*) "002", DECORATION_SPARKLER ); /* x = 1 */
  98. x = setDecoration ( &n, (char*) "1", DECORATION_CANDLE ); /* x = 1 */
  99. x = setDecoration ( &n, (char*) "01", DECORATION_NONE ); /* x = 1 */
  100. x = setDecoration ( &n, (char*) "", DECORATION_CANDLE ); /* x = 1 */
  101. x = easyToCatchFire ( n ); /* x = 0 */
  102. destroyTree ( n );
  103.  
  104. n = NULL;
  105. x = setDecoration ( &n, (char*) "000", DECORATION_SPARKLER ); /* x = 1 */
  106. x = setDecoration ( &n, (char*) "002", DECORATION_CANDLE ); /* x = 1 */
  107. x = setDecoration ( &n, (char*) "2", DECORATION_CANDLE ); /* x = 1 */
  108. x = easyToCatchFire ( n ); /* x = 0 */
  109. destroyTree ( n );
  110.  
  111. n = NULL;
  112. x = setDecoration ( &n, (char*) "0001", DECORATION_SPARKLER ); /* x = 1 */
  113. x = setDecoration ( &n, (char*) "000", DECORATION_CANDLE ); /* x = 1 */
  114. x = easyToCatchFire ( n ); /* x = 1 */
  115. destroyTree ( n );
  116.  
  117. n = NULL;
  118. x = setDecoration ( &n, (char*) "012001", DECORATION_SPARKLER ); /* x = 1 */
  119. x = setDecoration ( &n, (char*) "012002", DECORATION_CANDLE ); /* x = 1 */
  120. x = easyToCatchFire ( n ); /* x = 1 */
  121. x = cutBranch ( &n, (char*) "0120" ); /* x = 1 */
  122. x = easyToCatchFire ( n ); /* x = 0 */
  123. destroyTree ( n );
  124.  
  125. n = NULL;
  126. x = setDecoration ( &n, (char*) "0123", DECORATION_SPARKLER ); /* x = 0 */
  127. x = cutBranch ( &n, (char*) "012" ); /* x = 0 */
  128. x = easyToCatchFire ( n ); /* x = 0 */
  129. destroyTree ( n );
  130.  
  131. n = NULL;
  132. x = setDecoration ( &n, (char*) "012", DECORATION_SPARKLER ); /* x = 1 */
  133. x = setDecoration ( &n, (char*) "011", DECORATION_CANDLE ); /* x = 1 */
  134. x = easyToCatchFire ( n ); /* x = 1 */
  135. x = cutBranch ( &n, (char*) "" ); /* x = 1, n = NULL */
  136. x = easyToCatchFire ( n ); /* x = 0 */
  137. x = cutBranch ( &n, (char*) "" ); /* x = 0 */
  138. destroyTree ( n );
  139. }
  140.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement