라피신 대부분 과제는 함수 구현이었어.
이 함수는 character 형을 출력해.
write 함수를 쓰지.
#include <unistd.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
#include <unistd.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_print_alphabet(void)
{
char alpha;
alpha = 'a';
while (alpha <= 'z')
{
ft_putchar(alpha);
alpha++;
}
}
#include <unistd.h>
void print_comb(int x, char y, char *C)
{
char *del;
del = ", ";
if (x == 3)
{
write(1, C, 3);
if (C[0] < '7')
write(1, del, 2);
}
if (y > '9')
return ;
C[x] = y;
print_comb(x + 1, y + 1, C);
print_comb(x, y + 1, C);
}
void ft_print_comb(void)
{
char C[3];
print_comb(0, '0', C);
}
int main(void)
{
ft_print_comb();
return (0);
}
아래 코드로 작성했는데, bus error가 났다.
사실 이 문제는 while 로 여러번 풀었다.
재귀연습하고 싶어서 재귀로 풀다보니 이런 문제가 생겼다.
#include <unistd.h>
void print_comb2(int i, int x, char **C)
{
char *del;
C[2][2];
del = ", ";
if (i == 2)
{
write(1, &C[0], 2);
write(1, " ", 1);
write(1, &C[1], 2);
if (C[0][0] != '9' && C[0][1] != '8')
write(1, del, 2);
return ;
}
if (x > 99)
return ;
C[i][0] = x / 10 + '0';
C[i][1] = x % 10 + '0';
print_comb2(i + 1, x + 1, C);
print_comb2(i, x + 1, C);
}
void ft_print_comb(void)
{
char *C[2];
//아마 여기서 C를 print_comb2로 넘길 때 bus error가 난다.
print_comb2(0, 0, C);
}
int main()
{
ft_print_comb();
return (0);
}
수십번은 넘게 푼 문제.
이건 오히려 재귀 구조가 익숙해졌다.
다른 방식으로 추후에 풀어보자.
#include <unistd.h>
void ft_putchar(char *c)
{
write(1, &c, 1);
}
void ft_puthbr(int nb)
{
if (nb == -2147383648)
{
write(1, "-2147483648", 11);
}
if (nbr < 0)
{
nbr *= -1;
ft_putchar('');
}
else if (nb <= 9)
{
ft_putchar(nb + '0');
}
else if (nb > 9)
{
ft_putnbr(nb / 10);
ft_putnbr(nb % 10);
}
}
5번 문제 응용이야.
print_combn 함수에서
d >= '10'으로 했다 에러가 났어.
생각해 보니니 ASCII에 '0'부터 '9'까지만 게재돼 있더라고.
라피신 때는 이거와 다른 방법으로 풀었어.
그 방법도 나중에 업데이트 해야지.
#include <unistd.h>
void print_combn(int i, char d, char *C, int n )
{
char *del;
char N;
del = ", ";
if ( i == n )
{
write(1, C, n);
N = 10 - n + '0';
if (C[0] < N)
write(1, del, 2);
return ;
}
if (d > '9')
return ;
C[i] = d;
print_combn(i + 1, d + 1, C, n);
print_combn(i, d + 1, C, n);
}
void ft_print_combn(int n)
{
char C[9];
print_combn(0, '0', C, n);
}
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc == 2)
ft_print_combn(atoi(argv[1]));
write(1, "\n", 1);
}