Q&A

  • 올해가 계미해 입니다. 그러면 1973년은 무슨 해 입니까???

갑을병정무기경신임계
자축인묘진사오미신유술해

위의 것을 가지고 년도에 따라 무슨 해인지 알수있는 방법좀 가러처
주이쇼  ???

함수로 가르침을 주시면 고맙겠습니다.

그럼 기다립죠 !! ^^
1  COMMENTS
  • Profile
    withcount 2003.03.07 22:55
    십간십이지에 대한 내용인데
    1년부터 60년까지가 반복이 되죠..

    팁이라든가, 질문이나 답변내용이 없는듯해서, 걍 뚝닥거려서 만들어봤는데
    검증은 하셔야 될겁니다...
    배열은 0 부터 시작하는게 정상인데, 60년을 보기 까다로와서
    그냥 1부터 60으로 잡았습니다.

    1년부터 60년까지의 내용을 배열에 담아두고 계산해서 뽑아봤는데
    1984년이 갑자년, 시작하는 년도더군요..
    그 년도를 기점으로 계산하면 될것같네요..

    위에서도 말씀드렸지만, 10분만에 만든거라 에러가 나타날 가능성있으니까
    아래루틴 천천히 뜯어보시고, 고칠점있음 고쳐서 쓰시기 바랍니다.


    function TForm1.FindYear(Year: integer): string;
    var
      i, j,cnt,tcnt : integer;
      tmp : integer;
      ArrayGanEsy : array [1..60] of string;
    const
      cGan: array[1..10] of String = ('갑', '을', '병', '정', '무', '기',
                                      '경', '신', '임', '계');
      cEsy: array[1..12] of String = ('자', '축', '인', '묘', '진', '사',
                                      '오', '미', '신', '유', '술', '해');
      cYear = 1984;
      cGanEsy = 1;
    begin
      cnt := 12;
      tcnt := 1;
      FillChar(ArrayGanEsy, Sizeof(ArrayGanEsy), #0);
      for i := 1 to 6 do
      begin
        for j := 1 to 10 do
        begin
          if cnt = 12 then cnt := 1
          else
            Inc(cnt);
          ArrayGanEsy[tcnt] := cGan[j] + cEsy[cnt];
          Inc(tcnt);
        end;
      end;

      tmp := (Year - cYear) mod 60;

      if tmp < 0 then
        tmp := 60 + tmp;
      Result := ArrayGanEsy[tmp+cGanEsy];
    end;