logo

한국어

지식나눔

한국아마추어천문학회 한국천문연구원 회원가입안내



  • 389
  • 1921389
컴퓨터천문학
2010.10.07 11:30

[컴퓨터 천문학] 01. DEFAULT 함수

댓글 6 조회 수 9408 추천 수 0
?

단축키

이전 문서

다음 문서

+ - Up Down Comment Print Files
?

단축키

이전 문서

다음 문서

+ - Up Down Comment Print Files


이 글은 독일우주운영센터의 과학자인 Oliver Montenbruck와 Thomas Pfleger가 공동 출판한 Astronomy with your Personal Computer를 번역 후, 제 나름의 해석을 더하여 작성된 것임을 알리며, 원저의 베이직 코드를 웹 환경에서 쉽게 실행해 볼 수 있도록 자바스크립트로 변경하여 작성하였음을 밝힙니다.

 

DEFAULT 함수는 간단한 질문에 답을 하는 함수 입니다.

예를 들어서 "오늘 날짜는?" 이라던가 "특정 위치에서의 날짜는?" 등과 같은 질문을 사용자가 입력하면 간단한 대답을 해주게 됩니다.

물론 대답 자체는 미리 등록을 해놔야 합니다. 또한 질문의 길이가 매우 길면 안되기 때문에 이에 대한 적절한 조치도 필요합니다.

 

 

아래의 함수는 "오늘의 날짜는?" 이라는 질문을 통해 날짜를 반환하는 함수입니다.

이 함수는 아직 다른 기능과 연결되지 않았기 때문에 결과를 확인하기 위해 기본값을 설정하고, 입력되는 값을 출력하는 시나리오로 제작을 해보려고합니다.

 

설명에 앞서 이 글은 시나리오 설계 -> 논리 결정 -> 가상의 프로그램 코드(pseudo code) -> 실제 프로그램 코드를 작성하는 순서 로 진행됩니다.

 

먼저 DEFAULT함수가 가지는 시나리오는 다음과 같습니다.

 

1. "오늘의 날짜?"는 이라는 질문을 받으면 사용자가(또는 연관된 모듈이) 값을 입력한다.

2. 값은 일, 월, 년 의 형태로 입력되는데 일 or 일, 월 or ,월 or , 월, 일 등의 형태 모두 사용이 가능하다.

3. 만약 입력되는 값이 없으면 기본설정 값을 출력하게 되는데 일, 월, 년 중에서 입력이 되지 않는 값을 기본설정 값으로 대체해서 출력하게 해준다. 기본설정 값은 다음과 같이 설정하게 되는데 년 = 1986년, 월 = 03, 일 = 12 로 설정했고 사용자가 , 02, 02 를 입력했으면 년에 해당하는 값이 없기 때문에 출력 결과는 1986년 02월 02일로 보여지게 되고 입력값이 2011, 01, 05 라면 출력값은 2011, 01, 05로 보여지게 된다. 만약 입력값이 하나도 없다면 12라는 일에 해당하는 값만 보여지며 ,,,를 입력하면 1986, 03, 12가 보여지게 된다.

 

 

위의 시나리오를 바탕으로 Pseudo Code 에서 사용할  논리 로직은 다음과 같이 설명 됩니다.

 

먼저 사용되는 변수에 대한 설명 입니다.

 

1. 변수 q는 질문을 담고 있고, 필요한 곳에 전달한다.

2. 변수 a는 사용자가 입력한 (나중에는 다른 함수에서 전달된 대답값) 값을 담으며 콤마(,)를 기준으로 분리하게 되면 배열 타입의 값을 가지게 됩니다.

3. 변수 X는 기본값으로 day를 담는데 기본값으로 '12'를 설정한다.

4. 변수 Y는 기본값으로 month를 담는데 기본값으로 '3'을 설정한다.

5. 변수 Z는 기본값으로 year를 담는데 기본갑으로 '1986'을 설정한다.

6. 변수 n은 입력의 타입을 결정하는데 콤마(,)를 기준으로 1인지 2인지, 3인지를 결정한다.

   예를 들어서 a, b, c 의 형태로 값이 입력될 경우 a만 있으면 1, a와 b가 있으면 2 그리고 a, b, c가 모두 있으면 3이 되며

    a, b, c의 형태로 입력되지 않는 모든 것은 n이 0값을 가지게 됩니다.

    따라서 변수 n이 1, 2, 3의 값을 가지게 되면 사용자가 정상적인 값을 입력한 것으로 보면 됩니다.

7. 변수 p 는 입력창을 통해 입력되는 값을 받아 들입니다.

 

 

이제 최종적으로 정의된 변수를 이용해서 논리적인 로직을 만들어 보겠습니다.

1. 만약에 변수 p에 입력된 값이 없으면 변수 n을 0으로 설정하고 값을 1증가 시킨다.

2. 만약에 변수 n1의 값을 가진다면 '질문 + [ 데이 ] '를 출력하고 변수 p에 입력값을 저장한다.

3. 만약에 변수 n2의 값을 가진다면 '질문 + [ 데이, 월 ] '를 출력하고 변수 p에 입력값을 저장한다.

4. 만약에 변수 n3의 값을 가진다면 '질문 + [ 데이, 월, 년 ] '를 출력하고  변수 p에 입력값을 저장한다.

5. 변수 p에 저장된 입력값에 대해 콤마(,)를 기준으로 값을 분리해 낸다.

   예를 들어서 p"1,2,3" 이라는 값을 가지게 되며 콤마 기준으로 분리하면 배열 형태가 되어 p[0] = 1, p[1] = 2, p[2] = 3 이 된다.

6. 변수 n은 입력된 값의 길이를 체크하기 때문에 변수 p의 길이를 체크한다.

7. 체크된 길이가 1이라면 기본값 설정변수 Xp[0]의 값을 할당한다.

8  체크된 길이가 2이라면 기본값 설정변수 Yp[1]의 값을 할당한다.

9. 체크된 길이가 3이라면 기본값 설정변수 X에 p[2]의 값을 할당한다.

10. 일, 월, 년의 값을 최종적으로 출력한다.

 

 

변수에 대한 설정과 논리로직이 완성되었습니다. 

이제 이 결과를 이용하여 실질적인 Pseudo Code를 작성해 보겠습니다.

 

변수 p = "오늘의 날짜는?"

변수 a = 0;

변수 X = 12;

변수 Y = 3;

변수 Z = 1986;

변수 n = 0;

변수 p = 알림창(q);

 

if 변수p 에 입력값이 없으면

    변수 n  0;

    변수 n값 1 증가;

 

if 변수n 이 1 이라면

    변수p = 알림창( 변수 q + " [" + 변수 X + "] );

 

if 변수n 이 2 이라면

    변수p = 알림창( 변수 q + " [" + 변수 X + "]",  [" + 변수 Y + "]" );

 

if 변수n 이 3 이라면

    변수p = 알림창( 변수 q + " [" + 변수 X + "]",  [" + 변수 Y + "]",  [" + 변수 Z + "]" );

 

변수 a = 변수p를 분리하여 저장

변수 n = 변수a의 길이를 저장

 

if 변수 n이 1이라면

    변수 X에 a[0] 저장

 

if 변수 n이 2이라면

    변수 Y에 a[1] 저장

 

if 변수 n이 3이라면

    변수 Z에 a[2] 저장

 

출력( X, Y, Z)

 

다 되었습니다.^^

 

이제 남은 일은 Pseudo Code를 작동이 가능한 실제 프로그램 코드로 완성하는 일만 남았군요.

여기서 저는 JavaScript 라는 언어를 사용할 것인데 이 언어를 사용하는 이유는 특별한 도구의 설치 없이 웹 브라우저를 이용하여 간단하게 결과를 확인해 볼 수 있기 때문입니다.

 

이 코드는 추후 작성되는 천문학 프로그램에서 날짜를 반환하는 함수로 사용될 것입니다.

(첨부된 html 파일을 컴퓨터에 저장한 후클릭하여 제작된 프로그램을 실행해 볼 수 있으며 키보드의 F5키를 이용하여 재실행 할 수 있습니다.)

 

아래는 제작된 최종 코드 입니다. 

<script type="text/javascript" language="javascript">

function DEFAULT () {
 
    var q = "오늘의 날짜는";    //질문지정
     var a;
     var X = 12;
     var Y = 3;
     var Z = 1986;
     var n;
     var  p = prompt(q);
 

    //입력값이 없을 경우
    if( ( p == "undefined" )  ||  ( p == "" ) ) {
        n = 0;
        n += 1;
    }

 

    //입력값의 길이가 1이라면
    if ( n == 1 ) {
        p = prompt( q + " ["+ X +"] " );
    }

    //입력값의 길이가 2라면

    if ( n == 2 ) {
        p = prompt( q + " ["+ X +", "+ Y +"] " );
    }

    //입력값의 길이가 3이라면

    if ( n == 3 ) {
        p = prompt( q + " ["+ X +", "+ Y +", "+ Z +"] " );
    }

    a = p.split(',');    //입력값 분리, 배열로 저장
    n = a.length;     //입력값 가지는 배열의 길이

 

    //길이가 1이라면 X값을 입력값으로 교체
    if( n == 1 ) { 
         X = a[0];
    }

    //길이가 2이라면 X값을 입력값으로 교체

    if(n == 2) {
        Y = a[1];
    }

 

    //길이가 3이라면 X값을 입력값으로 교체

    if( n==3 ) {
        Z = a[2];
 }

 

    //값 출력(결과보기)

    alert( X + ","+ Y + "," + Z );
}


DEFAULT();    // DEFAULT 함수실행
</script>

 

 

 

 아래는 실행결과를 캡처한 이미지 입니다

 

최초 실행시

default_20101007_01.JPG

 

 

"01" 이라는 값을 입력

default_20101007_02.JPG

 

 

"01"만 입력했을 때의 결과

default_20101007_03.JPG

 

 

"01", "", "2010"을 입력했을 때의 결과

 default_20101007_04.JPG

 

 

결과값 출력

default_20101007_05.JPG

 

다음 글은  10월 8일 금요일에 업로드 됩니다.

게시물 이용시 출처 및 저작자 반드시 표시, 게시물을 이용한 영리행위 비허용, 저작자와의 협의 없이 내용에 대해 임의 변경, 수정 비허가

  • ?
    [레벨:3]이민경 2010.10.07 15:17

    흥미는 있어 보이는데... 너무 어려워 보여요*^^*  꼼꼼히 숙지하다보면 이해가 갈까요??? ㅎㅎㅎ

  • ?
    [레벨:12]박종현 2010.10.07 17:22
    그럼요~ 반복해서 보면 익숙해 지실듯.^^
  • ?
    [레벨:12]이혜경 2010.10.07 22:54

    으~ 우리 이거 나머지 공부해야겠다.emoticonemoticon

  • ?
    [레벨:3]이민경 2010.10.08 17:41

    공부해용~~~*^^* 머리를 맞대면 더 수월해 질 듯 해요.

  • ?
    [레벨:12]박종현 2010.10.08 17:49

    스터디 그룹 하나 만들까요? ^^

  • ?
    [레벨:3]이민경 2010.10.10 13:39
    찬성... 두둥~~~~~*^^* ㅎㅎㅎ

Computer Astrology

번호 제목 글쓴이 날짜 조회 수
20 Optical SETI (1) [1]  image [레벨:12]박종현 부지부장 2019.03.16 373
19 [SETI] 10. 성간 전파 프로젝트와 페이퍼 프로젝트 [1]  fileimage [레벨:12]박종현 정보부장 2011.11.10 16721
18 [SETI] 9. SETI Net [1]  fileimage [레벨:12]박종현 정보부장 2011.11.09 11555
17 [SETI] 8. Allen Telescope Array [1]  fileimage [레벨:12]박종현 정보부장 2011.11.08 11943
16 [SETI] 7. SETI@home [2]  image [레벨:12]박종현 정보부장 2011.11.07 12157
15 [SETI] 6. The SETI League and Project Argus [1]  image [레벨:12]박종현 정보부장 2011.11.01 12006
14 [SETI] 5. MOP and Project Phoenix [2] [1]  fileimage [레벨:4]정보부차장(유환용) 2011.07.13 10488
13 [SETI] 4. Sentinel, META, and BETA  image [레벨:12]박종현 2011.06.16 9972
12 [SETI] 3. Early work [1]  image [레벨:12]박종현 2011.06.15 9025
11 [SETI] 2. Radio experiments [1]  image [레벨:12]박종현 2011.06.15 8917
10 [SETI] 1. SETI [1]   [레벨:12]박종현 2011.06.15 11510
9 [컴퓨터 천문학] 05. julian day를 CALDAY로(1) [1]   [레벨:12]박종현 2011.04.25 10295
8 [컴퓨터 천문학] 04. 1900년 1월 0.5 이후 달력날짜를 율리우스 ... [1]  file [레벨:12]박종현 2010.11.04 9265
7 [컴퓨터 천문학] 04. 1900년 1월 0.5 이후 달력날짜를 율리우스 ...  image [레벨:12]박종현 2010.11.04 13289
6 [컴퓨터 천문학] 03.MINSEC 함수(3) [1]  fileimage [레벨:12]박종현 2010.10.19 9045
5 [컴퓨터 천문학] 03.MINSEC 함수(2) [1]   [레벨:12]박종현 2010.10.13 8660
4 [컴퓨터 천문학] 03.MINSEC 함수(1)   [레벨:12]박종현 2010.10.13 8964
3 [컴퓨터 천문학] 02. YESNO 함수 작성 [1]  fileimage [레벨:12]박종현 2010.10.07 8623
» [컴퓨터 천문학] 01. DEFAULT 함수 [6]  fileimage [레벨:12]박종현 2010.10.07 9408
1 컴퓨터 천문학 [2] [1]   [레벨:12]박종현 2010.10.05 34796
Board Pagination ‹ Prev 1 Next ›
/ 1
Designed by hikaru100

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

SketchBook5,스케치북5

SketchBook5,스케치북5

SketchBook5,스케치북5

SketchBook5,스케치북5