분류 전체보기 254

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 운영체제에서 제공하는 라이브러리입니다. 운영체제에서 제공하는 라이브러리에는 기능과 함께 다양한 형식들을 제공하고 있습니다. 특히 운영체제에서 제공하는 기능을 ..

테트리스 처음부터 끝까지 [C++, Windows API]

1. 유튜브 동영상 강의 2. 소스 코드 안녕하세요. 언제나휴일입니다. 동영상 강의를 제작하면서 만든 코드입니다. 불필요한 코드가 남아있지만 그대로 올립니다. 2.1 Program.cpp #include #include "Document.h" #define BOARD_SX70 #define BOARD_SY50 #define MY_WIDTH15 #define MY_HEIGHT15 #define MY_RX(x)(BOARD_SX+(x)*MY_WIDTH) #define MY_RY(y)(BOARD_SY+(y)*MY_HEIGHT) #define NEXT_SX270 #define MY_NRX(x)(NEXT_SX+(x)*MY_WIDTH) #define MY_NRY(y)(MY_RY(y)) #define DIAGRAM_W..

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

유튜브 동영상 강의 알고리즘 날짜 계산(년도, 일수) 월별 일수:={ 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를 입력인자로 전달하여 일 수를 출력..