본문 바로가기

Studying/Computer Programs

GNUPLOT : 다용도 그래프 유틸리티 프로그램 소개 그래프를 그리기 위한 프로그램인 GNUPLOT에 대한 포스팅입니다. gnuplot homepage direct output to file: postscript (including eps), pdf, png, gif, jpeg, LaTeX, metafont, emf, svg, ... www.gnuplot.info 다양한 기능을 가지고 있으면서도 무료로 사용가능한 프로그램이므로, 사용법을 알아두면 유용하게 써먹을 수 있죠. 윈도우 및 리눅스/유닉스용 버전이 모두 있기 때문에, 운영체제에 구애받지 않고 사용할 수 있다는 것 역시 장점입니다. macOS를 사용하는 경우 Homebrew를 통해서도 설치할 수 있는데요. 터미널 콘솔에서 brew info gnuplot 을 입력하면 프로그램 정보를 볼 .. 더보기
C/C++ Runge-Kutta 방법으로 알아보는 진자운동 진자운동의 개요 이번 포스팅에서는 천장에 매달린 진자의 운동에 대한 썰을 수치해석과 함께 한번 풀어볼까 합니다. 중력이 복원력으로 작용하는 왕복운동은 고등학교 물리 교과서에도 등장할 정도로 친숙하죠. 이 진자운동의 개요를 그림으로 표현하자면 다음과 같습니다. 이 때 수직 방향에 대한 진자의 각도 theta 는 시간의 함수가 되고, 이 각도가 따르는 운동방정식은 진자가 매달린 끈의 길이 및 중력 가속도에 의해 결정된다는 특징이 있습니다. 제 기억이 맞다면, 고등학교 물리 및 대학교 일반물리 교과서에는 진동 주기가 진동의 폭과는 무관한 값을 가지는 것으로 나올텐데요. 엄밀히 말하자면 이는 진자의 진동 폭이 매우 작은 상황을 상정한 근사값이라 할 수 있습니다. 일반적인 진동 폭의 경우에 대해서는 해석적인 해를.. 더보기
GSL : C/C++ 수치해석 라이브러리 라이브러리 소개 이번 포스팅에서는 이공계 분야의 수치해석에서 널리 쓰이는 GSL라이브러리에 대해 써 볼까 합니다. GSL은 GNU Scientific Library의 약자로서, 과학 및 공학 분야의 수치해석에 유용한 여러가지 함수들을 가지고 있는 C언어 라이브러리인데요. 어지간한 슈퍼컴퓨터에는 기본적으로 설치되어 있을 정도로 널리 쓰이기 때문에, 기본적인 사용 방법들을 알아두면 상당히 좋습니다. GSL - GNU Scientific Library - GNU Project - Free Software Foundation GSL - GNU Scientific Library The GNU Scientific Library (GSL) is a numerical library for C and C++ progra.. 더보기
C/C++ 에서 함수를 매개변수로 사용하기 함수 포인터를 이용한 구현 일반적으로 C언어나 C++ 에서 사용하는 함수의 경우, 인자(매개변수) 혹은 파라미터로 변수를 받아갑니다. 이 값들을 가지고 정의된 기능을 수행하게 되죠. 하지만 프로그램을 만들다 보면 함수 자체를 다른 함수의 매개변수로 하는 방식이 유용할 때가 있습니다. 함수의 포인터를 다른 함수의 인자로 설정함으로써 이를 구현할 수 있으며, 이 때 함수의 파라미터 및 리턴값을 정확하게 명시해야 합니다. Hello World! 코드를 약간 바꿔서 이를 사용해 봅시다. #include void let_us_say(void (*func_message)()); void greetings(); void goodbye(); int main(int argc, char *argv[]) { // funct.. 더보기
FFTW : C/C++ 고속 푸리에 변환 라이브러리 라이브러리 소개 현재 진행중인 연구에서 사용중인 C언어 푸리에 변환 라이브러리인 FFTW에 대해 간략히 포스팅해볼까 합니다. FFTW는 Fastest Fourier Transform in the West 의 약자인데요. 저 같은 토종 아시안은 이해 못하는 개그에서 파생된 이름이라는 카더라가 있습니다만, 중요한 내용은 아니므로 패스하겠어요. FFTW Home Page --> Introduction FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as wel.. 더보기
sudoku (스도쿠) 퍼즐 푸는 프로그램 (C++) 예전에 포스팅했던 sudoku 퍼즐 푸는 프로그램 (C언어) 아이패드 앱(의 부가기능) 중에 스도쿠(sudoku) 퍼즐이 있길래 좀 해보다가, 이걸 푸는 프로그램을 C언어로 작성하는 잉여짓을 하게 되었습니다. 기본원리는 그냥 게임의 룰을 반영하여, 모든 빈칸 swstar.tistory.com 에 이어서, C++ 로 재구성한 코드입니다. 입출력 파일의 형식은 예전 포스팅과 동일하게 9행 9열의 텍스트 파일입니다. SudokuSolve라는 클래스를 도입하였으며, 이 클래스는 파일로부터 스도쿠 퍼즐 문제를 읽어들이고 퍼즐을 푸는 등의 멤버 함수들을 가지고 있습니다. main 함수에서는 객체를 선언하고 이 멤버 함수들을 실행하기만 하면 되는거죠. 퍼즐의 답을 출력하는 멤버 함수도 있는데요. 출력 파일의 포인터를.. 더보기
C/C++와 Fortran을 조합한 프로그래밍 목차 공통사항 C 메인 프로그램에서 Fortran subroutine 사용하기 Fortran 프로그램에서 C언어 함수 사용하기 수치계산을 위한 프로그램을 짜다 보면, 포트란 함수를 C 혹은 C++ 에서 쓰거나, 그 반대의 경우가 생길 때가 있습니다. 특히 역사가 좀 오래된 모델을 가져다 쓸 때 그렇죠. C언어에서 함수를 특정한 포맷으로 써주면, 오브젝트 파일들을 링크함으로써, 언어의 장벽을 뛰어넘을 수 있습니다. 소스 코드로부터 프로그램을 만드는 과정에서 등장하는 오브젝트 파일의 개념이 낮설게 느껴지거나, 여러개의 소스 파일로부터 프로그램을 만드는 구체적인 과정이 궁금하신 분들은 다음 포스팅을 읽어보시길 권장합니다. C/C++ 코드가 프로그램이 되는 과정 여기서는 C언어 또는 C++로 작성된 소스 파일,.. 더보기
C언어 라이브러리 만들기 자주 쓰는 함수들을 라이브러리 형태로 만들어 두면, 프로그램을 짤 때 편리합니다. 오브젝트 파일로부터 라이브러리를 제작하고, 이를 헤더 파일과 함께 이용하는 방법을 알아볼텐데요. 만약 이러한 개념들이 낮설게 느껴지거나 C/C++ 프로그램을 빌드하는 과정을 더 자세히 알고 싶으시다면, 시작하기에 앞서서 다음 포스팅을 읽어보시면 큰 도움이 되리라 생각합니다. C/C++ 코드가 프로그램이 되는 과정 여기서는 C언어 또는 C++로 작성된 소스 파일, 헤더 파일의 개념과 이들을 빌드하여 하나의 프로그램을 만드는 과정에 대해 간략하게 짚어보겠습니다. 여러 개의 소스, 헤더 파일들로 이루어진 swstar.tistory.com 예를 들어서 함수 Function이 mylib.c 라는 소스코드에 정의되어 있고, 프로토타입.. 더보기
sudoku (스도쿠) 퍼즐 푸는 프로그램 (C언어) 아이패드 앱(의 부가기능) 중에 스도쿠(sudoku) 퍼즐이 있길래 좀 해보다가, 이걸 푸는 프로그램을 C언어로 작성하는 잉여짓을 하게 되었습니다. 기본원리는 그냥 게임의 룰을 반영하여, 모든 빈칸을 채울때까지 반복하는 것이므로 별도의 설명은 필요하지 않을듯 싶고, 다만 문제에 따라서, 숫자를 찍어야(?) 되는 상황이 있는 듯 해서 난수발생함수를 이용하여 이것을 구현하도록 하였습니다. 여기서 만든 건 알고리즘 최적화에 대한 문제가 있을텐데, 전 그런걸 걱정할 수준의 professional programmer가 아니라서 생략하고 순수 노가다를 택했습니다. 스도쿠 퍼즐 문제를 알려주기 위한 입력 파일은 9행 9열을 가진 텍스트 파일의 형태이며, 숫자를 채워 넣어야 하는 빈칸에는 0이 초기값으로 입력되어 있습.. 더보기
Command-line arguments (C/C++ 명령행 인자) C언어 또는 C++ 의 메인 (main)함수를 특별한 방법으로 정의해서, 프로그램을 실행시킬때 커맨드 라인에서 문자열들을 전달해줄 수 있습니다. 그러면 이들이 명령행 인자에 저장되어 프로그램 내에서 사용이 가능하게 되죠. 대표적으로 커맨드라인에 들어가는 인자의 갯수를 세는 정수형 변수와 인자들을 저장하는 문자열들이 있습니다. int main(int argc, char *argv[]) { // .... 프로그램 내용 } 이렇게 해서 컴파일 한 뒤에 실행시킬때, $./[실행파일 이름] [옵션1] [옵션2] ... 이렇게 옵션들을 지정해 주면, 그 갯수와 값들이 argc와 argv라는 변수들 안에 저장됩니다. argc = 옵션의 갯수에 1을 더한 값 (정수) argv[i] = i-번째 옵션의 값 (문자열) /.. 더보기