# 42Seoul

1034개의 포스트

[CPP Module] 00

기록의 이유 CPP 과제를 하면서 각 과제에서 중요하게 생각한 점과 배운점을 정리하기 위해 기록을 시작한다. ex00 프로그램에 들어온 인자들의 알파벳을 모두 대문자로 하여 출력하는 과제 cpp를 간단하게 시작해보는 과제 (like Hello World) 사용 함수 정확하게 함수는 아니지만 표준 입출력 스트림인 cin과 cout을 필수적으로 사용해야 한다. 사용 법만 알아도 사용하는데 큰 불편함이 없지만, cout이 어떻게 작동하는지 알고 싶어서 조금 더 공부해봤다. 표준 입출력 스트림의 계층도 표준 입출력 스트림의 계층도 계층도 istream과 ostream 부분에 istream과 ostream이 basic_istream, `ba

2023년 9월 10일
·
0개의 댓글
·

[42Seoul] CPP Module 02 / Orthodox canonical form, 연산자 오버로딩

CPP Module 02 고정소수점 고정소수점 수 (Fixed-Point Numbers)는 소수점이나 쉼표의 위치가 고정된 위치에 있는 수를 나타낸다. 이러한 숫자 표현 방식은 정수 부분과 소수 부분을 특정 비트 수로 나누어 표현한다. 예를 들어, 16비트 고정소수점 수에서 8비트는 정수 부분, 나머지 8비트는 소수 부분을 표현할 수 있다. * 사용 이유 * 정밀도: 고정소수점 연산은 소수점 아래로 정밀도를 제한함으로써 오차가 누적되는 것을 방지할 수 있다. 성능: 고정소수점 연산은 부동소수점 연산에 비해 일반적으로 더 빠른 계산 속도를 제공한다. 메모리 사용량: 고정소수점 수는 메모리 공간을 더 효율적으로 사용할 수 있다. 예측 가능성: 고정소수점 수를 사용하면 연산 결과가 일정하고 예측 가능하게 된다. 고정소수점 수와 부동소수점 수 사이의 차이점 * 표현 방식 * 고정소수점 수: 소수점 위치가 고정되어 있으며, 정수 부분과 소수 부분

2023년 9월 5일
·
0개의 댓글
·

pipex

과제 해석 다음과 같이 프로그램이 실행된다. 반드시 4개의 인자를 지닐텐데 file1과 file2는 파일명이며, cmd1과 cmd2는 쉘 명령어 이다. 위의 실행 예시의 결과는 다음과 같아야 한다. 예를 들어 는 와 같다. 과제 풀이 내용 프로세스 프로세스란 프로그램이 실행되는 상태를 말한다. 프로그램이 실행된다는 것은 RAM에 프로그램 코드가 적재돼 동작한다는 것이다. 프로세스는 운영체제로부터 '스레드'라는 시스템 자원을 할당 받는 단위를 사용하며 메모리, 주소 공간을 할당 받는다. 이때 스레드는 할당 받은 자원들을 스레드끼리 공유하며 실행된다. IPC(Inter Process Communication) 파이프는 두 프로세스가 통신할 수 있게 하는 정보 전달자다. 즉, 정보 생산자와 소비자 프로세스 간 통신을 의미한다. 이러한 IPC 방법에는 공유 메모리, 소켓, 파이프 등있다. 함수 access 파일의 권한을

2023년 9월 2일
·
0개의 댓글
·
post-thumbnail

[Minishell] minishell 구상

Minishell을 기록하며... 팀원과 함께 minishell을 만들며 있었던 여러 문제들을 기록하며 minishell을 정리하고 minishell과 minishell을 만들기 위해 알아야 하는 개념들을 정리 해보려 한다. Minishell 구상 bash와 비슷하게 동작하는 minishell을 만들기 위해서는 먼저 bash에 동작에 대해 알아야하고 그에 따라 bash manual과 추가적으로 gnu bash git을 clone하여 실제 code를 참고하여 동작의 순서와 방식을 파악하려는 시도를 하였다. minishell 전체의 flow chart는 다음과 같다. ![minishell flowchart](https://velog.velcdn.com/images/snorlax1106/post/6c87

2023년 8월 31일
·
0개의 댓글
·

[42Seoul] CPP Module 01 / 동적 할당, 생성자, 소멸자, getter, setter, 참조자

CPP Module 01 CPP module 01은 동적 할당, 생성자, 소멸자, getter와 setter, 참조자에 대해 학습하는 내용이다. 뭐 하나 빠질 것 없이 앞으로 C++을 함에 있어서 평생 함께 갈 문법들이므로 자세히 보고 가는 것이 좋다. Ex01 좀비 떼를 할당하고, 좀비 떼들이 생성될 때마다 생성자로 Zombie is born을 출력하게 한다. delete로 할당이 해제되거나, 지역 함수에서 해제될 때(소멸자가 호출될 때) is dead를 호출하고, 좀비들은 태어날 때마다 울부짖게 된다. 핵심은 각각 좀비마다 이름을 붙여주는 setName 함수이다. zombieHorde 함수를 잘 보면, 각각의 좀비마다 Zombie(인덱스)를 붙여주는 로직이 있다. 는 c++에서 제공하는 stringstream이라는 클래스로 ss라는 객체를 생성한다. 이 객체는, 스트림 연산자를 사용하여 문자열에 데이터를 쉽게 추가하거나 문자열에서 데이터를 읽어

2023년 8월 31일
·
0개의 댓글
·

42seoul:: CPP 08

Subject STL Containers > ### 컨테이너란? > 다른 객체들을(원소) 보관하는 하나의 큰 보관소라고 보면된다. STL 컨테이너는 클래스 템플릿의 형태로 구현되어져 있기 때문에 임의의 타입 원소들을 위한 컨테이너를 만들 수 있다. 시퀀스 컨테이너 (Sequence Container) >> vector, deque, list > 컨테이너 어뎁터 (Container Adaptor) >> stack, queue, priority_queue > 연관 컨테이너 (Associative Container) >> set, multiset, map, multimap, bitset > > 시퀀스 컨테이너 (Sequence Container) Vector > vector

2023년 8월 27일
·
0개의 댓글
·

42seoul:: CPP 07

Subject template > 간단하게 설명하면 어떠한 자료형에 대해서든 사용할 수 있도록 하게해주는 것이다. > 이와같이 작성하면 a, b 로 어떠한 자료형이 오던 해당 타입으로 반환해준다. class template > class template 도 기존 template와 동일한 개념이다. > hpp에서 선언한 클래스를 재정의 하려면 tpp라는 타입의 확장자 파일에 정의해주어야 한다.

2023년 8월 25일
·
0개의 댓글
·
post-thumbnail

[42seoul] CPP Module 00 - Phonebook 만들어보기

CPP Module 00 / CPP와 친해지기 CPP 과제를 먼저 수행한 사람들이 해준 조언에 따르면, CPP의 형태 자체가 main함수를 간단하게 만든다고 한다. main 함수에서는 PhoneBook class를 선언한 후 StartPhoneBook 함수를 호출하면 프로그램이 완벽하게 작동하도록 설계를 하였다. cpp부터는 형식에 크게 얽매일 필요는 없고, 정확하게 서브젝트가 요구하는 바만 따르면 된다. PhoneBook이 시작되면 ADD, SEARCH, EXIT 세 명령어 중 한 명령어를 받게되고, 이 세 명령어가 아닐 때는 잘못된 커맨드를 출력했다는 표준출력을 남긴다. if (!std::getline(std::cin, cmd)) 는 미니쉘에서 readline을 루프 안에서 받아오는 과정에서, EOF(Ctrl + D)를 받았을 때 line을 free 해주는 것과 비슷한 로직이다. EOF를 받을 경우 std::getline 함수는 실패하게 되고,

2023년 8월 24일
·
0개의 댓글
·

[42seoul] CPP module

CPP module 시작 전 준비운동 클래스와 객체의 차이 * 클래스 * 정의 : 클래스는 객체를 생성하기 위한 템플릿, 또는 설계도와 같은 것으로 객체의 속성(attributes)와 메소드(methods)를 정의하는 코드의 블록이다. 예시 : 자동차라는 클래스가 있다면 클래스의 속성은 브랜드, 색상, 모델 등이 있고, 메소드는 주행, 정지 가속 등이 있을 수 있다. * 객체 * 정의 : 객체는 클래스에서 정의된 내용을 기반으로, 메모리에 생성된 실체이다. 클래스를 기반으로 만들어진 인스턴스를 이야기한다. 위의 예시를 기반으로, '붉은색 테슬라 모델 S'가 객체가 된다. 자동차는 자신의 상태를 알려주는 변수와, 본인이 하는 행동인 메소드로 이루어져 있을 것이다. 추상화 이 때, '붉은색 테슬라 모델 S'라는 객체가 현실 세계에 존재하는 것을 나타내기 위해서는 추상화(abstraction)라는 과정이 필요하다. > 자동차가 주행,

2023년 8월 23일
·
0개의 댓글
·

42seoul:: CPP 06

Subject static class > ++ static class는 객체를 생성하지 않고 클래스 자체만을 사용하도록 설계된 클래스입니다. static class는 객체를 생성하지 않기 때문에 메모리 사용량이 적고, 객체를 생성하는 데 필요한 시간도 절약할 수 있습니다. 또한, static class는 객체를 생성하지 않기 때문에 객체 간의 의존성이 줄어들고, 코드가 단순해집니다. > static class는 다음과 같은 경우에 사용됩니다. > 객체를 생성하지 않고 클래스 자체만을 사용해야 하는 경우 메모리 사용량을 줄이고자 하는 경우 객체를 생성하는 데 필요한 시간을 절약하고자 하는 경우 객체 간의 의존성을 줄이고자 하는 경우 코드를 단순화하고자 하는 경우 static class는 다음과 같은 특징을 가지고 있습니다. > 객체를 생성하지 않습니다. 메모리 사용량이 적

2023년 8월 16일
·
0개의 댓글
·

[42Seoul]Netpractice 개념 설명

Netpractice 개념 정리 Cub3d도 끝냈다... 진짜 한 번 정리를 하긴 해야 하는데 자꾸 늦어진다 Netpractice 합격을 위해 Cub3D 팀원으로 함께해주신 jeongXXXX 님께서 학습 내용을 공유해주셨다. 여러모로 실행 파트 하드캐리를 받기도 해서 죄송했는데... Netpractice 개인적으로 공부하신 학습 내용까지 공유해주셔서 너무너무 감사할 따름... 언젠간 보은을 하고 싶은데 받질 않으신다 ㅠ Netpractice 과제 목표 네트워크 개념 ipv4 유형의 네트워크 형식 서브넷 마스크 분류... 개념 설명 네트워크 컴퓨터를 연결하여 정보를 주고받는 시스템 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망 분산되어 있는 컴퓨터를 통신망으로 연결한 것 컴퓨터 통신과 네트워크의 세 가지 구성요소 두 대 이상의 컴퓨터 데이터를 전송매체를 통해 보내거나 받음

2023년 8월 14일
·
1개의 댓글
·

C09

Makefile CC = Gcc CFLAGS = -Wall -Wextra -Werror NAME = libft.a INCLUDE = ./includes DIR = ./srcs SRCS = ftputchar.c ftswap.c ftputstr.c ftstrlen.c ft_strcmp.c OBJS = $(SRCS:.c=.o) OBJECTS = $(patsubst %.o, srcs/%.o, $(OBJS)) all : $(NAME) $(DIR)/%.o : $(DIR)/%.c $(CC) $(CFLAGS) -I $(INCLUDE) -c $^ -o $@ $(NAME) : $(OBJECTS) ar rcs $@ $^ clean: rm -f $(OBJECTS) fclean: clean rm -f $(NAME) re: fclean all .PHONY: all clean fclean re 컴파일 옵션들을 정하고 소스파일, 오브젝트파일, 헤더파일 등의 경로를 정해놓

2023년 8월 10일
·
1개의 댓글
·

[BORN2BEROOT] 과제 정리

Subject Mandatory part 이 프로젝트는 엄격한 규칙들을 통해 가상머신(virtual machine)을 생성하고 구성하는 것을 다루고 있습니다. 피평가자는 동료평가 내내 당신을 도와줘야 합니다. 앞으로 나올 모든 평가 항목들이 직접 확인되어야한다는 점을 명심하세요. 1. 프로젝트 개요 피평가자는 먼저 이것들을 간단히 설명해야합니다 : 가상 머신은 어떻게 동작하는가. 가상머신(VM: Virtual Machine)이란? 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터 하나의 물리 자원(컴퓨터) 위에 하나의 환경(OS)만 있는 것을 효율화하고자 가상화층을 만들고 그 위에 OS를 새로 설치하는 기법 하이퍼바이저가 물리자원들인 하드웨어의 리소스를 논리자원으로 가지고오는 추상화과정을 거치고난 후 하나의 디바이스로 묶어 PC처럼 사용이 가능한 가상화 과정을 거치어 가

2023년 8월 9일
·
1개의 댓글
·

[42Seoul] CPP_module_00 General

CPPPP 프래즐 프래즐... CPP 시작! CPP를 시작하게 되었다. 사실 아직 Netpractice subject만 정리하고... Cub3d는 끝나가며 블로그 포스팅 공백 기간 중 끝낸 과제가 산더미 같지만 우선 CPP 과제를 수행함에 있어 앞으로 지켜야 할 것들을 미리 정리해두려고 한다. 컴파일 C++, -Wall -Wextra -Werror 플래그를 사용하여 컴파일한다. std=c+98 플래그를 추가하여 컴파일한다. CPP_module 이름 규칙 ex00, ex01, ex... 파일, 클래스, 함수, 멤버 함수 및 어트리뷰트의 이름은 가이드라인에서 요구하는대로 지정한다. 클래스 이름은 대문자 형식으로 지정한다. 클래스 코드가 포함된 파일은, 항상 클래스 이름에 따라 이름을 지정한다. > Ex) ClassName.hpp/ClassName.h 달리 지정이 되어있지 않다면, 모든 출력 메세지는 새 줄로 끝나

2023년 8월 8일
·
0개의 댓글
·
post-thumbnail

[42Seoul] Netpractice subject 정리

더이상 미룰 수 없다 과제는 열심히 밀었는데... 벨로그 정리는 미루고 미루고 또 미뤘다. 이너서클 첫 번째 벽인 minishell을 마친 기념으로, 다시 velog 정리를 하나씩 시작해봐야겠다. 나름 대학교 성적도 잘 받았고, 일상적으로도 쓸 얘기가 많아지고 목표도 여러가지로 생겼는데... 이걸 마냥 글로 옮기자니 ㅠㅠㅠㅠ > 이 프로젝트는 네트워크를 실행하기 위한 네트워킹 문제를 해결하는 것입니다. 먼저 프로젝트 페이지에 첨부된 파일을 다운로드하세요. 서브젝트 파일은 my project page에서 regist 후 다운로드 받을 수 있다. 그런 다음 원하는 폴더에 파일을 압축을 풉니다. 이 폴더에서 index.html 파일을 실행합니다. 웹 브라우저에서 이 인터페이스가 열립니다: NetPractice에 오신 것을 환영합니다! :) 페이지에 언급된 대로: 필드에 로그인을 입력하면 연습할 수 있습니다. 또는 필드를 비워두면 연습 버전을 사용해

2023년 8월 3일
·
1개의 댓글
·

C07

동적 할당을 처음으로 사용하는 문제들 > Exercise 00 : ft_strdup • Reproduce the behavior of the function strdup (man strdup). strdup함수를 구현하는 함수 strcpy는 복사 받을 dest를 매개변수로 받지만, strdup는 src만을 매개변수로 받아 동적할당을 사용하여 dest를 직접 만들고 사용하기 때문에 더 안정적이다. 하지만 free를 꼭 사용해야한다. > Exercise 01 : ft_range • Create a function ft_range which returns an array of ints. This int array should contain all values between min and max. min값과 max값이 주어지면 배열에 min부터 max 이전 숫자까지 넣어줘야 한다. > Exercise 02 : ftultimaterange • Cre

2023년 8월 1일
·
1개의 댓글
·

C05

Exercise 00 : ftiterativefactorial • Create an iterated function that returns a number. This number is the result of a factorial operation based on the number given as a parameter. 반복문을 이용한 팩토리얼 반환 팩토리얼이 커질 수 있기 때문에 최대한 크게 unsigned long long 0! = 1 주의 > Exercise 01 : ftrecursivefactorial • Create a recursive function that returns the factorial of the number given as a parameter. 재귀를 이용한 팩토리얼 반환 > Exercise 02 : ftiterativepower • Create an iterated function that returns

2023년 7월 27일
·
0개의 댓글
·

C04

Excercise 00 ~ 02는 앞서 나온 문제들과 중복됨 > Exercise 03 : ft_atoi • Write a function that converts the initial portion of the string pointed by str to its int representation 문자열이 주어지면 해당 문자열을 숫자로 바꾸어주는 atoi함수 입력받는 문자열은 ( 공백 / 부호 / 숫자 ) 의 순으로 입력받고 그 이외에는 모두 잘라내야한다. ex) " ---+--+1234ab567" -> -1234 ex) " \n\t -+-- +- 1245 -> 0 두번째 예시의 경우 앞 공백문자들 이후에 부호가 왔지만 그 부호 이후에는 다시 공백이 오기때문에 숫자가 오지 않은걸로 판단한다. white space에 해당하는 문자를 확인하기 위해 isspace(3)의 메뉴얼을 찾아서 총6글자의 해당 문자들을 찾았고 이를 이용해 is_space함수를 구현함 공백문자가 없

2023년 7월 27일
·
0개의 댓글
·

42seoul:: CPP 03

파생 클래스 (derived class) > 파생 클래스(derived class)란 기초 클래스의 모든 특성을 물려받아 새롭게 작성된 클래스를 가리킨다. >C++에서 파생 클래스는 다음과 같은 특징을 가지고 있다. 파생 클래스는 반드시 자신만의 생성자를 작성해야 한다. 파생 클래스에는 기초 클래스의 접근할 수 있는 모든 멤버 변수들이 저장된다. 파생 클래스는 기초 클래스의 접근할 수 있는 모든 멤버 함수를 사용할 수 있다. 파생 클래스에는 필요한 만큼 멤버를 추가할 수 있다. > 파생클래스를 객체화 하게되면 기본 클래스의 생성자가 호출이 되게되는데, 이 이유는 파생 클래스가 기본 클래스의 멤버를 포함하고 있기 때문이다. 파생 클래스의 생성자는 파생 클래스의 멤버를 초기화하기 전에 기본 클래스의 생성자를 호출하여 기본 클래스의 멤버를 초기화한다. virtual > 가상 함수는 기본 클래스내에서 선언되어 파생 클래스에 의해 재정의 되는 멤버 함

2023년 7월 26일
·
0개의 댓글
·

C03

Exercise 00 : ft_strcmp string compare 즉 문자열 두 개를 비교해주는 함수 return값에 대한 설명이 0일 때 같고 0보다 작다와 크다라고 나와서 헷갈렸지만 다행히 두 문자열이 만나서 처음으로 다른(차이가 0이 아닌) 문자가 나왔을 때 그 차이를 리턴해주면 된다. 주의할점 : 확장 ASCII > Exercise 01 : ft_strncmp 00번과 마찬가지, 하지만 비교할 길이를 정해준다. > Exercise 02 : ft_strcat string concatenate 즉 문자열을 이어주는 함수 > Exercise 03 : ft_strncat 02번과 마찬가지, 하지만 src를 최대 nb까지 붙여준다. > Exercise 04 : ft_strstr string 안에 특정 string이 존재하는지 확인하는 함수 함수를 탐색하면서 to_find보다 str이 먼저 null에 도달하면 안되기

2023년 7월 25일
·
0개의 댓글
·