C00

Jeongho Kim·2022년 11월 14일
0

42seoul

목록 보기
5/5

라피신 대부분 과제는 함수 구현이었어.

ex00. ft_putchar

이 함수는 character 형을 출력해.
write 함수를 쓰지.

#include <unistd.h>

void ft_putchar(char c)
{
	write(1, &c, 1);
}

ex01. ft_print_alphabet

#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++;
    }
}

ex05. ft_print_comb

#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);
}

ex06. ft_print_comb2

아래 코드로 작성했는데, bus error가 났다.
사실 이 문제는 while 로 여러번 풀었다.
재귀연습하고 싶어서 재귀로 풀다보니 이런 문제가 생겼다.

  1. bus error가 무엇인지
  2. debuging을 어떻게 하는지
    공부하게 돼 감사했다.
#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);
}

ex07

수십번은 넘게 푼 문제.
이건 오히려 재귀 구조가 익숙해졌다.
다른 방식으로 추후에 풀어보자.

#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);
    }
}

ex08

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);
}

0개의 댓글