locked
Well Just i need it. this's nothing RRS feed

  • General discussion

  • // 파일에서의 입출력
    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;

    int main()
    {
    // 파일 읽기 준비
    ifstream in("test.txt");
    string s; 

    if (in.is_open()) {
    in >> s;
    cout << "입력 받은 문자열 :: " << s << endl;
    }
    else {
    cout << "파일을 찾을 수 없습니다!" << endl;
    }
    return 0;
    }


    달력 C

    #include <stdio.h>
    #define leapyear(year) ((year)%4==0 && ( (year)%100!=0 || (year)%400==0 )) //윤년판정매크로
     
    int main(void)
    {
        int year, month; // 연도와 월을 저장할 변수
        int totalday[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; // 각 달의 총일 수 (첫번째 수는 제외)
        int lastyear, day, i;
     
        printf("몇년 몇월의 달력을 출력하시겠습니까?: ");
        scanf("%d %d",&year,&month);
        if(month==2 && leapyear(year)) // 해당년도가 윤년이면, 2월은 총 29일
            totalday[2]=29;
     
        lastyear=year-1; // 작년 말까지 진행된 요일을 계산하기 위해 lastyear를 선언
     
        day = (lastyear+(lastyear/4)-(lastyear/100)+(lastyear/400)+1)%7;
        /*
        lastyear : 1년은 365일, 1년이 지날때마다 요일이 한번 늘어난다 (365를 7로 나누면 1이기 때문)
        +(lastyear/4)-(lastyear/100)+(lastyear/400) : 윤년의 다음연도는 요일이 두번 늘어므로, lastyear까지 있던 모든 윤년을 더한다
        +1 : 1년 1월 1일은 일요일이 아니라 월요일이므로 1을 더한다 (0년은 없다)
        %7 : 요일은 7가지 이므로, 앞의 계산값을 7로 나눈 나머지가 year년 1월의 첫요일 뜻한다
        나머지값에 따라 0:일요일, 1:월요일, 2:화요일, 3:수요일, 4:목요일, 5:금요일, 6:토요일
        */

    달력 cal.CPP
    #include "stdafx.h"  
    #include "CalendarManager.h"  
      
    using namespace std;  
    using namespace Calendar;  
      
    int _tmain(int argc, _TCHAR* argv[])  
    {  
        _Year year;  
        _Month month;  
      
        cout << "연월 입력 : ";  
        cin >> year >> month;  
      
        cout << "\n\t\t" << year << "년 " << month << "월\n" << endl;  
        CalendarList list = CalendarManager::getSingleton().getCalendarData(year, month);  
      
        for(Weekday week = WD_SUNDAY; week <= WD_SATURDAY; week = (Weekday)(week + 1))  
        {  
            cout << CalendarManager::getSingleton().getStringWeekDay(week) << "\t";  
        }  
        cout << endl;  
        for(CalendarList::iterator it = list.begin(); it != list.end(); ++it)  
        {  
            if(it == list.begin())  
            {  
                for(Weekday week = WD_SUNDAY; week != (*it)->first; week = (Weekday)(week + 1))  
                {  
                    cout << "\t";  
                }  
            }  
      
            cout << (unsigned int)(*it)->second << "\t";  
      
            if((*it)->first == WD_SATURDAY)  
            {  
                cout << endl;  
            }  
        }  
      
        cout << endl;  
      
        return 0;  
    }  

    달력매니저.H

    CalendarManager.h

    #include "Singleton.h"  
    #include <utility>  
    #include <list>  
    #include <string>  
      
    namespace Calendar  
    {  
        enum Weekday  
        {  
            WD_SUNDAY,  
            WD_MONDAY,  
            WD_TUESDAY,  
            WD_WEDNESDAY,  
            WD_THURSDAY,  
            WD_FRIDAY,  
            WD_SATURDAY  
        };  
      
        typedef unsigned int                _Year;  
        typedef unsigned short              _Month;  
        typedef unsigned short              _Day;  
        typedef std::pair<Weekday, _Day>  CalendarObject;  
        typedef std::list<CalendarObject*>    CalendarList;  
      
        class CalendarManager : public Singleton<CalendarManager>  
        {  
        public:  
            CalendarManager(void);  
            virtual ~CalendarManager(void);  
      
            CalendarList    getCalendarData(_Year nYear, _Month nMonth);  
            std::string     getStringWeekDay(Weekday Week);  
      
        private:  
            void            _updateCalendarList();  
            bool            _compareEffectiveRange(_Year nYear, _Month nMonth);  
            _Year           _getLeapYear();  
            bool            _IsLeapYear(_Year nYear);  
            void            _createCalendar(_Day nTotalDay);  
            CalendarObject* _createObject(Weekday Week, _Day nDay);  
            void            _releaseMemory();  
      
            _Year           m_nYear;  
            _Month          m_nMonth;  
            CalendarList    m_CalendarList;  
      
            const Weekday   m_StartDay;  
        };  
      
        CalendarManager Singleton<CalendarManager>::m_Singleton;  
    }  

    CalendarManager.cpp

    #include "StdAfx.h"  
    #include "CalendarManager.h"  
      
    using namespace Calendar;  
      
    CalendarManager::CalendarManager(void)  
    :m_nYear(0)  
    ,m_nMonth(0)  
    ,m_StartDay(WD_MONDAY)  
    {  
        m_CalendarList.clear();  
    }  
      
    CalendarManager::~CalendarManager(void)  
    {  
        _releaseMemory();  
    }  
      
    CalendarList CalendarManager::getCalendarData(_Year nYear, _Month nMonth)  
    {  
        if(!_compareEffectiveRange(nYear, nMonth))  
        {  
            m_nYear = 0;  
            m_nMonth = 0;  
            _releaseMemory();  
        }  
        else  
        {  
            m_nYear = nYear;  
            m_nMonth = nMonth;  
            _updateCalendarList();  
        }  
      
        return m_CalendarList;  
    }  
      
    std::string CalendarManager::getStringWeekDay(Weekday Week)  
    {  
        std::string strWeekday[] = { "일", "월", "화", "수", "목", "금", "토" };  
      
        return strWeekday[Week];  
    }  
      
    void CalendarManager::_updateCalendarList()  
    {  
        _Year nLeapYear = _getLeapYear();  
        _Day nTotalDay = (m_nYear * 365) + nLeapYear;  
        _createCalendar(nTotalDay);  
    }  
      
    bool CalendarManager::_compareEffectiveRange(_Year nYear, _Month nMonth)  
    {  
        bool bResult = true;  
      
        if(nYear < 1 || nYear > 9999 || nMonth < 1 || nMonth > 12)  
        {  
            bResult = false;  
        }  
      
        return bResult;  
    }  
      
    _Year CalendarManager::_getLeapYear()  
    {  
        return (int)(m_nYear / 4) + (int)(m_nYear / 400) - (int)(m_nYear / 100);  
    }  
      
    bool CalendarManager::_IsLeapYear(_Year nYear)  
    {  
        bool bResult = false;  
      
        if(m_nYear % 4 == 0 && (m_nYear % 100 != 0 || m_nYear % 400 == 0))  
        {  
            bResult = true;  
        }  
      
        return bResult;  
    }  
      
    void CalendarManager::_createCalendar(_Day nTotalDay)  
    {  
        Weekday nStartWeekDay = (Weekday)((m_StartDay + nTotalDay) % (WD_SATURDAY + 1));  
        _Day nDay;  
        switch(m_nMonth)  
        {  
        case 2:  
            nDay = (_IsLeapYear(m_nYear)) ? 29 : 28;  
            break;  
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:  
            nDay = 31;  
            break;  
        case 4: case 6: case 9: case 11:  
            nDay = 30;  
            break;  
        default:  
            nDay = 0;  
        }  
      
        for(_Day i = 0; i < nDay; ++i)  
        {  
            Weekday WeekDay = (Weekday)((nStartWeekDay + i) % (WD_SATURDAY + 1));  
            m_CalendarList.push_back(_createObject(WeekDay, i + 1));  
        }  
    }  
      
    CalendarObject* CalendarManager::_createObject(Weekday Week, _Day nDay)  
    {  
        CalendarObject* pObject = new CalendarObject(Week, nDay);  
        return pObject;  
    }  
      
    void CalendarManager::_releaseMemory()  
    {  
        CalendarList::iterator it;  
        for(it = m_CalendarList.begin(); it != m_CalendarList.end(); ++it)  
        {  
            delete *it;  
            *it = NULL;  
        }  
        m_CalendarList.clear();  
    }  

    Singleton.h

    #include "stdafx.h"     
    #include <iostream>  
      
    using namespace std;  
      
    namespace Calendar  
    {  
        template <class T> class Singleton  
        {  
        protected:  
            static T m_Singleton;  
      
        public:  
            Singleton()  
            {  
            }  
      
            virtual ~Singleton()  
            {  
            }  
      
            static T& getSingleton()  
            {  
                return m_Singleton;  
            }  
      
            static T* getSingletonPtr()  
            {  
                return &m_Singleton;  
            }  
        };     
      
    }  
     
        for(i=1;i<month;i++) // year년 month월 직전까지의 총 일 수를 구하기 위한 for문
            day+=totalday[i];
     
        day%=7; // year년 month월 1일의 시작 요일
     
        printf("\n           %d년 %d일\n",year,month); // year년 month월 타이틀 출력
        printf("\n  일  월  화  수  목  금  토"); // 요일 리스트 출력
     
        for(i=-day;i<totalday[month];i++)
        {
            if((i+day)%7 == 0) // 출력될 차례가 일요일이면, 개행
                printf("\n");
            if(i<0) // month월 1일이 출력되기 이전의 날짜는 공백으로 채움
                printf("    ");
            else // 날짜 출력
                printf("%4d",i+1);
        }
        printf("\n\n");
     
        return 0;
    }


    계산기

    #include <iostream>
    using namespace std;
     
    class Calculator {
        int a, b;                          // 계산을 위한 피연산자
    public:
        void setValue(int x, int y);        // 값을 받아서 a, b 에 각각 저장
        int add();                // 덧셈
        int sub();                // 뺄셈
        int mul();                // 곱셈
        double div();            // 나눗셈
    };
     
    void Calculator::setValue(int x, int y) {
        a = x;
        b = y;
    }
     
    int Calculator::add() {
        return a + b;
    }
     
    int Calculator::sub() {
        return a - b;
    }
     
    int Calculator::mul() {
        return a * b;
    }
     
    double Calculator::div() {
        return (double)a / (double)b;        // 나눗셈은 결과가 정수가 아닐 수 있으므로 형변환을 시켰다.
    }
     
     
    int main() {
        int x, y; 
        char c;
        Calculator cal;
     
        cout << "두 정수와 연산자를 입력하세요 >> ";
        cin >> x >> c >> y;
        cal.setValue(x, y);
     
        switch (c) {
        case '+':
            cout << cal.add();
            break;
     
        case '-':
            cout << cal.sub();
            break;
            
        case '*':
            cout << cal.mul();
            break;
     
        case '/':
            cout << cal.div();
            break;
     
        default:
            break;
        }
        cout << endl;
    }

    달력

    // 만년달력 프로그램
    #include <iostream.h>
    #include <iomanip.h>
    // 윤년이면 1을, 아니면 0을 리턴
    int is_leapyear(int year)
    {
    // 400으로 나누어 떨어지면 윤년
    // 100으로 나누어 떨어지지 않고 4로 나누어 떨어지면 윤년
    return !(year % 400) || ((year % 100) && !(year % 4));
    }
    // 지정한 월의 날짜수 반환
    int get_monthdays(int year, int month)
    {
    // 각 달의 날짜수를 미리 저장해 둔다
    static int mdays[]
    = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    // 해당월의 날짜수를 가져온다
    int md = mdays[month - 1];
    // 윤년이고 2월이면 하루를 더한다
    if(is_leapyear(year) && month == 2) md++;
    return md;
    }
    // 서기 1년 1월 1일부터 계산하여 총 날짜수를 계산
    int get_totaldays(int year, int month, int day)
    {
    // 작년까지의 총 날짜수를 계산
    int y1 = year - 1;
    int total = 365 * y1;
    // 그동안 윤년의 횟수만큼 날짜를 더함
    total += (y1 / 400 - y1 / 100 + y1 / 4);
    // 해당년, 직전 월까지 월별 날짜수를 다 더한다
    for(int m = 1; m < month; m++)
    total += get_monthdays(year, m);
    // 해당일을 더한다
    total += day;
    return total;
    }
    int get_weekday(int year, int month, int day)
    {
    // 해당일까지의 총 날짜수를 계산하여 7로 나눈

    // 나머지가 요일의 인덱스가 된다
    // 0:일요일, 1:월요일, 2:화요일, ... 6:토요일
    return (get_totaldays(year, month, day)) % 7;
    }
    // 년, 월에 해당하는 달력을 그린다
    // 해당월의 1일이 무슨 요일인가와 그 달의 날짜수만
    // 알면 달력은 그릴 수 있다
    void draw_calendar(int year, int month)
    {
    // 해당월의 날짜수를 계산한다
    int mdays = get_monthdays(year, month);
    // 1일의 요일을 알아내어 시작의 공백일수를 계산
    int day = 1 - get_weekday(year, month, 1);
    cout.setf(ios::right, 0);
    cout << "====================" << endl;
    cout << " " << setw(4) << year << "년 "
    << setw(2) << month << "월" << endl;
    cout << "--------------------" << endl;
    cout << "일 월 화 수 목 금 토" << endl;
    for(int i = 0; day <= mdays; i++, day++) {
    // 아직 1일 되지 않았으면 공백만 출력
    if(day < 1) cout << " ";
    // 일자를 출력
    else cout << setw(2) << day;
    // 한 주일 끝부분을 출력했으면 한 줄 띄운다
    if((i % 7) == 6) cout << endl;
    // 그렇지 않으면 한 칸을 띄운다
    else cout << " ";
    }
    // 한 주일 중간에서 출력이 끝났으면 줄바꿈을 한다
    if(i % 7) cout << endl;
    cout << "====================" << endl;
    }
    void main()
    {
    int year, month;
    cout << "연도와 월을 입력하세요 : ";
    // 연도와 월을 입력 받는다
    cin >> year >> month;
    // 해당월의 달력을 그린다
    draw_calendar(year, month);
    }



    입출력


    #include <iostream>
    #include <fstream>

    using namespace std;

    int main()
    {
      ifstream fi;        // 읽기용 파일 
    ofstream fo; // 쓰기용 파일 

    fo.open("test.txt"); // 쓰기용 파일 열기 
    if (!fo) {   // if(fo.fail())
    cerr << "쓰기용 파일 오픈에 실패했습니다.!" << endl;
    exit(1);
    }
    for (int i = 0; i < 10; i++)  // 0~9 숫자를 한 줄에 하나씩 저장 
    fo << i << endl;

    fo.close(); // 쓰기용 파일 닫기

    fi.open("test.txt"); // 읽기용 파일 열기
    if (!fi) { // if(fi.fail())
    cerr << "읽기용 파일 오픈에 실패했습니다.!" << endl;
    exit(1);
    }

    int line = 1; // 줄 번호 출력용 
    char c;
    cout << line << ": "; // 줄 번호 출력 
    do {
    fi.get(c); // c = fi.get();  한 문자씩 읽기
    cout << c;
    if (c == '\n') { // 다음 줄이면, 줄번호 번호 증가하고 출력
    line++;
    cout << line << ": ";
    }
    } while (!fi.eof()); // 파일 끝일 때까지 반복

    fi.close(); // 읽기용 파일 닫기

    return 0;
    }
    Monday, February 20, 2017 5:26 PM