의학.건강/SW 개발자용

챗GPT가 알려준 달력 소스코드

산바람과함께 2023. 1. 15. 13:01

해당되는 날짜의 달력을 화면에 디스플레이 하는 소스코드를 물어 보았는데...

아래와 같이 답을 주었다. (참고로 언어는  비주얼폭스프로 MS-VFP)

 

1. AI-코드: 챗GPT가 알려준 달력 소스코드

 

dim dtDate as Date
dim i as Integer
dim nYear as Integer
dim nMonth as Integer
dim nDay as Integer
dim nLastDay as Integer
dim nStart as Integer

dtDate = inputbox("Enter a date (mm/dd/yyyy)")
nYear = year(dtDate)
nMonth = month(dtDate)
nDay = day(dtDate)
nLastDay = day(dateadd("d",-1,dateadd("m",1,dtDate)))
nStart = weekday(dateSerial(nYear,nMonth,1))

? "Sun Mon Tue Wed Thu Fri Sat"
? "---------------------------"
for i = 1 to nStart - 1
    ? "    ";
next

for i = 1 to nLastDay
    if i = nDay
        ? i;
    else
        ? i;
    endif
    if (i + nStart - 1) mod 7 = 0
        ? ""
    endif
next

 

위의 코드로는 실행이 되지 않는다. 그래서 수정이 필요하다.

(이유) VFP에는 inputbox(), dateadd(), weekday(), dateSerial() 함수가 존재하지 않는다. 사용자 정의 함수일 수도 있다

 

 

2. 필자 수정 - 상기의 코드를 아래와 같이 수정 변경하면

(수정한 코드=빨간색,  AI가 준 코드=초록색)

(참고) 해당되는 날짜는 date() = 오늘날짜

 

clear  && 화면을 지운다.

set date ansi  && yy-mm-dd 순서

set century on  && yyyy-mm-dd 형식

 

* 변수선언 ... 여기에서는 생략해되 된다.

local dtDate  &&as Date
local i   &&as Integer
local nYear  &&as Integer
local nMonth  &&as Integer
local nDay  &&as Integer
local nLastDay   &&as Integer
local nStart   &&as Integer

 

 * 현재 날자 date() = 2023.1.15일 기준으로 하면...
dtDate = date()  &&inputbox("Enter a date (mm/dd/yyyy)") -

 

nYear = year(dtDate)
nMonth = month(dtDate)
nDay = day(dtDate)
nLastDay = gomonth(dtDate,1) - gomonth(dtDate,0&& day(dateadd("d",-1,dateadd("m",1,dtDate)))

    * 해당되는 달의 총 일수: 1월은 31일, 4월은 30일...
nStart = dow( ctod(left(dtoc(dtDate),7)+'.01') )  && weekday(dateSerial(nYear,nMonth,1))

    * 해당되는 달의 1일이 시작되는 주간 위치: dow()함수는 일요일=1, 화요일=2,,, 토요일=7


? "Sun Mon Tue Wed Thu Fri Sat"
? "---------------------------"
?
for i = 1 to nStart - 1
    ?? space(5)
next

for i = 1 to nLastDay

 

    if i = nDay
        ?? str(i,5)
    else
        ?? str(i,5)
    endif

    if mod(i + nStart - 1, 7) = 0
        ? ""
    endif
    
next

 

 

 

3. 실행 - 프로그램 실행 결과는 

 

4. 챗GPT 사용 경험과 나의 생각

 

위의 예 처럼 프로그램을 그대로 실행하면 제대로 된 결과를 얻을 수는 없지만 큰 뼈대는 맞는 것 같다.  프로그램에 대해서 이해하고 있는 프로그래머가 코드를 일부 수정하면 바로 실행할 수 있다.

 

1. 일부 계획하는 코드의 프레임을 참고하고자 할때

2. 이미 작성된 코드를 효율적으로 수정보완하고자 할때는 도움

3. 지원되지 않는 함수/명령어로 코딩해 주는 경우가 있어, 아직은 ...좀? 사용하기가 불편.

4. 변수들(전역변수, 국소변수 등)로 인해 발생하는 에러까지는 잡아내지 못할 것 같다. 프로그램의 전반적인 디버그 능력은 아직 미숙한 단계..

5. compact한 코딩은 아직 프로그래머 수준에 미치지 못하는 것 같다.

 

그러나 소스코드를 잘 이해하고있는 프로그래머에게는 도움이 될 것 같다. 물론 개발 언어마다 코딩하는 능력에는 차이가 있을 수 있을 것 같고, 현재 많이 사용되는 언어의 코딩 능력은 VFP 보다는 더 높을 것 같다. VFP는 과거의 언어이고 지금은 많이 사용하지 않기 때문에 많은 학습을 하기 어려울 것 같다. GPT-원리가 학습할수록 그 능력이 향상되기 때문이다.

 

챗GPT AI-의 능력은 놀라운 경험이었으며, 향후 GPT-4 까지 가게되면 정말로 기대된다.

 

 

5. (참고) 달력 클래스 라이브러리

     - 필자가 만들어 사용하고 있는 실행함수로

     - 함수 getymd(dDate, cMessage) 형식으로 사용  

     - 특징: 10년,5년,1년,월,일 이동하고, 계절에 맞게 달력의 그림이 바뀐다. 

 

 

 - 프로그램 사용(예) 

 

dBirthDay = iif(empty(dBirthDay),date(),dBirthDay)

dBirthday = getymd(dBirthDay, '날짜를 선택하세요')

if empty(dBirthday) && 날짜선택을 하지 않았을 경우

   return

endif

dYourBirthDay = dBirthday

 

- 달력 프로그램: 런타임 라이브러리가 있는 경우에 위의 형식대로 실행이 가능하다.

getymd_tab.app
0.12MB
getymd.app
0.11MB