이거 두개는 구글신한테 가져온거인건 둘째치고 조교형아가 써도 된댔는데다 내가 쓴거 아니니 문제는 없어..
혹시 그냥 절망하고 있는 뉴비 도와줄 형들 복사 붙여넣기 하면 될것같아...
그리고 문제의 코드

//lsys.c
#include \"bmpfile.h\"
#include \"stdlib.h\"
#include \"stdio.h\"
#include \"string.h\"
#include \"math.h\"

rgb_pixel_t pixelW = {255, 255, 255, 0};
rgb_pixel_t pixelB = {0, 0, 0, 0};

typedef struct
{
        double x;
        double y;
        double rate;
        double heading;
} state;

typedef struct 
{
        state **array;
        int top;
} stack;

stack *makeStack();
state *pop(stack *stk);
void push(stack *stk, state *pt);
state *makeState(double x, double y, double rate, double heading);
void evaluate(char piece, int numberOfRules, char *rule, char **ruleDes, double turningRadian, int depth, int currentDepth, double *maxX, double *maxY, double *minX, double *minY, state *currentState, stack *stk);
void draw(char piece, int numberOfRules, char *rule, char **ruleDes, double turningRadian, int depth, int currentDepth, state *currentState, stack *stk, bmpfile_t *bmpFile);


int main()
{
        int i;
        double CX = 0, CY = 0;
        int numberOfFiles;
        scanf(\"%d\", &numberOfFiles);
        bmpfile_t *bmp;
        bmpfile_t *temp[numberOfFiles];//these files will later be merged together to create a bigger one
        
        bmp = bmp_create(300 * numberOfFiles, 300,  32);
        for (i = 0; i < numberOfFiles; i++) {
                temp[i] = bmp_create(300, 300, 32);
                for (CX = 0; CX < 300; CX++) 
                        for (CY = 0; CY < 300; CY++)
                                bmp_set_pixel(temp[i], CX, CY, pixelB);
        }
        // clear the bmp to all black
        for (CX = 0; CX < 300 * numberOfFiles; CX++)
                for (CY = 0; CY < 300; CY++)
                        bmp_set_pixel(bmp, CX, CY, pixelB);

        for (i = 0; i < numberOfFiles; i++) {
                //reading the input
                int depth;
                scanf(\"%d\", &depth);
                double turningAngle;
                scanf(\"%lf\", &turningAngle);
                double turningRadian = turningAngle * M_PI/180;
                double initialHeading;
                scanf(\"%lf\\n\", &initialHeading);
                double headingRadian = initialHeading * M_PI/180;
//                printf(\"radians:%lf, %lf\\n\", turningRadian, headingRadian); 
                char c;
                int j = 0;
                char *axiom = (char *)malloc(sizeof(char) * 2);
                while ((c = getchar()) != \'\\n\') {
                        *(axiom + j) = c;
                        *(axiom + j + 1) = \'\\0\';
                        realloc(axiom, sizeof(axiom) + 1);
                        j++;
                }
                printf(\"%s\\n\", axiom);
                int numberOfRules;
                scanf(\"%d\\n\", &numberOfRules);
                char rule[numberOfRules];
                char *ruleDes[numberOfRules];;
                
                for (j = 0; j < numberOfRules; j++) {
                        ruleDes[j] = (char *)malloc(sizeof(char) * 50);
                        scanf(\"%c -> %s\\n\", &rule[j], ruleDes[j]);
/*                        int k = 0;
                        c = 0;
                        ruleDes[j] = (char *)malloc(sizeof(char) * 2);
                        
                        while ((c = getchar()) != \'\\n\') {
                                realloc(ruleDes[j], sizeof(ruleDes[j]) + 1);
                                
                                *(ruleDes[j] + k) = c;
                                *(ruleDes[j] + k + 1) = \'\\0\';
                                k++;
*/        //                printf(\"%d: %c, %s\\n\", j, rule[j], ruleDes[j]);        
        //                }                
                }
                
                
                printf(\"depth : %d, turningAngle : %lf, initialHeading: %lf, axiom : %s, numberOfRules : %d\\n\", depth, turningAngle, initialHeading, axiom, numberOfRules);
                for (j = 0; j < numberOfRules; j++) {
                        printf(\"%c -> %s\\n\", rule[j], ruleDes[j]);
                }
                
                //getting other things ready
                stack *stk = makeStack();
                int currentDepth = 0;
                double maxX, maxY, minX, minY;
                maxX = maxY = minX = minY = 0;
                state *currentState = makeState(0, 0, 1, headingRadian);

                //first checking the axiom in order to get ready
                for (j = 0; j < strlen(axiom); j++) {
                        evaluate(axiom[j], numberOfRules, rule, ruleDes, turningRadian, depth, currentDepth, &maxX, &maxY, &minX, &minY, currentState, stk); 
                }
                printf(\"x : %lf, y : %lf, rate : %lf\\n\", currentState->x, currentState->y, currentState->rate);        
                printf(\"maxX: %lf, maxY: %lf, minX: %lf, minY:%lf\\n\", maxX, maxY, minX, minY);
//                printf(\"x : %lf, y : %lf, rate : %lf\\n\", currentState->x, currentState->y, currentState->rate);        
                //free up the state and make a new one with real values
                free(currentState);
                currentState = makeState(-minX/(maxX-minX) * 300, -minY/(maxY-minY) * 300, 300*300/((maxX-minX) * (maxY-minY)), headingRadian);
                printf(\"x : %lf, y : %lf\\n\", -minX/(maxX-minX) * 300, -minY/(maxY-minY) * 300);
                printf(\"x : %lf, y : %lf, rate : %lf\\n\", currentState->x, currentState->y, currentState->rate);        
                
                //
                
                //
                //draw real bmp file. seperately
                for (j = 0; j < strlen(axiom); j++) {
                        draw(axiom[j], numberOfRules, rule, ruleDes, turningRadian, depth, currentDepth, currentState, stk, temp[i]);
                }
                printf(\"after x : %lf, y : %lf, rate : %lf\\n\", currentState->x, currentState->y, currentState->rate);        
                
                
                //
                char fileName[10];
                sprintf(fileName, \"TEMP%d.bmp\", i + 1);
                bmp_save(temp[i], fileName);
                //
                
                
                
                
                //cleaning up
                free(axiom);
                for (j = 0; j < numberOfRules; j++) {
                        free(ruleDes[j]);
                }
                free(currentState);
                free(stk);
                
        }
        bmp_save(bmp, \"OUTPUT.BMP\");
        // free bmp object
        bmp_destroy(bmp);
        for (i = 0; i < numberOfFiles; i++) {
                bmp_destroy(temp[i]);
        }
        return 0;
}

stack *makeStack()
{
        stack *temp = malloc(sizeof(stack));
        temp->array = (state **)malloc(10000000000);
        temp->top = -1;
        
        return temp;
}

state *pop(stack *stk) 
{
        state *temp = malloc(sizeof(state));
        temp = stk->array[stk->top];
//        free(stk->array[stk->top]);
        (stk->top)--;
        return temp;
}

void push(stack *stk, state *pt)
{
        (stk->top)++;
        stk->array[stk->top] = malloc(sizeof(state *));
        *((stk->array) + stk->top) = pt;
                        
}

state *makeState(double x, double y, double rate, double heading)
{
        state *temp = malloc(sizeof(state));
        temp->x = x;
        temp->y = y;
        temp->rate = rate;
        temp->heading = heading;
        return temp;
}

void evaluate(char piece, int numberOfRules, char *rule, char **ruleDes, double turningRadian, int depth, int currentDepth, double *maxX, double *maxY, double *minX, double *minY, state *currentState, stack *stk) {

        //safety
        if (depth < currentDepth)
                return;
        if (currentDepth != depth) {
                int i;
                for (i = 0; i < numberOfRules; i++) {
                        if (*(rule + i) == piece) {
                                int p;
                                for (p = 0; p < strlen(*(ruleDes + i)); p++)
                                        evaluate(ruleDes[i][p], numberOfRules, rule, ruleDes, turningRadian, depth, (currentDepth + 1), maxX, maxY, minX, minY, currentState, stk);
                                return;
                        }
                }
        }
        
        if (piece == \'F\') {
                (currentState->x) += cos(currentState->heading);
                (currentState->y) += sin(currentState->heading);
                if ((currentState->x) > *maxX)
                        *maxX = (currentState->x);
                else if ((currentState->x) < *minX)
                        *minX = (currentState->x);
                if ((currentState->y) > *maxY)
                        *maxY = (currentState->y);
                else if ((currentState->y) < *minY)
                        *minY = (currentState->y);
                
//                printf(\"current (%lf, %lf), minmax (%lf, %lf, %lf, %lf)\\n\", currentState->x, currentState->y, *maxX, *minX, *maxY, *minY);
        } else if (piece == \'f\') {
                (currentState->x) += cos(currentState->heading);
                (currentState->y) += sin(currentState->heading);
                if ((currentState->x) > *maxX)
                        *maxX = (currentState->x);
                else if ((currentState->x) < *minX)
                        *minX = (currentState->x);
                if ((currentState->y) > *maxY)
                        *maxY = (currentState->y);
                else if ((currentState->y) < *minY)
                        *minY = (currentState->y);
//                                        printf(\"current (%lf, %lf), minmax (%lf, %lf, %lf, %lf)\\n\", currentState->x, currentState->y, *maxX, *minX, *maxY, *minY);

        } else if (piece == \'+\') {
                (currentState->heading) += turningRadian;
        } else if (piece == \'-\') {
                (currentState->heading) -= turningRadian;
        } else if (piece == \'[\') {
                push(stk, currentState);
        } else if (piece == \']\') {
                currentState = pop(stk);
        }
}

void draw(char piece, int numberOfRules, char *rule, char **ruleDes, double turningRadian, int depth, int currentDepth, state *currentState, stack *stk, bmpfile_t *bmpFile) {
        
        //safety
        if (depth < currentDepth)
                return;
        if (currentDepth != depth) {
                int i;
       &nb