[C++] Kalendarz z pierwszym dniem tygodnia wybranym przez użytkownika
Ostatnio zmodyfikowano 2017-11-27 08:43
piggykce Temat założony przez niniejszego użytkownika |
[C++] Kalendarz z pierwszym dniem tygodnia wybranym przez użytkownika » 2017-11-26 15:55:05 Mam taki kod jak poniżej, wszystko pięknie ładnie funkcjonuje, ale potrzebuje wdrożyć jeszcze jedną opcję, mianowicie chcę żeby użytkownik mógł wybrać pierwszy dzień tygodnia a co za tym idzie jak będzie się wyświetlał kalendarz. Opcja musi być możliwa dla każdego dnia tygodnia. Jak zrobić to najzgrabniej? #include "stdafx.h" #include <iostream> #include <iomanip> #include <string>
using namespace std;
bool czyRokPrzestepny( int rok ) { return(( rok % 4 == 0 && rok % 100 != 0 ) ||( rok % 400 == 0 ) ); }
int indeksDnia( int dzien, int miesiac, int rok ) { static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; rok -= miesiac < 3; return( rok + rok / 4 - rok / 100 + rok / 400 + t[ miesiac - 1 ] + dzien ) % 7; }
string nazwaMiesiaca( int numerMiesiaca ) { string miesiac[] = { "Styczen", "Luty", "Marzec", "Kwiecien", "Maj", "Czerwiec", "Lipiec", "Sierpien", "Wrzesien", "Pazdziernik", "Listopad", "Grudzien" }; return( miesiac[ numerMiesiaca ] ); }
int liczbaDniMiesiaca( int numerMiesiaca, int rok ) { if( numerMiesiaca == 0 ) return( 31 ); if( numerMiesiaca == 1 ) { if( czyRokPrzestepny( rok ) ) return( 29 ); else return( 28 ); } if( numerMiesiaca == 2 ) return( 31 ); if( numerMiesiaca == 3 ) return( 30 ); if( numerMiesiaca == 4 ) return( 31 ); if( numerMiesiaca == 5 ) return( 30 ); if( numerMiesiaca == 6 ) return( 31 ); if( numerMiesiaca == 7 ) return( 31 ); if( numerMiesiaca == 8 ) return( 30 ); if( numerMiesiaca == 9 ) return( 31 ); if( numerMiesiaca == 10 ) return( 30 ); if( numerMiesiaca == 11 ) return( 31 ); }
void wyswietlKalendarz( int rok ) { cout << " Kalendarz " << rok; int dni; int obecny = indeksDnia( 1, 1, rok ); for( int i = 0; i < 12; i++ ) { dni = liczbaDniMiesiaca( i, rok ); if( nazwaMiesiaca( i ).length() % 2 == 0 ) { cout << endl << " " << string((( 34 - nazwaMiesiaca( i ).length() ) / 2 ), '-' ) << nazwaMiesiaca( i ) << string((( 33 - nazwaMiesiaca( i ).length() ) / 2 ), '-' ) << endl; } else { cout << endl << " " << string((( 33 - nazwaMiesiaca( i ).length() ) / 2 ), '-' ) << nazwaMiesiaca( i ) << string((( 33 - nazwaMiesiaca( i ).length() ) / 2 ), '-' ) << endl; } cout << " Nie Pon Wto Sro Czw Pia Sob" << endl; int k; for( k = 0; k < obecny; k++ ) cout << " "; for( int j = 1; j <= dni; j++ ) { cout << setw( 5 ) << j; if( ++k > 6 ) { k = 0; cout << endl; } } if( k ) cout << endl; obecny = k; } return; }
int main() { int rok; cin >> rok; while( rok < 1 ) { cout << "Niepoprawny rok, podaj rok z naszej ery: "; cin >> rok; } wyswietlKalendarz( rok ); return 0; }
EDIT: Dla zainteresowanych - dodałem int pierwszyDzienTygodnia, 1 dla pon, 2 dla wt... 6 dla soboty, 0 dla niedzieli. Odjalem jej wartosc od indeksDnia (przed zakonczeniem nawiasu i " % 7" oraz w wyświetlaniu kalendarza dalem warunki i zalezenie od wartosci pierwszyDzienTygodnia cout'uje PON WTO ... albo jakas inną opcję. |
|
darko202 |
» 2017-11-27 07:59:24 |
|
mateczek |
» 2017-11-27 08:43:21 albo lepiej. Daj przeczytać swój post komuś znajomemu (komuś, kto jeszcze nie wie na czym Twój problem polega). W ten sposób się przekonasz czy problem, który tu wstawiłeś jest wystarczająco jasno naświetlony. |
|
« 1 » |