소스 코드 201

P2P 메신저 – 숏 메시지 송수신 예광탄 구현하기 [C#]

1. 유튜브 동영상 강의 안녕하세요. 언제나 휴일에 언휴예요. 이번 강의는 P2P 메신저 중에서 숏 메시지 송수신 부분을 구현할 거예요. P2P 프로그램은 Peer와 Peer 사이의 통신을 하는 프로그램을 말하죠. 전통적인 네트워크 프로그래밍에서 사용자가 사용하는 응용을 클라이언트, 서비스 제공하는 응용을 서버라고 부르죠. 그런데 P2P 프로그램에서 사용자가 사용하는 Peer는 특정 네트워크 서비스를 서버를 거치지 않고 Peer끼리 직접 주고 받습니다. 이를 위해 특정 서비스의 서버 부분과 클라이언트 부분이 Peer 부분에 구현합니다. 이번 강의는 이러한 특징을 갖는 P2P 프로그램 중에 Short 메시지를 주고 받는 부분을 구현합니다. 2. 화면 배치 숏 메시지 송수신 예광탄 프로그램에서는 자신의 IP..

스택 - 버퍼 크기 고정

1. 스택 스택은 자료를 한쪽으로 보관하고 꺼내는 LIFO(Last In First Out) 방식의 자료구조입니다. 스택에 자료를 보관하는 연산을 PUSH라 말하고 꺼내는 연산을 POP이라고 말합니다. 그리고 가장 최근에 보관한 위치 정보를 TOP 혹은 스택 포인터라 말합니다. 2. 알고리즘 Push 연산 IF Top> MAX Then (꽉 차면) Overflow (버퍼 오버플로우) Else (꽉 차지 않을 때) Top = Top +1 (Top 위치를 1 증가) Buffer[Top] = data (버퍼의 Top 위치에 data 보관) Pop 연산 IF Top=-1 Then (비었으면) Underflow (버퍼 언더플로우) Else data = Buffer[Top] (버퍼의 Top 위치의 값을 데이터에 설..

힙 정렬(Heap Sort) 알고리즘

1. 알고리즘 힙 정렬은 힙 트리를 이용하는 알고리즘입니다. 최대 힙을 사용하면 크기 순(Ascend)으로 정렬하고 최소 힙을 사용하면 크기 역순(Descend)으로 정렬합니다. 힙 정렬은 먼저 힙 트리를 구성합니다. 그리고 루트의 값과 맨 마지막 값을 교환한 후에 정렬 범위를 1 줄입니다. 이와 같은 작업을 반복하여 정렬 범위가 1일 때까지 반복합니다. 최대 힙 트리에서 루트는 최대 값을 갖습니다. 따라서 마지막 값과 교환하면 제일 큰 값이 맨 뒤로 배치할 수 있습니다. 그리고 난 후에 정렬 범위를 줄여나가면 최종적으로 정렬 상태를 만들 수 있는 것입니다. 힙 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 초기 힙 구성 루트와 맨 마지막 자손 교환 n을 1 감소 반복(n..

[C#] 테트리스 만들기 – Part 4(Final). 꽉 찬 줄 지우기, Ending

프로젝트 다운로드 프로젝트 다운로드 -벽돌 모양에 따라 색상 변경 기능 추가 1. 유튜브 동영상 강의 안녕하세요. 언제나 휴일에 언휴예요. 이번 강의는 테트리스 프로젝트의 마지막 부분입니다. 이번 강의에서는 꽉 찬 라인을 지우는 기능과 종료 조건을 체크하는 부분을 구현합니다. 2. Board 형식 수정 Store 메서드에 라인이 꽉 찼는지 확인하는 메서드를 호출합니다. 이 때 주의할 점은 라인 체크는 아래부터 한다는 것입니다. 벽돌이 4X4공간에 배치하므로 벽돌이 있는 좌표에서 3칸 더 있다는 것을 고려하세요. internal void Store(int bn, int turn, int x, int y) { for (int xx = 0; xx < 4; xx++) { for(int yy = 0; yy=0)&..

[C#] 테트리스 만들기 – Part 3. 벽돌 쌓기

프로젝트 다운로드 1. 유튜브 동영상 강의 안녕하세요. 언휴예요. 이번 강의는 “테트리스 프로젝트 Part 3. 벽돌 쌓기” 입니다. 2. Board 형식 정의 벽돌을 쌓기 위해서는 Board의 상태를 기억할 형식이 필요합니다. 하나의 개체만 필요해서 단일체로 표현할게요. class Board { internal static Board GameBoard { get; private set; } static Board() { GameBoard = new Board(); } Board() { } } 벽돌을 쌓기 위한 배열 멤버 필드를 선언하고 배열 개체를 생성하세요. int[,] board = new int[GameRule.BX, GameRule.BY]; 보드의 특정 영역이 어떤 값인지 확인할 수 있게 속성을..

[C#] 테트리스 만들기 – Part 2. 테트리스 도형 정의하기, 도형 회전하기

프로젝트 다운로드 1. 유튜브 동영상 강의 안녕하세요. 언휴예요. 이번 강의는 “[언제나 프로젝트] 테트리스 Part2″입니다. 현재 작업한 내용은 다음과 같습니다. 게임 공간 정의 키보드로 도형 이동(좌, 우, 아래) 타이머로 도형 내리기 이번 강의에서 다룰 내용은 다음과 같습니다. 테트리스 도형 모양 정의 회전 2. 테트리스 도형 모양 정의 테트리스 벽돌은 모두 7가지 입니다. 테트리스 벽돌은 90도로 회전하여 4가지 형태로 모양이 변할 수 있습니다. 테트리스 벽돌은 4X4 공간에 총 4개의 돌이 공간을 차지합니다. 테트리스 벽돌 모양은 모두 7가지 종류로 변하는 값이 아닙니다. 이를 읽기 전용으로 정의할 거예요. 그리고 벽돌 모양 정의는 별도의 형식에서 정의할게요. 이는 개체를 만들기 위함이 아니라..

[C#] 테트리스 만들기 – Part 1. 키보드로 도형 제어하기, 타이머로 도형 아래로 이동

프로젝트 파일 다운로드받기 1. 유튜브 동영상 강의 안녕하세요. 언휴예요. 이번 강의는 미니 프로젝트 “테트리스” 만들기 중에 첫 번째 파트입니다. 테트리스는 총 4개의 파트로 나누어져 있으며 동영상 강의 기준으로 80여분 요구합니다. 이번 강의에서는 사각형 하나를 키보드로 이동시키고 타이머로 내리기입니다. 2.GameRule 만들기 먼저 게임의 보드 공간의 폭과 너비, 게임 좌표, 시작 좌표를 정의할게요. namespace 테트리스_만들기 { static class GameRule//동강에서는 static 클래스가 아닌 것으로 표현했었요. { internal const int B_WIDTH = 30;//게임 X좌표 1의 Pixel수 internal const int B_HEIGHT = 30;//게임 Y..

TCP 통신 – Echo 서버 클래스 구현, 이벤트 정의 및 콜백 처리 [C#]

1. 유튜브 동영상 강의 이번 실습은 Echo 서버 클래스를 구현하는 실습이예요. 여기서 만들 서버 클래스는 라이브러리로 제작하기 위한 목적으로 사전 작업하는 것이예요. 서버 클래스를 사용하는 곳에서 연결 수락 및 닫기, 메시지 수신에 관한 이벤트 처리를 할 수 있게 정의합니다. 대리자 및 이벤트 인자를 정의하고 Echo 서버에 이벤트 멤버를 정의하여 콜백 처리를 하는 것이죠. 2. 연결 수락 이벤트 인자 및 대리자 소스 코드 using System; using System.Net; namespace 에코_서버_응용___클래스로_정의 { public delegate void AcceptedEventHandler(object sender, AcceptedEventArgs e); public class Ac..

TCP 통신 – echo 서버 및 클라이언트 구현 [네트워크 프로그래밍 C#]

1. 유튜브 동영상 강의 이번 실습은 TCP 통신의 기본 절차를 확인하는 실습입니다. 실습 소재는 echo 서비스입니다. 클라이언트에서 전송한 메시지를 다시 반송하는 서비스를 제공합니다. 2.TCP 통신 절차 TCP 프로토콜을 이용한 통신은 서버와 클라이언트 사이에 연결을 형성한 후에 스트림 방식으로 패킷을 송수신합니다. 스트림 방식의 통신에서는 전송한 패킷의 순서대로 도착하며 패킷 전송 중에 전송이 실패하면 다시 전송하여 신뢰성을 보장하는 방식입니다. TCP 통신에서 서버의 절차는 다음과 같습니다. 소켓 생성(대기 소켓) Bind: 소켓 – 네트워크 인터페이스와 결합 Listen: 백 로그 큐 크기 설정 반복 – Accept:클라이언트 연결 요청 대기 및 수락(송수신 소켓 반환) 클라이언트와 데이터 송..

병합 정렬(합병 정렬, Merge Sort) 알고리즘

1. 유튜브 동영상 강의 병합 정렬 알고리즘 동영상 강의 2. 알고리즘 이번에는 병합 정렬 알고리즘을 살펴봅시다. 병합 정렬 알고리즘은 배열을 작은 단위의 배열로 분할한 후에 분할한 배열을 정렬하고 이들을 다시 정렬하면서 전체 배열을 정렬하는 알고리즘입니다. 병합 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) ah:= n/2 bh:= n – ah; 조건(n이 1보다 작거나 같으면) 종료 병합정렬(base,ah,compare) 병합접열(base+ah,bh,compare) tbase에 동적 메모리 할당(원소크기*원소개수) 메모리 복사(tbase,base) ai:=0 bi:=ah i:=0 반복(ai가 ah보다 작으면서 bi가 n보다 작다) 조건(tbase[ai]가 tbase[b..

퀵 정렬 (Quick Sort)

1. 유튜브 동영상 강의 퀵정렬 유튜브 동영상 강의 2. 퀵정렬 알고리즘 퀵 정렬 알고리즘은 피벗 값을 선택하여 피벗 값보다 작은 값들은 왼쪽으로 보내고 큰 값들은 오른쪽으로 보낸 후에 이들 사이에 피벗을 위치시키는 원리를 이용합니다. 이후 피벗보다 작은 값들을 재귀 호출로 정렬하고 피벗보다 큰 값들도 재귀 호출로 정렬하는 방식입니다. 그런데 퀵 정렬은 어떠한 요소를 피벗으로 선택하냐에 따라 성능에 차이가 납니다. 만약 전체 요소의 중간 순위의 요소를 선택하면 재귀 호출에서 반씩 나누어 정렬을 하게 되어 좋은 성능을 발휘합니다. 하지만 가장 작은 값이나 가장 큰 값을 피벗으로 선택하면 최악의 성능을 발휘합니다. 여기에서는 맨 앞과 맨 뒤, 그리고 중간 위치의 요소를 비교하에 세 값 중에 중간 값을 피벗으..

삽입 정렬 (Insertion Sort)

1. 유튜브 동영상 강의 1.1 삽입 정렬 알고리즘 삽입 정렬 알고리즘 1.2 삽입 정렬 알고리즘 구현 삽입 정렬 알고리즘 구현 2. 삽입 정렬 알고리즘 이번에는 반복 알고리즘 중에 삽입 정렬 알고리즘을 알아봅시다. 삽입 정렬 알고리즘은 점진적으로 정렬 범위를 넓혀 나가는 방식으로 정렬하는 알고리즘입니다. 이를 위해 새로운 범위에 포함하는 마지막 원소를 앞으로 이동하면서 자신보다 작은 요소를 찾을 때까지 이동하면서 자리를 교환합니다. 삽입 정렬(base:컬렉션, n:원소 개수, compare:비교 논리) 반복(i:=1; i0 ; j:=j-1) 조건(compare (base [j-1], base [j]) < 0) temp: = base [j-1] base[j-1] = base [j] base[j] = te..

선택 정렬 (Selection Sort) 알고리즘

1. 유튜브 동영상 강의 1.1 선택 정렬 알고리즘 선택 정렬 알고리즘 동영상 강의 1.2 선택 정렬 알고리즘 구현 선택 정렬 알고리즘 구현 동영상 강의 2. 알고리즘 이번에는 반복 알고리즘일 이용하는 선택 정렬 알고리즘을 알아봅시다. 선택 정렬 알고리즘은 제일 큰 값을 찾아 맨 뒤의 요소와 교체하는 방법을 반복하여 전체를 정렬하는 알고리즘입니다. 물론 제일 작은 값을 찾아 맨 앞의 요소와 교체하는 방법을 반복할 수도 있습니다. 선택 정렬 알고리즘을 의사코드(pseudo code: 논리적인 수행 흐름을 이해할 수 있게 작성한 코드)는 다음과 같습니다. 선택 정렬(base:컬렉션,n:원소 개수,compare:비교 논리) 반복(i:=n; i>1 ; i:= i-1) 반복(max=0,j:=1; j1; i--)/..

버블 정렬 (Bubble Sort) 알고리즘

1. 유튜브 동영상 강의 1.1 버블 정렬 알고리즘 1.2 버블 정렬 알고리즘 소스 코드 구현 2. 알고리즘 이번에는 반복적인 방법으로 해결하는 버블 정렬 알고리즘을 살펴봅시다. 정렬 알고리즘은 배열의 자료를 원하는 순으로 배치하는 것을 말합니다. 이를 위해 입력 인자로 정렬할 자료들이 있는 배열의 시작 주소와 원소 개수, 비교 알고리즘을 전달합니다. 그리고 수행 후에는 배열 내의 자료들이 원하는 순서로 보관한 상태여야 합니다. 이 중에 버블 정렬은 앞에서부터 이웃하는 원소의 값을 비교하여 위치를 교환하는 것을 반복합니다. 이를 끝까지 수행하면 제일 큰 값이 맨 뒤에 위치합니다. 그리고 정렬할 개수를 1 줄인 후에 다시 반복합니다. 정렬할 원소의 개수가 1이면 모든 작업을 완료합니다. 2.1 알고리즘 p..

순차 정렬(Sequential Sort) 알고리즘

1. 유트브 동영상 강의 1.1 순차정렬 알고리즘 1.2 순차정렬 알고리즘 실습. 소스 코드 구현 2. 알고리즘 이번에는 반복적인 방법으로 해결하는 순차 정렬(Sequential Sort) 알고리즘을 살펴볼게요. 정렬 알고리즘은 배열의 자료를 원하는 순으로 배치하는 알고리즘을 말해요. 정렬 알고리즘은 입력 인자로 정렬할 자료들이 있는 배열의 시작 주소와 원소 개수, 비교 알고리즘이 필요합니다. 그리고 수행 후에는 배열 내의 자료들은 원하는 순서로 배치한 상태여야 합니다. 순차 정렬은 맨 앞에서부터 제일 작은 원소를 배치하게 만들어 나가는 알고리즘이예요. 이를 위해 배치할 자리에 있는 원소를 뒤쪽에 있는 원소들과 비교하면서 작은 것을 발견하면 배치할 위치의 원소와 교환해요. 순차 정렬(base:배열의 시작..

디지털 시계

유트브 동영상 강의 소개 이번에는 디지털 시계 소스 코드입니다. 먼저 0부터 9까지 출력할 정보를 3차원 배열로 정의한 후에 시, 분, 초를 출력하는 함수를 정의합니다. 그리고 콘솔 커서의 위치를 이동하는 gotoxy 함수를 정의합니다. 그리고 time 함수를 이용하여 1초가 지났는지 주기적으로 확인하여 1초가 지나면 현재 시각을 구한 후에 출력합니다. 소스 코드 #include #include #include #include #pragma warning(disable:4996) char*digits[10][5][4] =//0~9까지 출력할 정보 { { { "■","■","■","■" }, { "■"," "," ","■" }, { "■"," "," ","■" }, { "■"," "," ","■" }, {..

1/100 초 단위의 시계

유튜브 동영상 강의 소개 안녕하세요. 언제나 휴일입니다. 이번에는 1/100초 단위로 현재 시각을 콘솔 화면에 출력하는 시계 소스 코드입니다. 이를 통해 time.h 에 정의하고 있는 다양한 일시와 시간에 관한 형식과 함수 사용 방법을 알 수 있습니다. 소스 코드 /* https://ehpub.co.kr 언제나 C언어 예제 Center 1/100초 단위의 시계 구현 */ #include #include #include #include void print_time(struct tm* now, int tail) { COORD CursorPostion = { 0,1 }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPostion); prin..

년도 입력하면 달력 출력하기

유튜브 동영상 강의 윤년 계산하기 4로 나누어 떨어지는 해는 대부분 윤년입니다. 이 중에 100으로 나누어 떨어지는 해는 대부분 평년입니다. 이 중에 400으로 나누어 떠러지면 윤년입니다. 윤년(년도) ….(년도는 4의 배수 and 년도는 100의 배수가 아님) or 년도는 400의 배수 1월 1일의 첫 번째 요일 찾기 평년은 365일로 요일이 하나 증가합니다. 윤년은 366일로 요일이 하나 더 증가합니다. 따라서 특정 년도는 “년도 + 윤년 개수”만큼 증가합니다. 달 출력하기 월 출력(m,시작 요일) ….월 출력 ….반복(w:1->시작 요일) ……..공백 출력 ….반복(d:1->월별 날짜[월]) ……..시작 요일 1 증가 ……..조건(시작 요일 is equal 7) …………시작 요일:= 0 …………개행..

1월 1일 요일 입력받아 달력 출력

유튜브 동영상 강의 알고리즘 전역 데이터 월별 날짜={31,28,31,30,31,30,31,31,30,31,30,31} 메인 알고리즘 ....년도 입력 ….시작 요일 입력 ….조건(입력한 년도가 윤년이면) ……..2월달의 날 수를 29로 설정 ….반복(m:1->12) ……..시작 요일 = 월 출력(m,시작 요일) 월 출력(m,시작 요일) ….월 출력 ….반복(w:1->시작 요일) ……..공백 출력 ….반복(d:1->월별 날짜[월]) ……..시작 요일 1 증가 ……..조건(시작 요일 is equal 7) …………시작 요일:= 0 …………개행 출력 ….시작 요일 반환 알고리즘의 의사코드에서는 반복문의 변수를 1부터 출발하는 것으로 표현하였지만 실제 코드에서는 0부터 시작하는 것으로 작성하였습니다. 참고하세요..

1. Windows API 소개

유튜브 동영상 강의 Windows API 소개 유튜브 동영상 강의 Windows API는 Microsoft 사의 Windows 운영체제에서 제공하는 자료 형식과 기능을 포함하는 시스템 라이브러리입니다. Windows는 윈도우즈 운영체제를 의미하며 API는 Applicataion Program Interface의 약어로 응용 프로그램 인터페이스를 뜻합니다. 인터페이스가 특정 기능을 제공함을 약속하는 것이므로 API는 응용 프로그램을 작성할 때 사용하는 기능입니다. 따라서 Windows API는 응용 프로그램을 개발할 때 사용할 수 있게 Windows 운영체제에서 제공하는 라이브러리입니다. 운영체제에서 제공하는 라이브러리에는 기능과 함께 다양한 형식들을 제공하고 있습니다. 특히 운영체제에서 제공하는 기능을 ..

년도와 일수 입력받아 날짜 계산하기

유튜브 동영상 강의 알고리즘 날짜 계산(년도, 일수) 월별 일수:={ 31,28,31,30,31,30,31,31,30,31,30,31}; 조건(year is 윤년) 2월 달 일수:=29 반복(일수>월별일수[달]) 일수:= 일수 – 월별일수[달] 날짜 출력 소스코드 //[언제나 C언어] 년도와 일수 입력받아 날짜 계산하기 [예제 Center] #include void date(int year, int day);//년도와 일수를 입력하면 년월일 출력 int main(void) { int year, day; printf("년도와 일수 입력(예:2016 102): "); scanf_s("%d %d", &year, &day); date(year, day); //year와 day를 입력인자로 전달하여 일 수를 출력..