본문 바로가기

Studying/Computer Programs

C/C++ Runge-Kutta 방법으로 알아보는 심해 압력 여기서는 바다속의 수압이 깊이에 따라 어떻게 달라지는지 수치해석으로 알아봅시다. 정역학적 평형 (hydrostatic equilibrium)과 물의 상태 방정식 (equation of state)을 결부지어서 미분방정식을 세우고, 이를 Runge-Kutta 방법을 통해 풀어보겠습니다. 유체의 정역학적 평형에 대해서 간단히 말하자면, 위치에 따라 달라지는 압력으로 인해 생기는 힘이 외력과 상쇄가 되었을 때 알짜힘이 0이 되어 유체의 운동상태가 일정하게 유지되는 것을 의미하는데요. 이러한 정역학적 평형 상태를 정의하기 위한 미분방정식을 세우는 방법은 다음 포스팅에 더 자세하게 소개되어 있습니다. 물리학 상식 : 유체의 정역학적 평형 이번 포스팅에서는 자유롭게 흐를 수 있는 유체가 움직이지 않는 역학적 평형상.. 더보기
C/C++ 반복-이완 계산법으로 알아보는 비행경로 이번 포스팅에서는 구면 상에 있는 두 지점 사이의 최단 경로를 위도와 경도에 대한 함수로 구한 다음, 출발지와 목적지 사이의 비행기 항로를 결정하는 방법에 대해 알아봅시다. 수치해석 방법 중의 하나인 반복-이완 계산법 (iteration-relaxation method)을 구현한 C++ 프로그램을 통해 서울/인천 국제공항에서 여러 목적지로 향하는 최단경로를 직접 계산해 보겠습니다. 위도와 경도는 구면 상에서 정의되는 좌표계이며, 비행경로를 평면 지도 상에 투영하기 위해서는 지도 투영법 혹은 도법에 대해 알아둘 필요가 있습니다. 위도와 경도의 개념 및 지도 투영법에 대한 더 자세한 내용은 다음 포스팅에 소개되어 있습니다. 수학 상식 : 위도, 경도와 지도 투영법 이번 포스팅에서는 구면 상의 위치를 정의하기.. 더보기
비주얼 스튜디오 C/C++ 라이브러리 만들기 이번 포스팅에서는 마이크로소프트 비주얼 스튜디오에서 C언어 또는 C++ 라이브러리를 제작하고 사용하는 법에 대해 알아봅시다. 라이브러리는 정적 (static) 라이브러리와 동적 (dynamic) 라이브러리가 있는데요. 정적 라이브러리는 실행 파일에 함수들의 정보가 모두 들어가는 반면에, 동적 라이브러리는 프로그램이 실행되는 시점에 소환된다는 차이점이 있습니다. 비주얼 스튜디오에서는 별도의 프로젝트 유형을 선택하여 이러한 라이브러리들을 만들고 사용할 수 있습니다. 여기서는 비주얼 스튜디오 커뮤니티 2019 버전을 기준으로 이야기하며, 소스 코드로부터 프로그램을 만드는것과 관련된 기본적인 내용들은 다음 포스팅에 소개되어 있습니다. 비주얼 스튜디오 C/C++ 콘솔 프로그램 만들기 여기서는 마이크로소프트의 통합.. 더보기
비주얼 스튜디오 C/C++ 콘솔 프로그램 만들기 여기서는 마이크로소프트의 통합 개발환경인 비주얼 스튜디오를 이용해서, C언어 또는 C++ 콘솔 프로그램을 만드는 법에 대해서 알아봅시다. 콘솔 프로그램이란 문자만으로 이루어진 인터페이스를 가진 프로그램으로, 터미널을 열어서 명령 프롬프트 등을 통해 실행하는 것이 한 예시가 될 수 있습니다. 참고로 이 포스팅은 비주얼 스튜디오 커뮤니티 2019를 기준으로 작성되었습니다. 요즘 세상에 누가 콘솔 프로그램을 쓸까 싶을 수 있는데요. 수학이나 과학 문제를 수치적으로 푸는 프로그램같이 계산결과를 파일에 저장한 뒤, 이를 시각화하는 것은 별도의 프로그램에게 맡기는 경우라면 콘솔 어플리케이션도 나쁘지 않은 선택입니다. 그래서 저도 개인적으로 이러한 용도의 비주얼 스튜디오 콘솔 프로그램을 많이 작성했었습니다. 뿐만 아.. 더보기
C++ 동적 메모리 할당 (new, delete 키워드) 여기서는 new 및 delete 키워드를 통해 C++ 프로그램에서 메모리 공간을 동적으로 할당받고 해제하는 방법에 대해서 짚어보겠습니다. 보통 변수나 객체를 소스 코드 내에서 선언하게 되면, 선언한 시점부터 함수나 코드블록 등이 끝날 때 까지 메모리 공간을 점유하게 됩니다. 메모리를 절약해야 하는 상황이라면, 동적 메모리 할당을 통해 한 개 또는 여러개의 변수나 객채를 위한 메모리 공간을 필요할 때만 할당받아 사용하는 것이 좋은 방법입니다. 1개의 변수나 객체를 생성하기 위해서는, 포인터 변수를 선언하고 new 키워드 뒤에 자료형이나 클래스의 이름을 붙여주면 되겠습니다. 할당받았던 메모리 공간을 해제하기 위해서는 delete 키워드를 사용하면 되는데요. delete 키워드 뒤에 할당받았던 공간을 가리키는.. 더보기
C++ 문제풀이 - 낚시왕 (백준 17143) 이번에 풀어본 문제는 낚사왕이라는 문제인데요. 직사각형 모양의 격자 공간에서 낚시꾼이 상어들을 잡아올리는 상황을 이산 시간 시뮬레이션을 통해 알아보는 내용입니다. 이산 시간이라 한 것은, 불연속적으로 떨어진 시각에서의 상태를 다룬다는 의미입니다. 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 시뮬레이션은 초 단위로 진행되며, 1초당 3개의 이벤트들이 발생하고 이를 구현해야 합니다. 첫번째 단계는 낚시인데요. 격자 공간의 첫번째 행 위에 있는 낚시꾼이 맨 왼쪽에서부터 1초당 오른쪽으로 한칸씩.. 더보기
환경변수의 개념과 C/C++ 에서의 응용 여기서는 환경변수 (environment variable)의 개념과, 이를 C언어 또는 C++ 프로그램에서 사용하는 방법을 알아봅시다. 프로그램 외부에서 환경변수와 그 값들을 정의하고, 이를 프로그램에서 사용할 수 있도록 코드를 구성하면 편리합니다. 환경변수의 개념과 예시 환경변수란, 간단히 말해서 프로그램을 구동하는 프로세스들이 사용할 수 있도록 운영체제 레벨에서 정의된 변수들을 말합니다. 우리가 프로그램을 실행하면, 필요에 따라 여러 환경변수들에 저장된 값들을 가져다가 사용합니다. 좀 더 구체적인 예시를 통해 이를 살펴봅시다. 리눅스나 유닉스에서 가장 친숙한 환경변수 중의 하나는 PATH가 있는데요. 이는 터미널 콘솔에서 프로그램을 실행할 때, 쉘 (shell)이 PATH의 값으로부터 실행파일이 있는.. 더보기
C언어 동적 메모리 할당 (malloc, free 함수) 일반적으로 C언어에서 변수나 배열을 선언하면, 해당 코드블록이 끝나서 범위를 벗어날때 까지 메모리를 차지하게 됩니다. 하지만 이렇게 되면 메모리 공간의 낭비가 발생할 수 있죠. 필요할 때만 메모리에 변수를 저장하기 위한 공간을 할당해서 사용하는 것이 해결책이 될 수 있고, 이를 동적 메모리 할당 (dynamic memory allocation)이라고도 부릅니다. 동적 메모리 할당을 위해서는 먼저 포인터라고 하는 변수가 필요한데요. 메모리 상에서의 주소를 저장하기 위한 변수인 포인터의 개념이 생소하게 느껴지는 분들에게는 다음 포스팅이 큰 도움이 되리라 생각합니다. C언어 프로그래밍 기초 : 포인터 여기서는 C언어와 C++가 다른 프로그래밍 언어와 차별화되는 요소 중 하나인 포인터 (pointer)에 대해서.. 더보기
C언어 문자와 문자열 사용하기 여기서는 C언어 프로그램에서 문자와 문자열을 다루는 방법에 대해 살펴보겠습니다. 컴퓨터는 이진수를 다루는 기계이지만, 인간에게 가장 친숙한 건 알파벳 같은 문자들이죠. 컴퓨터도 결국 사람이 쓰는 도구이기 때문에, 프로그래밍 언어를 막론하고 문자열을 처리하는 법을 알아두면 상당히 좋습니다. 개인적으로 컴퓨터 시뮬레이션을 통해서 자연현상을 이해하는 것을 본업으로 해 왔기에, 문자보다는 숫자에 더 친숙했습니다. 그래서 이번 기회에 제가 유용하다고 생각되는 기능들을 중심으로, C언어에서 문자와 문자열을 다루는 법을 한번 자세히 짚어볼까 합니다. C언어 표준 라이브러리에 있는 함수들 이외에도, 문장으로부터 단어를 추출하거나 텍스트 파일로부터 프로그램을 실행하기 위한 설정 등을 불러오는 함수도 한번 만들어봅시다. .. 더보기
C/C++ 코드가 프로그램이 되는 과정 여기서는 C언어 또는 C++로 작성된 소스 파일, 헤더 파일의 개념과 이들을 빌드하여 하나의 프로그램을 만드는 과정에 대해 간략하게 짚어보겠습니다. 여러 개의 소스, 헤더 파일들로 이루어진 코드를 빌드하는 과정에서, 오브젝트 파일들과 외부 라이브러리가 어떻게 개입하는지도 알아봅시다. C언어나 C++ 소스 코드를 작성하기 위한 기본적인 문법에 대해 다룬 글들이 하단에 링크되어 있습니다. 맨 처음 입문하시는 분들에게 큰 도움이 되리라 생각합니다. 소스 파일과 헤더 파일 먼저 C/C++ 소스 파일 (source file)과 헤더 파일 (header file)의 개념과 역할에 대해 짚어볼텐데요. 이들은 C언어나 C++ 문법에 따라 명령어들을 나열한 텍스트 파일입니다. 이 명령어들을 순차적으로 실행하라고 컴퓨터에.. 더보기