기타: 123개의 글
[C++] 동적 메모리 할당 예제 new delete 변수와 배열을 동적으로 할당하고 해제할 수 있다. 동적으로 할당한 변수는 반드시 해제해줘야 한다. 함수에서 선언된 변수는 함수가 종료되면서 같이 자동으로 해제되지만,동적으로 할당한 변수는 해제되지 않고 직접 해제해줘야 한다. new : 변수 동적 할당delete : 동적 할당 변수 해제 new[] : 배열 동적 할당delete[] : 동적 할당 배열 해제#include using namespace std; int main(){ // int 타입 동적 메모리 할당 int* p = new int; *p = 337; cout
[C++] 10진수를 2진수로 변환 예제 재귀 함수를 이용한 2진수 변환 예제#include using namespace std; // 2진수의 자리 수 하나를 구하는 재귀 함수 void Convert2Bin(int dec){ // 10진수가 0보다 작거나 같으면 종료한다. if (dec
[C++] 두 점 사이의 거리 구하기 pow(), sqrt() 두 점사이의 거리를 구해보자. 하나의 점은 구조체로 x, y 좌표를 초기화한다. 두 점 사이의 거리는 피타고라스의 정리를 사용하여 구할 수 있다. 거리 =이 계산을 하기 위해서는 제곱과 제곱근을 계산해야 한다. #include 를 사용하여, pow() 와 sqrt() 함수를 사용할 수 있다. pow(a,b) : a의 b승 sqrt(x) : x의 제곱근 따라서 아래와 같이 Distance 함수를 작성할 수 있다.#include #include using namespace std; struct Point{ int x, y; }; double Distance(const Point& p1, const Point& p2); int main(){ // ..
[C++] 포인터와 레퍼런스 인자(Parameter)의 비교 함수의 결과를 얻어오기 위한 방법으로 포인터 타입과 레퍼런스 타입의 파라미터를 사용한다. 두 가지를 상황에 맞게 사용하면 되지만, 레퍼런스가 사용하기 쉽고 안전하다. 포인터 타입의 파라미터(int* a)를 사용할 때, 가장 큰 위험은 NULL 값이 넘겨져 오는 경우이다. 반드시 NULL 값은 아니더라도 올바르지 않은 주소 값이 넘어왔을 때는 심각한 문제가 발생할 수 있다. 그래서 포인터 파라미터의 경우에는 올바른 주소가 넘어왔는지 반드시 확인해야 한다. bool checkParam(int a, int b, int* pa, int* pb){ if (NULL == pa || NULL == pb) return false; return true; } ..
[C++] 팩토리얼 구하기 예제 (1) for 문을 이용한 Factorial#include using namespace std; int Factorial(int n); int main(){ int result; result = Factorial(5); cout
[C++] 최대공약수, 최소공배수 구하기 예제 GCD : 최대공약수 LCM : 최소공배수 #include using namespace std; void GCD_LCM(int a, int b, int& gcd, int& lcm); int main(){ int gcd = 0; // 최대공약수 int lcm = 0; // 최소공배수 // 최대 공약수와 최소공배수의 주소값을 전달한다. GCD_LCM(28, 35, gcd, lcm); cout
[C] 퀵정렬 예제 정리 퀵 정렬은 아주 빠른 속도를 나타낼뿐만 아니라 원리도 간단해서 많은 응용 분야에서 사용되고 있다. 퀵 정렬은 연속적인 분할에 의해서 정렬한다.축(Pivot)값을 중심으로 왼쪽은 이 축값보다 작은 값으로 오른쪽은 모두 이 축값보다 큰 값을 배열시키는 것이다.이렇게 하여 축값의 왼쪽과 오른쪽 부분을 각각 또다시 분할하고 하는 과정을 분할의 크기가 1이 될 때까지 반복하면 전체적으로는 정렬이 완료된다. 알고리즘1. 만약 n>1 이면1.1 N 크기의 a 배열을 분할 하여 축값의 위치를 mid로 넘긴다.1.2 퀵 정렬 알고리즘(a, mid)1.3 퀵 정렬 알고리즘 (a+mid-1, N-mid-1) 퀵 정렬은 안정성이 없다. void quick_sort(int a[], int n){ int..
[C] 분포수 세기 정렬 예제 분포수세기는 아주 간단한 알고리즘으로 같은 키가 많이 있는 배열에 한해 적용할 수 있는 정렬 알고리즘이다.분포수세기는 특정 키 값이 출현하는 빈도를 저장하여 누적분포를 이용하여 간단하게 정렬하는 방법이다. 분포수세기 알고리즘은 안정성이 있다. 그러기 위해서 배열의 뒤에서부터 앞으로 값을 꺼내온다. #include #include void dist_count(int a[], int n, int m){ int i; int *b, *count; b = (int*)malloc(sizeof(int)*n); count = (int*)malloc(sizeof(int)*(m + 1)); for (i = 0; i
[C] 쉘정렬 사용 예제 삽입 정렬은 이미 정렬된 배열이나 대충 정렬된 배열에 대해서는 매우 뛰어난 성능을 보이지만 그렇지 않은 경우에는 속도가 매우 느리다. 이것은 삽입 정렬이 바로 인접한 요소와 비교를 하기 때문이다. 쉘 정렬은 이 같은 문제점을 해결하기 위해서 h만큼의 간격으로 떨어진 레코드를 삽입 정렬하는 방법이다. 쉘 정렬은 안정성이 없다 쉘 정렬은 h 값에 의해 성능이 좌우된다.h = 3 * h +1 이 가장 효율이 좋다고 한다. #include #include // 최대 효율 h 지정 h = 3*h+1 void shell_sort1(int a[], int n){ int i, j, k, h, v; for (h = 1; h 0; h /= 3){ for (i = 0; i v){ a[k] = a[k..