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));
}










