Kalendarz miesiąca jako siatka dni

Projekt: wieczny kalendarz - Podstawy C++ (C++)

Mając dzień tygodnia pierwszego dnia miesiąca i liczbę dni, wypisujemy kalendarz jako siatkę. Najpierw nagłówek, potem puste miejsca przed pierwszym dniem, potem kolejne dni - po 7 w wierszu.

#include <iostream>
using namespace std;

bool przestepny(int r) {
  return (r % 4 == 0 && r % 100 != 0) || r % 400 == 0;
}

int dniMiesiaca(int m, int r) {
  int dni[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  if (m == 2 && przestepny(r)) {
    return 29;
  }
  return dni[m - 1];
}

int dzienTygodnia(int d, int m, int r) {
  int suma = 0;
  for (int y = 1; y < r; y++) {
    suma += przestepny(y) ? 366 : 365;
  }
  for (int mc = 1; mc < m; mc++) {
    suma += dniMiesiaca(mc, r);
  }
  suma += d - 1;
  return suma % 7;
}

int main() {
  int m = 6, r = 2026;
  cout << "Pn Wt Sr Cz Pt So Nd" << endl;
  int start = dzienTygodnia(1, m, r);
  int kolumna = start;
  for (int i = 0; i < start; i++) {
    cout << "   ";
  }
  int ile = dniMiesiaca(m, r);
  for (int d = 1; d <= ile; d++) {
    if (d < 10) {
      cout << " " << d << " ";
    } else {
      cout << d << " ";
    }
    kolumna++;
    if (kolumna == 7) {
      cout << endl;
      kolumna = 0;
    }
  }
  cout << endl;
  return 0;
}

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Podstawy C++ · Zaloguj się, aby zapisać postęp na koncie.