* CHAPTER 4 - C언어와 화면 표시의 연습 #1 C언어로 메모리에 쓰기 (harib01a) 3일차 까지는 화면을 새카맣게 만드는 것까지 성공했다. 이번엔 화면에 뭔가를 그려보는 실습을 해보자. 뭔가를 그리기 위해선 VRAM에 뭔가를 쓰면 된다. 하지만 C언어에는 그런 기능이 존재하지 않는다. 그래서 그런 기능을 가진 함수를 만들어봤다. /************************************************* ** 3일차까지 완성되었던 naskfunc.nas 파일에 몇 줄을 추가함 *************************************************/ ; naskfunc ; TAB = 4 [FORMAT "WCOFF"]; 오브젝트 파일을 만드는 모드 [BITS ..
# 선택 정렬 [Selection sort] // 소스코드는 최하단에 첨부되어 있습니다. (게시글 복붙, 드래그 불가) 만약 우리가 1보다 크거나 같은 모든 정수에 대하여 크기 순으로 정렬하는 프로그램을 작성한다고 가정해보자. 그 때 생각할 수 있는 기본 아이디어는 배열을 사용하는 것이고, 둘째로 가장 작은 수를 찾아 배열의 가장 왼쪽 (index 0)으로 이동시키는 작업이다. /************************************************* ** Selection sort program example *************************************************/ #include #include #include // 배열의 최대크기 제한 #define..
# 이진 탐색 트리란? // 이 글은 복붙 및 드래그가 불가하니 밑에 소스파일을 다운로드 해주세요. 이진 탐색 트리(binary search tree)는 이진 트리 기반의 탐색을 위한 자료 구조이다. 이진 탐색 트리의 조건에는 아래와 같이 4개의 조건이 있다. 모든 노드의 키는 유일하다. // 중복된 데이터를 갖는 노드가 없다는 뜻이다. 여기서 키의 의미는 노드 안에 들어 있는 데이터 값을 의미한다. 왼쪽 서브 트리의 키들은 루트의 키보다 작다. // 예를 들어 루트노드의 데이터가 5라고 하면, 왼쪽 서브트리에는 무조건 5보다 작은 값들만 존재해야 한다. 오른쪽 서브 트리의 키들은 루트의 키보다 크다. // 위와 같은 원리로 오른쪽에는 루트의 데이터 값보다 더 큰 값들만 존재한다. 왼쪽과 오른쪽 서브 트..
# 스레드 이진트리 // 이 글은 드래그 및 복붙이 되지 않습니다. 소스파일은 하단에 첨부되어 있습니다. 이진트리 순회는 순환호출을 사용한다. 하지만, 순환호출은 반복문에 의해 훨씬 비효율적이다. 그리고 이 비효율성은 트리의 높이가 커질수록, 노드의 갯수가 많아질 수록 더 커진다. 따라서 이진트리의 순회를 순환 호출 없이 좀 더 효율적을 할 수 없을까? 라는 고민을 하게 된다. 우선 이진트리의 노드에는 많은 NULL 링크들이 존재한다. 구체적으로 이 사실을 살펴보도록 하자. /* 일반식으로서의 의미를 지니기 위해 n이라고 쓰지만, 실제로 논리를 따라 갈 때는 그림과 같이 n = 7 이라 생각하자. */ 트리의 노드 개수가 n개 라고 가정해보자. 각 노드당 2개의 링크가 존재하므로 (NULL도 포함) 총 ..
# 포인터(Pointer) 포인터는 C언어의 가장 기본이라고 할 수 있다. 포인터는 C에 존재하는 모든 자료형에 대해 존재하는데, 예를 들면 int에 대한 포인터, char에 대한 포인터, float에 대한 포인터 등의 형태로 사용된다. 포인터의 본질은 메모리의 주소값을 가진다는 점이다. 포인터에 관련해서는 아래에 보이는 두 개의 중요한 연산자가 있다.& 주소 연산자 (the address operator)* 간접지정 연산자 (the dereferencing or indirection operator) 이 연산자들의 의미를 살펴보기 위해 아래와 같이 변수를 선언했다고 해보자. int i, *pi; // int i; int *pi; 이 두문장을 따로 작성한 것과 동일하다. 위와 같이 쓴 이유는 간결성을 위..
# 후위 순회를 이용한 디렉토리 용량 계산 프로그램의 알고리즘 calc_direc_size /* 트리의 높이, 노드개수 구하는 알고리즘 등은 아래로 내려가시다 보면 만날 수 있습니다. *//* 또한 해당 게시물은 우클릭 및 드래그가 금지되어 있기에 맨 아래 종합 소스코드 첨부합니다. */ 이진 트리의 순회는 디렉토리의 용량을 계산하는 데도 사용될 수 있다. 단, 이진트리라는 제약조건으로 하나의 디렉토리 안에 다른 디렉토리가 2개 이하로만 존재해야 한다. // 삼진트리였다면, 3개 이하로만 존재해야 한다. 이진 트리 순회의 응용에 해당하는 프로그램 중 하나인 디렉토리 용량을 계산하는 프로그램을 소개한다. 디렉토리는 우리가 흔히 '폴더'라고 부르는 것과 동의어다. 디렉토리 용량 계산 프로그램을 작성하기 전,..
#순서논리회로 (조합논리회로 + 기억소자) 순서논리회로는 조합논리회로에 기억소자를 포함시킨 것이다. 즉, 회로가 정보를 기억하도록 만든 것이 순서논리회로다. 기억 장치에는 하드디스크, 롬, 램 등 여러 가지가 있는데, 이들의 기능은 대개 전기신호를 기억하고 있는 것이다. 옛날부터 회로 안에서 어떻게 기억을 하는 기능을 넣을 수 있을까 라는 고민과 연구가 이루어졌고, 그 결과 플립플롭(소자)가 탄생하게 됐다. 플립플롭이란, 전원이 공급되고 있는 동안 상태의 변화를 위한 신호가 발생할 때까지 현재의 상태를 그대로 유지하는 논리회로다. 즉 기억기능을 가지고 있다는 것이 가장 큰 특징이다. 플립플롭은 1비트를 기억하는 메모리 소자이며 레지스터 구성회로 널리 사용되고 있다. 플립플롭의 기억 원리는 바로 '되먹임(..
#1 조합회로와 순차회로 *조합회로 회로의 입력에 값이 주어지면 그 값에 대한 출력이 나오는 회로다. 회로의 현재 입력에 의해서만 출력값이 결정된다. (ex: AND/OR/NAND/XOR 등) *순차회로 (=순서논리회로)같은 입력이 주어지더라도 회로의 상태에 따라 출력이 다른 회로다. Clock Pulse 유무에 따라 동기식과 비동기식으로 구분된다. (ex: 플립플롭/카운터/레지스터) 순서논리회로는 기억 소자를 포함한다. 회로가 정보를 기억하도록 만든 것이 순서논리회로다. 플립플롭 회로: 플립플롭은 전원이 공급되고 있는 한, 상태의 변화를 위한 신호가 발생할 때까지 현재의 상태를 그대로 유지하는 논리회로다. 기억 기능을 가지고 있는 1비트 메모리 소자이며, 레지스터 구성회로로 널리 사용되고 있다. *플립..
#1 난 스타벅스 매장음악이 너무나도 좋다. 난 공부를 할 때, 업무로 시간을 보낼 때 주로 스타벅스에 방문한다. 방문하는 이유는 여러가지가 있겠지만, 그 중 하나는 단연 음악이다. 음악은 매장분위기를 지배하고 리드한다. 예를 들면, bpm이 빠르거나 빠른 비트의 신나는 최신 가요 등을 매장음악으로 사용하는 카페는 매우 시끌벅적한 경향이 있다. 내가 '탐앤탐스'와 '이디야'를 가지않는 이유다. 탐앤탐스와 이디야에는 시끄러운 고객들이 몰리게 되어 있다. 결국 매장의 음악이 다른 건 타겟으로 하는 고객층이 다르기 때문이다. 실제로 탐앤탐스 본사에 연락을 해서 매장 음악이 왜 이렇게 선정됐는지 알수 있냐 물어본 적이 있는데, 그에 따른 답변은 이랬다. 해당 지역의 매장을 방문하는 고객의 연령대를 기준으로 선정..
컴퓨터 시스템구조Computer System ArchitectureM. Morris Mano김종상 역 #1 솔루션 파일 공유합니다. (연습문제 해답) 무료 솔루션 파일을 얻으려 별의 별 시도를 하다 지쳐 유료로 결제를 하기에 이르렀습니다. 애초에 출판사에서 솔루션을 주지 않는 것 자체가 문제겠지요. 이에 솔루션을 공유합니다. /* 저처럼 정보를 찾는데 지치시거나, 유료로 결제하는 일이 없길 바라는 마음에서 공유합니다. */
- Total
- Today
- Yesterday