Processing math: 100%

2013년 11월 30일 토요일

마이크로소프트 워드 - 졸업 논문 작성

실습 파일들: 시작 파일 완성 파일

내 주위에는 졸업 논문을 준비하시는 분들이 많다.
가끔 보면 (아니, 꽤 자주), 많은 분들이 문서 작업에서 애를 먹으신다.
이 분들이 문서 작업하시는 걸 가만히 지켜 보면, 그 분들의 고생은 주로, 문서 작업 프로그램 (마이크로소프트 워드 라던지, 한글 이라던지..) 이 제공하는 편리한 기능들을 이용하지 않음에서 비롯되는 경우가 많다.
이런 분들을 위해서, 이제 시작하는 시리즈물 (글 묶음) 은 졸업 논문 작성에 있어 마이크로소프트 워드를 어떻게 이용해야 편할 수 있는지를 설명하고자 한다.

먼저, 이 시리즈 전체에서 가정하고 있는 사항들을 설명하겠다:

첫 번째로, 문서 작업 프로그램 (워드 프로세서) 의 선택.
뭐.. 이건 많은 찬/반 의견이 있으리라 생각하지만, 내가 좋아하는 마이크로소프트 워드 (2013 버전) 를 선택하겠다.

두 번째로, 이용할 논문 형식은 서울대학교 공과대학 전기정보공학부의 석/박사 졸업 논문 형식 (한글 형식)으로 정했다.
이건 학부 홈페이지에 로그인 해야 볼 수 있는 자료라 모두 여기에 올리긴 좀 그렇고.. 음.. 중간 중간 필요한 부분들을 발췌해서 소개하는 식으로 글을 진행하겠다.
다른 논문 형식을 기준으로 작업을 하더라도, 그들을 적용하는 방식은 내가 소개하는 방법과 큰 차이가 없으리라 생각한다.

그럼.. 시작하자.

일단, 종이 크기부터 제대로 설정하자.
주어진 논문 형식은:

논문의 규격은 4x6배판(가로 19cm, 세로 26cm)으로 한다.
처음 시작하면 다음과 같은 화면이 보이는데, '페이지 레이아웃' → '크기' → '기타 용지 크기'를 선택하자:

'페이지 설정' 창이 뜨는데, 여기서, '용지 크기''너비''높이'를 규격에 맞게 설정하자.

'확인'을 누르면 '페이지 설정' 창이 닫힌다.
화면 상 별 차이가 없어 보이지만, 종이 크기가 제대로 바뀐 상태이다.

논문 작성에 관한: 이전 글 없음 다음 글

2013년 11월 29일 금요일

gnuplot - 미적분학 테일러 (매클로린) (급수) 전개 답 확인 방법

대학에서 미적분학을 배우다 보면 테일러 급수 (혹은 매클로린 급수) 를 배우게 된다.
관련 숙제도 풀게 될 것이고..
그러다보면, 자신이 전개한 식이 맞는지 궁금한 경우가 많을 것이다.

이 글에선, 자기가 한 테일러 (매클로린) 전개가 맞는 지를 쉽게 확인하는 방법으로써 gnuplot을 이용하는 방법에 대해 설명하겠다.

예시로 이용할 문제는:

x=1 에서, f(x)=3+x2 의 테일러 전개 구하기

이다.

gnuplot은 리눅스 상에서 그래프를 그릴 때 많이 쓰이는 공짜 프로그램이다.
이걸로 테일러 전개의 답을 어떻게 확인하냐면..
그려서 확인할 것이다.

일단, 위 문제를 풀어보면: f(x)=x(3+x2)12 f(x)=x2(3+x2)32+(3+x2)12 f(x)=3x3(3+x2)523x(3+x2)32 그러므로, x=1 에서의 테일러 전개는: 3+x2=2(x+1)21!+3(x+1)2232!+9(x+1)3253!+

위의 풀이를 그리는 법은 간단하다.

일단 gnuplot에 넘길 입력 파일(plot.gp)을 만든다:

set terminal png 
set output "output.png"

plot sqrt(3 + x**2)
위와 같이 plot 뒤에 그리고 싶은 식을 써 넣으면 된다.
(그 위의 두 줄은 결과 그래프를 output.png 파일로 만들기 위한 코드이다.)
이 때의 리눅스 명령은:
gnuplot plot.gp
이고, 그 결과 (output.png) 는:

이제, 풀이 쪽을 그려보자.
입력 파일 (plot.gp) 은:

set terminal png 
set output "output.png"

plot sqrt(3 + x**2), 2 - (x + 1) / 2 + 3 * (x + 1)**2 / 16 + 9 * (x + 1)**3 / 192
명령은 위와 마찬가지로:
gnuplot plot.gp
이번 입력 파일에서는, 그래프를 두 개 그렸다.
(plot 뒤의 두 식을 , (쉼표) 로 구분지음에 주의: 첫 번째 식은 원래 문제에서 주어진 식이고, 두 번째 식은 앞에서 구한 테일러 전개식 (네 번째 항까지) 이다.)
그럼, 결과 (output.png) 는:

위 그래프의 x축, y축 범위를 처음 그래프와 비슷하게 해 보자. 위의 입력 파일 (plot.gp) 에서, 다음과 같이 plot 명령에 범위 옵션 ([-10:10][1:11]) 을 주면 된다:
plot [-10:10][1:11] sqrt(3 + x**2), 2 - (x + 1) / 2 + 3 * (x + 1)**2 / 16 + 9 * (x + 1)**3 / 192
처음 입력 파일처럼 범위를 안 주면, gnuplot이 자동으로 x축과 y축의 범위를 설정한다.
옵션의 뜻은, 10x10, 1y11 에서의 그래프를 그리라는 것이다.
범위 설정 후의 결과는:

보다시피, x=1 주위에서 두 그래프가 거의 똑같음을 알 수 있다.
그러면 이 테일러 전개는 맞게 된 거라 생각하면 된다.

사족으로, 첫 째 항까지, 둘 째항까지, 셋 째 항까지, 그리고 넷 째 항까지의 테일러 전개를 같이 그리면 다음과 같다:
(아, 물론 원래 그래프인 3+x2 도 같이 그렸다.)


멋있지 않은가?
새로운 (고 차의) 테일러 전개 항들이 추가될 때마다, x=1 에서, 각 그래프가 원래의 그래프 (빨간 선) 에 점점 닮아감을 알 수있다.

gnuplot에 관한: 이전 글 다음 글 (Coming soon)

2013년 11월 28일 목요일

C++ 정렬

C++에서 정렬할 일이 생기면 C++ 표준 라이브러리의 sort 함수를 이용하면 편하다.

사용 예는 다음과 같다:

#include <algorithm>
#include <iostream>

int main() {
  using namespace std;

  const int size = 9;
  int a[size] = {5, 8, 1, 2, 9, 3, 7, 4, 6}; 

  sort(a, a + size);

  for (int i = 0; i < size; ++i)
    cout << a[i] << ' ';
  cout << '\n';

  return 0;
}
#include <algorithm>sort(a, a + size);를 잘 보시라.
실행 결과는 다음과 같다:
1 2 3 4 5 6 7 8 9

함수에 넘겨진 인자들의 뜻은:

  • a: 정렬할 배열의 첫 요소를 가리키는 포인터.
  • a + size: 정렬할 배열의 마지막 요소의 다음을 가리키는 포인터.

"마지막 요소"가 아니라 "마지막 요소의 다음"을 가리키는 포인터를 넘기는 걸 의아하게 생각하시는 분이 있으실 것 같다.
이는 일종의 관습으로, 이렇게 하는 편이 더 쉬운 프로그래밍을 가능하게 한다하여, 이와 같이 정한 것이다.
예를 들어, 배열의 길이를 구할 땐, (마지막 요소의 다음을 가리키는 포인터) - (첫 요소를 가리키는 포인터)를 쓰는 것이, (마지막 요소를 가리키는 포인터) - (첫 요소를 가리키는 포인터) + 1보다 간단하다.
(+1이 없으므로.)

C++ 정렬에 관한: 이전 글 없음 다음 글

2013년 11월 27일 수요일

리눅스 정렬 명령 (sort) - 고급 정렬 기준

다음 글들은, 이 글을 쉽게 이해하기위해 도움이 될만한 것들이다:

음.. 일단은, 이 글에서 풀 문제를 명확히 하기 위해서 sort -k1,1 -k2,2 people.txt를 해 보자. (이 명령을 이해하려면 이 글을 보라.)
아, 물론, 입력 파일 (people.txt) 은:

Rammus 420 255 50 335
Lucian 390 230 46 330
Kennen 403 200 47 335
Darius 426 200 50 340
Anivia 350 257 48 325
Ezreal 350 235 47 325
Aatrox 395   0 55 345
Graves 410 255 51 330
Draven 420 240 47 330
그리고, 명령 실행 결과는:
Aatrox 395   0 55 345
Anivia 350 257 48 325
Darius 426 200 50 340
Draven 420 240 47 330
Ezreal 350 235 47 325
Graves 410 255 51 330
Kennen 403 200 47 335
Lucian 390 230 46 330
Rammus 420 255 50 335
이다.

위 결과에서, Aatrox의 두 번째 필드 (395) 가 Anivia의 두 번째 필드 (350) 보다 큰 데도 AatroxAnivia보다 앞에 있는 것을 알 수 있다.
그 이유는, AatroxAnivia보다 영어사전식 순서에서 앞서 있기 때문이다.
(영어사전식 순서에서 AaAn보다 앞서는 것이다.)

그럼, 이런 건 어떨까?
첫 필드 (Rammus, Lucian, Kennen, ...) 는 첫 글자로만 정렬되게 하려면?
그러니까, 이 기준에서는 AatroxAnivia는 영어사전식 정렬에서 비기는 게 되는 것이다.
(왜냐하면 둘 다 첫 글자가 A 니까.)
이 때 필요한 명령어는:

sort -k1,1.1 -k2,2 people.txt
이다.

-k1,1.1을 주목하라.
여기서 .1은, "첫 글자만 보겠다"라는 뜻이다.
명령의 실행 결과는:

Anivia 350 257 48 325
Aatrox 395   0 55 345
Draven 420 240 47 330
Darius 426 200 50 340
Ezreal 350 235 47 325
Graves 410 255 51 330
Kennen 403 200 47 335
Lucian 390 230 46 330
Rammus 420 255 50 335
AniviaAatrox는 첫 번째 필드값 (Anivia, Aatrox) 에서 비겼기 때문에, 두 번째 필드값 (350, 395) 의 순서에 따라 정렬됐음에 주의!

리눅스 정렬 명령에 관한: 이전 글 다음 글

리눅스 정렬 명령 (sort) - 여러 정렬 기준

일단, 리눅스 정렬 명령 (sort) 에 관한 기본적인 (나의) 글들:

위 글들을 읽으면 이 글을 이해하기가 더 쉬워질 것이다.

이 글에선, 여러 정렬 기준에 대해 정렬하는 법에 대해 설명하겠다.
예를 들어, 다음과 같은 입력 파일 (people.txt) 가 있다고 하자:

Rammus 420 255 50 335
Lucian 390 230 46 330
Kennen 403 200 47 335
Darius 426 200 50 340
Anivia 350 257 48 325
Ezreal 350 235 47 325
Aatrox 395   0 55 345
Graves 410 255 51 330
Draven 420 240 47 330
풀고자 하는 문제는:
  • 두 번째 필드의 값 (420, 390, 403, ...) 으로 정렬하고, 만약 그 값이 같다면 세 번째 필드의 값 (255, 230, 200, ...) 으로 정렬.
이 때의 명령은:
sort -k2,2 -k3,3 people.txt
이다.
결과는:
Ezreal 350 235 47 325
Anivia 350 257 48 325
Lucian 390 230 46 330
Aatrox 395   0 55 345
Kennen 403 200 47 335
Graves 410 255 51 330
Draven 420 240 47 330
Rammus 420 255 50 335
Darius 426 200 50 340
EzrealAnivia를 보면, 두 번째 필드의 값 (350, 350) 이 같으니까 세 번째 필드의 값 (235, 257) 으로 정렬된 것을 알 수있다.
DravenRammus도 마찬가지.

그럼, 이전 글에서 소개한 "sort -k2,3 people.txt 와의 차이는 무엇인가?"하는 분이 있을 것이다.
길게 설명하면 골치아프니까, 간단하게 얘기하자면 (정확한 설명은 아니지만):

  • -k2,3는 연속적인 필드를 정렬 기준으로 함.
    • 그러니까, "두 번째 필드와 네 번째 필드로 정렬"같은 건 안 됨.
    • 그 땐, -k2,2 -k4,4로 해야 함.

리눅스 정렬 명령에 관한: 이전 글 다음 글

2013년 11월 26일 화요일

리눅스 정렬 명령 (sort) - 정렬 기준

리눅스 정렬 명령 (sort) 의 기본적인 동작 (첫 단어를 이용한 정렬) 은 이곳을 참고.

이 글에서는 첫 단어 (첫 필드) 가 아닌, 다른 단어 (다른 필드) 를 이용하여 주어진 파일을 정렬하는 법을 설명하겠다. (즉, 정렬 기준을 정하는 방법에 대해 설명하겠다.)
이전과 같이, 입력 파일 (people.txt) 은 다음과 같다:

Rammus 420 255 50 335
Lucian 390 230 46 330
Kennen 403 200 47 335
Darius 426 200 50 340
Anivia 350 257 48 325
Ezreal 350 235 47 325
Aatrox 395   0 55 345
Graves 410 255 51 330
Draven 420 240 47 330
두 번째 필드 (420, 390, 403, 426, 350, ...) 로 정렬하고 싶다면:
sort -k2,2 people.txt
결과는:
Anivia 350 257 48 325
Ezreal 350 235 47 325
Lucian 390 230 46 330
Aatrox 395   0 55 345
Kennen 403 200 47 335
Graves 410 255 51 330
Draven 420 240 47 330
Rammus 420 255 50 335
Darius 426 200 50 340
두 번째 필드를 기준으로 정렬된 것을 볼 수 있다.

위의 명령을 보면, sort-k2,2 플래그를 붙인 것을 알 수 있다.
이 플래그의 뜻은 다음과 같다:

  • k는 "key"를 의미한다. 즉, "정렬 기준으로 삼을 키는 다음과 같다"라는 의미.
  • 2,2는 "두 번째 필드부터 두 번째 필드까지의 값" (즉, 그냥 "두 번째 필드의 값") 을 정렬 기준으로 삼겠다는 뜻.

참고로, -k2,3 를 이용하면, 두 번째 필드부터 세 번째 필드까지를 정렬 기준으로 삼는다.
그 결과는:

Ezreal 350 235 47 325
Anivia 350 257 48 325
Lucian 390 230 46 330
Aatrox 395   0 55 345
Kennen 403 200 47 335
Graves 410 255 51 330
Draven 420 240 47 330
Rammus 420 255 50 335
Darius 426 200 50 340
위에 있는 -k2,2의 결과와 비교했을 때, AniviaEzreal의 위치가 바뀐 것을 알 수 있다.

리눅스 정렬 명령에 관한: 이전 글 다음 글

리눅스 정렬 명령 (sort)

간단한 텍스트 파일을 정렬할 땐, 리눅스의 정렬 명령 (sort) 을 이용하면 좋다.
예를 들어, 정렬할 텍스트 파일 (people.txt) 이 다음과 같이 주어졌다고 하자:

Rammus 420 255 50 335
Lucian 390 230 46 330
Kennen 403 200 47 335
Darius 426 200 50 340
Anivia 350 257 48 325
Ezreal 350 235 47 325
Aatrox 395   0 55 345
Graves 410 255 51 330
Draven 420 240 47 330
다음 명령어를 이용하면:
sort people.txt
결과가 화면에 다음과 같이 나온다:
Aatrox 395   0 55 345
Anivia 350 257 48 325
Darius 426 200 50 340
Draven 420 240 47 330
Ezreal 350 235 47 325
Graves 410 255 51 330
Kennen 403 200 47 335
Lucian 390 230 46 330
Rammus 420 255 50 335
ABC 순서로 정렬된 것을 볼 수 있다.

리눅스 정렬 명령에 관한: 이전 글 없음 다음 글