디.
번 번는 무 . 만 만들면 만 면 . makeBuffer 부. C 는 문 .
번 문데, 무 recursive . 는 더만. 는대 밍 뿐.
만 는 면, visual studio .. 리 는 런 는데 마 디 끌들는 미 느 냥 zp server vi 들는데.. gdb 모르. malloc 면 . . const int 를 case 받 는 (런 ) 말는 리 러 방 .
났 런 면 놀면 밌. 른 문 ...
리 ..
/만들
#include <stdio.h>
#include <stdlib.h>
#define FORWARD 1
#define BACKWARD 2
#define BIDIR 3
void getUserInput(int * sel, int * num) {
scanf("%d %d", sel, num);
}
char * makeBuffer(int num) {
char * ret = (char *)malloc(sizeof(char) * num + 1);
ret[num--] = '\0';
while (num >= 0)
ret[num--] = ' ';
return ret;
}
void forwardTriangle(int num, char * buffer) {
int i;
for (i = 0; i < num; i++) {
buffer[i] = '*';
printf("%s\n", buffer);
}
}
void backwardTriangle(int num, char * buffer) {
int i;
for (i = num - 1; i >= 0; i--) {
buffer[i] = '*';
printf("%s\n", buffer);
}
}
int calcBidirTriangleSize(int num) {
if (num == 1)
return 1;
return calcBidirTriangleSize(num - 1) + 2;
}
void bidirTriangle(int num, char * buffer) {
int i, center;
center = calcBidirTriangleSize(num) / 2;
for (i = 0; i < num; i++) {
buffer[center + i] = '*';
buffer[center - i] = '*';
printf("%s\n", buffer);
}
}
void produceTriangle(int sel, int num) {
char * buffer;
switch (sel) {
case FORWARD:
buffer = makeBuffer(num);
forwardTriangle(num, buffer);
break;
case BACKWARD:
buffer = makeBuffer(num);
backwardTriangle(num, buffer);
break;
case BIDIR:
buffer = makeBuffer( calcBidirTriangleSize(num) );
bidirTriangle(num, buffer);
}
free(buffer);
}
int main(void) {
int sel, num;
getUserInput(&sel, &num);
produceTriangle(sel, num);
return 0;
}










