= OOP 스터디 = * 객체지향적으로 프로그래밍을 하는 방법에 대해서 공부합니다. * 목표 : 객체지향적으로 프로그래밍 * 시간 : 겨울방학 - 매주 화요일 오후 3시~5시 * 참고할만한 위키 페이지 : [More EffectiveC++/Efficiency] == 1월 10일 == === 고한종 === {{{ #include #include #define CELL 3 struct MD { int M; int D; }; int mCode[15]={0,6,2,2,5,0,3,5,1,4,6,2,4,5,1}; int mEnd[13]={29,31,28,31,30,31,30,31,30,30,31,30,31}; MD evt[366]; bool isLeafYear; void CalLeafYear(int year); int CalDay(int year,int month, int date); int PrintOutMonth(int year,int month,int line); int isEvent(int month, int date); int main() { int year; int i; int nLine=0; int eMonth,eDate; int count=0; printf("Year : "); scanf("%d",&year); CalLeafYear(year); while(1) { for(i=1;i<=12;i++) { nLine=PrintOutMonth(year,i,nLine); nLine++; } printf("\n일정추가 (월/일) :"); scanf("%d %d",&eMonth,&eDate); evt[count].M=eMonth; evt[count].D=eDate; count++; system("cls"); nLine=0; }} int CalDay(int year,int month,int date=1) { int yCode; int result; yCode=(year%100); yCode+=yCode/4; yCode-=(yCode/7)*7; if((month==1 || month==2) && isLeafYear==true) month+=12; result=yCode+mCode[month]+date; result-=(result/7)*7; return result%7; } int PrintOutMonth( int year, int month, int line) { int day; int eDay; int week; static char *han[7]={ "일","월","화","수","목","금","토" }; line++; gotoxy(0*CELL,line); printf("%d - %d",year,month); line++; for (int i = 0; i < 7 ; i++) { gotoxy(i*CELL,line); printf("%s",han[i]); } line++; if(isLeafYear==true&&month==2) eDay=mEnd[0]; else eDay=mEnd[month]; for (day=1;day<=eDay;day++) { week=CalDay(year,month,day); gotoxy(week*CELL,line); if(isEvent(month, day)==0) { if(week==0){ SetColor(RED,BLACK); } if (week==6) { SetColor(BLUE,BLACK); } printf("%2d",day); SetColor(WHITE,BLACK); }else{ SetColor(GREEN,BLACK); printf("ev"); SetColor(WHITE,BLACK); } if (week==6) line++; } return line; } void CalLeafYear( int year ) { isLeafYear =(year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0)); } int isEvent(int month, int date) { int i; int result=0; for(i=0;i<366;i++) { if(evt[i].M==month && evt[i].D==date) { result=true; break; } } return result; } }}} === 김태진 === {{{ // // main.cpp // Calender // // Created by 김 태진 on 12. 1. 10.. // Copyright (c) 2012년 __MyCompanyName__. All rights reserved. // #include int isLeapYr(int yr); int isThirtyOne(int mth); int main() { int month,day=1,myYear,date=1,monthEndDate; int i; int Max; scanf("%d",&myYear); for(i=1;i //#include "CalLib.h" int Calculate_Days(int year){ year--; return (year*365)+(year/4)-(year/100)+(year/400); } void PrintCal(int 년도,int 시작요일, bool 윤년){ int 월시작요일= 시작요일; for(int 달=1; 달<13; 달++){ printf("%d년 %d월\n", 년도, 달); printf("월\t화\t수\t목\t금\t토\t일\n"); for(int i=0; i<월시작요일; i++) printf("\t"); for(int 날짜=1; ; 날짜++){ printf("%d\t", 날짜); if((날짜+월시작요일)%7 ==0) printf("\n"); if((달== 1)||(달==3)||(달==5)||(달==7)||(달==8)||(달==10)||(달==12)){ if(날짜== 31){ printf("\n"); 월시작요일= (월시작요일+날짜)%7; break; } } else if(달== 2){ if(윤년== true){ if(날짜== 29){ printf("\n"); 월시작요일= (월시작요일+날짜)%7; break; } } else if(날짜== 28){ printf("\n"); 월시작요일= (월시작요일+날짜)%7; break; } } else if(날짜== 30){ printf("\n"); 월시작요일= (월시작요일+날짜)%7; break; } } } } void main(){ int 년도; bool 윤년= false; scanf("%d", &년도); int 지난날수= Calculate_Days(년도); int 시작요일=지난날수%7; if((년도%4== 0)&& (년도%100!= 0)) 윤년= true; PrintCal(년도, 시작요일, 윤년); } }}} === 김수경 === {{{ #include using namespace std; void printYear(int year); void printHeader(int year, int month); void printMonth(int year, int month); int accumulatedDays(int year, int month); int numberOfDays(int year, int month); int isLeapYear(int year); int main(){ int year; cin>>year; printYear(year); return 0; } void printYear(int year){ for(int i = 1; i <= 12; i++){ printHeader(year, i); printMonth(year, i); } } void printHeader(int year, int month){ cout<= 1){ sum = (year-1) * 365; for(int i = 1; i < year; i++){ sum += isLeapYear(i); } for(int i = 1; i < month; i++){ sum += numberOfDays(year, i); } } return sum; } int numberOfDays(int year, int month){ switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: return 28 + isLeapYear(year); } } int isLeapYear(int year){ return (year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0)); } }}} === 후기 & thread === * gotoxy galagy 비슷하게 생겻다. * 코드를 살짝 급하게 짠건지 디버깅을 한참 했네요. 하지만 연산량은 적을 것이라 생각합니다. -ㅅ- -[김태진] ---- [OOP], [2012년활동지도]