OOP 스터디 ¶
- 객체지향적으로 프로그래밍을 하는 방법에 대해서 공부합니다.
- 목표 : 객체지향적으로 프로그래밍
- 시간 : 겨울방학 - 매주 화요일 오후 3시~5시
- 참고할만한 위키 페이지 : More EffectiveC++/Efficiency
- 참고할만한 위키 페이지 : More EffectiveC++/Efficiency
고한종 ¶
- 일단 오늘 짜본건 똥 코드가 나왔습니다.
simple is the best 라고 했는데 너무 어렵게 돌아갔어요.
- 테트리스 만들때 문자를 찍기 위해 gotoxy를 쓰던걸 활용 하고 싶어서 해보다가 망함..
- 좌표를 정해놓고 한글자씩 찍는것으로 바꾸면 좀더 나을지도
- 윤년이 문제야ㅡㅡ..
- 난 삽질을 살려 냈도다.
#include <turboc.h> #include <math.h> #define CELL 3 /*#define gotoxy_c(x,y) gotoxy(wherex()+x,wherey()+y)*/ 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}; bool isLeafYear; struct PT { int x; int y; }; void CalLeafYear(int year); int CalDay(int year,int month, int date); void PrintOutMonth(int year,int month); int main() { int year; scanf("%d",&year); CalLeafYear(year); PrintOutMonth(year,1); } int CalDay(int year,int month,int date=1) { int yCode; int result; yCode=(year%100); yCode+=yCode/4; yCode-=(yCode/7)*7; if (year%4==0) { isLeafYear=true; if(year%100==0) { isLeafYear=false; if(year%400==0) isLeafYear=true; } } if((month==1 || month==2) && isLeafYear==true) month+=12; result=yCode+mCode[month]+date; result-=(result/7)*7; return result%7; } void PrintOutMonth( int year, int month ) { int line=2; int day; int eDay; int week; gotoxy(0*CELL,0); printf("%d - %d",year,month); gotoxy(0*CELL,1); printf("일"); gotoxy(1*CELL,1); printf("월"); gotoxy(2*CELL,1); printf("화"); gotoxy(3*CELL,1); printf("수"); gotoxy(4*CELL,1); printf("목"); gotoxy(5*CELL,1); printf("금"); gotoxy(6*CELL,1); printf("토"); 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); printf("%2d",day); if (week==6) line++; } } void CalLeafYear( int year ) { if (year%4==0) { isLeafYear=true; if(year%100==0) { isLeafYear=false; if(year%400==0) isLeafYear=true; } } }
- 년도를 입력하면 그 해의 1월 달력이 나옵니다. 입력부분만 바꾸면 전부 출력 할 수 잇으요
- 전부 나오게 하면 또 꼬일걸?ㅋㅋ
- 전부 나오게 하면 또 꼬일걸?ㅋㅋ
김태진 ¶
// // main.cpp // Calender // // Created by 김 태진 on 12. 1. 10.. // Copyright (c) 2012년 __MyCompanyName__. All rights reserved. // #include <stdio.h> 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); if(isLeapYr(myYear)==1){ Max=366; }else{ Max=365; } for(i=1;i<myYear;i++){ if(isLeapYr(i-1)==1&&i!=1){ day+=2; }else{ day++; } //day 0 == 일 } day%=7; for(month=1;month<=12;month++){ date=1; if(isThirtyOne(month)==1){ monthEndDate=31; }else{ monthEndDate=30; if(month==2){ monthEndDate=28; if(isLeapYr(myYear)==1){ monthEndDate=29; } } } printf("\n%d월\n",month);//몇월 printf("일\t월\t화\t수\t목\t금\t토\n"); for(i=0;i<day;i++){ printf("\t"); } for(;date<=monthEndDate;date++){ printf("%d\t",date); if(i%7==6){ printf("\n"); } i++; } day=i%7; } return 0; } int isLeapYr(int yr){ int flag=0; if(yr%4==0){ flag=1;//1이면 윤년 if(yr%100==0){ flag=0; if(yr%400==0){ flag=1; } } } return flag; } int isThirtyOne(int mth){ if(mth==1||mth==3||mth==5||mth==7||mth==8||mth==10||mth==12){ return 1; }else{ return 0; } }
이민규 ¶
#include <stdio.h> //#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 <iostream> 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<<endl; cout<<"\t\t\t"<<year<<"년 "<<month<<"월"<<endl<<endl; cout<<"월\t화\t수\t목\t금\t토\t일"<<endl; } void printMonth(int year, int month){ int startDay = accumulatedDays(year, month) % 7; for(int i = 1; i <= startDay; i++){ cout<<"\t"; } for(int i = 1; i <= numberOfDays(year, month); i++){ cout<<i<<"\t"; if((i + startDay) % 7 == 0){ cout<<endl; } } cout<<endl; } int accumulatedDays(int year, int month){ int sum = 0; if(year >= 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)); }