Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Задача заключается в создании набора функций, которые помогут в украшении елки.
- Украшение ёлки это тяжелая работа, нужно экспериментировать с украшениями, подходят ли они друг к другу. Во время экспериментов также следует обеспечить безопасность и гарантировать, что ёлочные игрушки не вспыхнут. Соблюдение безопасности в эксплуатации игрушек поможет набор функций, которые вы напишете для этого примера
- Моделирование ёлки для упрощения будем представлять как тройную нелинейную структуру (каждый узел имеет максимум 3 потомка). Узлы представляют освещение нашей ёлки. К узлам можем поместить украшения (декорации) Декорациями будут свечки и бенгальские огни.
- Узлы деревы представляет структура TNODE (указана ниже). Целое дерево представлено указателем на корневой узел.
- Функция имеет вид:
- int setDecoration ( TNODE ** root, char * path, int decor );
- функция моделирует (создаёт) дерево и помещает на него украшения.
- root (inout) - указатель на корень дерева
- ASCIIZ строка описывает путь от корня к украшениям и вид декорации, размещённый в целевом узле.
- Функция начинает проходить дерево от корня. Как проходит промежуточными узлами, последовательно продолжает ветвями от 0 до 2 (числа от 1 до 2), которые слева направо читает в указанном пути. В целевом узле функция ставит желаемую игрушку (если уже была - будет заменена). Если узел на нужный путь несуществует, функция создает промежуточные узлы (моделирует дерево). В этих созданных промежуточных узлах будет поставлена игрушка на значение DECORATION_NONE. Внимание, функция создаёт только нужные узлы, не более того. Если функция завершается успешно - возвращает 1. Если функция неправильная (указанный путь содержит другие символы кроме 0,1,2, функция на дереве ничего не меняет и возвращает значение 0.
- int cutBranch ( TNODE ** root, char * path );
- Функция удаляет часть (или всё) дерева, в том числе все ветви и украшения. Функция должна освободить память, выделенную для удалённой части дерева и должна ставить ссылку на родителя на NULL.
- Функция имеет параметры:
- root (inout) -указатель на корень дерева
- ASCIIZ строка обозначает путь от корня к узлу, который должен быть удалён (этот узел и
- все его приемники должны быть удалены)
- Функция ищет узел к удалению (отрезанию) по тем же правилам, как и та, которая создаёт их. (всё норм - вернёт 1, если что-то не так (неправильный путь или узел несуществует) - функция ничего не изменит и вернёт значение 0. Если путь задан, как пустая строка - удаляем всё дерево
- int easyToCatchFire ( TNODE * root );
- Функция определит, воспламенится ли дерево. Если где-то на дереве рядом свечка и бенгальский огонь - дерево сгорит. Под определением рядом обозначено, что в отношении родительский узел-узла наследника или 2 узла-брата рядом.
- void destroyTree ( TNODE * root );
- Функция освободит ресурсы, которые были выделенны для реализации дерева. Вызывается всегда.
- TNODE - структура описывает 1 узел дерева.
- компоненты:
- m_Decoration - в этом узле будет игрушка,
- m_Parent - ссылка на родителя в дереве (NULL для корня дерева),
- m_Branches - ссылка на потомки в дереве (NULL - потомка несуществует).
- для некоторых операций целесообразно создать рекурсию
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_BRANCHES 3
- #define DECORATION_NONE 0
- #define DECORATION_CANDLE 1
- #define DECORATION_SPARKLER 2
- typedef struct TNode
- {
- struct TNode * m_Parent;
- struct TNode * m_Branches[MAX_BRANCHES];
- int m_Decoration;
- } TNODE;
- int setDecoration ( TNODE ** root, char * path, int decor )
- {
- }
- int cutBranch ( TNODE ** root, char * path )
- {
- }
- int easyToCatchFire ( TNODE * root )
- {
- }
- void destroyTree ( TNODE * root )
- {
- }
- int main ( int argc, char * argv [] )
- {
- TNODE * n;
- int x;
- n = NULL;
- x = setDecoration ( &n, (char*) "000", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "001", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "002", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "1", DECORATION_CANDLE ); /* x = 1 */
- x = setDecoration ( &n, (char*) "01", DECORATION_NONE ); /* x = 1 */
- x = setDecoration ( &n, (char*) "", DECORATION_CANDLE ); /* x = 1 */
- x = easyToCatchFire ( n ); /* x = 0 */
- destroyTree ( n );
- n = NULL;
- x = setDecoration ( &n, (char*) "000", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "002", DECORATION_CANDLE ); /* x = 1 */
- x = setDecoration ( &n, (char*) "2", DECORATION_CANDLE ); /* x = 1 */
- x = easyToCatchFire ( n ); /* x = 0 */
- destroyTree ( n );
- n = NULL;
- x = setDecoration ( &n, (char*) "0001", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "000", DECORATION_CANDLE ); /* x = 1 */
- x = easyToCatchFire ( n ); /* x = 1 */
- destroyTree ( n );
- n = NULL;
- x = setDecoration ( &n, (char*) "012001", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "012002", DECORATION_CANDLE ); /* x = 1 */
- x = easyToCatchFire ( n ); /* x = 1 */
- x = cutBranch ( &n, (char*) "0120" ); /* x = 1 */
- x = easyToCatchFire ( n ); /* x = 0 */
- destroyTree ( n );
- n = NULL;
- x = setDecoration ( &n, (char*) "0123", DECORATION_SPARKLER ); /* x = 0 */
- x = cutBranch ( &n, (char*) "012" ); /* x = 0 */
- x = easyToCatchFire ( n ); /* x = 0 */
- destroyTree ( n );
- n = NULL;
- x = setDecoration ( &n, (char*) "012", DECORATION_SPARKLER ); /* x = 1 */
- x = setDecoration ( &n, (char*) "011", DECORATION_CANDLE ); /* x = 1 */
- x = easyToCatchFire ( n ); /* x = 1 */
- x = cutBranch ( &n, (char*) "" ); /* x = 1, n = NULL */
- x = easyToCatchFire ( n ); /* x = 0 */
- x = cutBranch ( &n, (char*) "" ); /* x = 0 */
- destroyTree ( n );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement