본문 바로가기

컴퓨터/C++

complex class 구현 Complex Class C++에서 제공하는 연산자 overloading을 이용해서 복소수를 클래스로 구현해보았다.복소수 클래스의 멤버 변수들을 외부에서 변경하지 못하게 하기 위해서 private으로 선언하였으며, 멤버 함수는 사칙 연산 및 입출력에 대한 내용에 대해서만 구현을 하였다. #ifndef COMPLEX_H #define COMPLEX_H #include using namespace std; class Complex{ private: double real; double imag; public: Complex(double real = 0, double imag = 0) : real(real), imag(imag) {} friend Complex operator+(const Complex& c1,..
대소문자 변경하기 문자 하나를 입력받았을 때 그 문자를 대문자로 변경하는 함수와, 소문자로 변경하는 함수를 구현하는 방법은 ascii code를 이용하면 된다. 쉽게 사용할 수 있는 방법은 대문자와 소문자의 ascii code의 차이가 32만큼 난다는 사실을 이용한다는 것이다.즉 대문자인 경우에는 32를 더해주면 소문자로 바꿀 수 있고, 소문자인 경우에는 32를 빼주면 대문자로 바꿀 수 있다. 이것을 C++ 문법으로 표현하면 아래와 같다. char to_lower(char ch){ if(ch >= 'A' && ch = 'a' && ch = 'A' && ch = 'a' && ch
Merge Sort 구현 C++를 이용하여 Merge Sort를 구현한 소스코드이다. Merge를 할 때 원래는 마지막인지 체크를 하고 값을 넣는 과정이 있어야 하지만, 이렇게 하면 코드가 복잡해지기 때문에 합치려는 배열의 사이즈를 1씩 증가시켜서 마지막에 INT형 범위의 최댓값을 넣는 방법으로 구현하였다. #include using namespace std; #define INTMAX 2147483647 void mergeSort(int[], int, int); void merge(int[], int, int, int); int main(){ int *arr, N; cin >> N; arr = new int[N]; for (int i = 0; i > arr[i]; mergeSort(arr, 0, N ..
*없이 두 정수 곱하기 모든 컴퓨터 언어에서는 곱하기 연산을 기본적으로 제공해주고 있다. 그런데 만약 '*'가 막혀 있다면 어떻게 계산을 할 수 있을까? C++에서는 정수형 데이터에 대해서 곱하기와 비슷한 연산자인 비트연산자를 제공해주고 있다. 그래서 이것을 이용하면 '*'없이 곱하기를 구현할 수 있다. (다만 매우 비효율적이다..ㅋㅋㅋㅋㅋㅋ 그냥 단순히 비트연산자를 다루는 방법을 터득한다고 생각하고 진행하자. 단순히 '*'문자가 필터링이 되어 있다면 어셈블리로 작성하는 것이 속도 상으로 더 나을수도 있겠다.) int multiply(int a, int b){ int result = 0; int tmp = 0; int sign = 0; // b의 음수여부 if(b ..
Stack 기반 미로 찾기(DFS) 보호되어 있는 글입니다.
Stack을 이용한 간단한 계산기 #include #include #include #include using namespace std; int calc(int op1, int op2, string op){ if(!op.compare("+")){ return op1+op2; } if(!op.compare("-")){ return op1-op2; } if(!op.compare("*")){ return op1*op2; } if(!op.compare("/")){ return op1/op2; } cout > token){ cout