/****************************/ /* 特定月のカレンダー表示 */ /* coded by Y.Suganuma */ /****************************/ #include <iostream> using namespace std; /* クラスDateの定義 */ class Date { int year; // 年 int month; // 月 int day; // 日 int tu; // 西暦1年1月1日からの通算日 public: // コンストラクタ Date() {} // コンストラクタ(年月日入力) Date(int n, int m, int l) { int i1; year = n; month = m; day = l; tu = day; for (i1 = 1; i1 < year; i1++) { if ((i1%4 == 0 && i1%100 != 0) || i1%400 == 0) tu += 366; else tu += 365; } for (i1 = 1; i1 < month; i1++) { if (i1 == 2) { if ((year%4 == 0 && year%100 != 0) || year%400 == 0) tu += 29; else tu += 28; } else { if (i1 == 4 || i1 == 6 || i1 == 9 || i1 == 11) tu += 30; else tu += 31; } } } // コンストラクタ(通算日入力) Date(int n) { int k = 0, sw = 0; tu = 0; year = 1; month = 1; while (sw == 0) { if ((year%4 == 0 && year%100 != 0) || year%400 == 0) k += 366; else k += 365; if (k < n) { tu = k; year++; } else sw = 1; } while (sw > 0) { if (month == 2) { if ((year%4 == 0 && year%100 != 0) || year%400 == 0) k = 29; else k = 28; } else { if (month == 4 || month == 6 || month == 9 || month == 11) k = 30; else k = 31; } if (tu+k < n) { tu += k; month++; } else { sw = 0; day = n - tu; tu += day; } } } // -のオーバーロード int operator - (const Date &b) { return tu - b.tu; } }; /* main */ int main() { int year, month, day = 1, m = 1, n, k, i1; // 西暦元年1月1日からの通算日 cout << "年,月は? "; cin >> year >> month; Date a(year, month, day); Date b(1, 1, 1); n = a - b; // 1日の曜日の決定 n = n % 7 + 1; if (n == 7) n = 0; // 出力 cout.width(4); cout << " " << year << "年"; cout.width(2); cout << month << "月\n"; cout << " 日 月 火 水 木 金 土\n"; if (month == 2) { if ((year%4 == 0 && year%100 != 0) || year%400 == 0) k = 29; else k = 28; } else { if (month == 4 || month == 6 || month == 9 || month == 11) k = 30; else k = 31; } for (i1 = 0; i1 < 7; i1++) { if (i1 >= n) { cout.width(3); cout << m; m++; } else cout << " "; } cout << endl; while (m <= k) { for (i1 = 0; i1 < 7 && m <= k; i1++) { cout.width(3); cout << m; m++; } cout << endl; } return 0; }
/****************************/ /* 任意の数のファイルの連結 */ /* coded by Y.Suganuma */ /****************************/ #include <iostream> #include <fstream> using namespace std; #define MAX_LINE 300 int main(int argc, char *argv[]) { int i1; char line[MAX_LINE]; for (i1 = 1; i1 < argc; i1++) { ifstream in(argv[i1]); while (!in.eof()) { in.getline(line, MAX_LINE); cout << line << endl; } in.close(); } return 0; }
菅沼ホーム | 演習解答例目次 | 本文目次 | 付録 | 索引 |