해당되는 날짜의 달력을 화면에 디스플레이 하는 소스코드를 물어 보았는데...
아래와 같이 답을 주었다. (참고로 언어는 비주얼폭스프로 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
- 달력 프로그램: 런타임 라이브러리가 있는 경우에 위의 형식대로 실행이 가능하다.
'의학.건강 > SW 개발자용' 카테고리의 다른 글
나의 노트 관리 프로그램(SW) (0) | 2023.06.25 |
---|---|
(n)년 누적 생존율 계산 (0) | 2023.01.18 |
문항척도 SW - 구축된 자료의 통계 분석 (기술적 통계) (0) | 2022.12.19 |
문항척도 SW - 관계형 데이터 연결 (1 to many) (0) | 2022.12.18 |
문항척도 SW - 99개 체크문항 이하 (의학)평가도구 (0) | 2022.12.17 |