The Nightfly Geschrieben 15. Februar 2005 Geschrieben 15. Februar 2005 Hallo! Ich brauche dringend Hilfe, komme einfach nicht weiter! Wie bekommt man eine Ausgabe eines Kalenderblates hin? Mit Ausgabe der Wochentage?? Hab mal ein bisschen rumprobiert, aber wie gesagt ich hänge. int So =1; int Mo =2; int Di =3; int Mi =4; int Do =5; int Fr =6; int Sa =7; int j=Wt; cout<< "Mo Di Mi Do Fr Sa So"; { for(i=1;) So=1; j++ ; if (j>6) { j=0; } Schon mal im Vorraus Danke für eure Hilfe Mit Lieben Grüßen Nightfly Zitieren
The Nightfly Geschrieben 15. Februar 2005 Autor Geschrieben 15. Februar 2005 int So =1; int Mo =2; int Di =3; int Mi =4; int Do =5; int Fr =6; int Sa =7; int i=Wt; cout<< "Mo Di Mi Do Fr Sa So"; for (i=1;) cout<< "Mo" <<i; i++; Habs jetzt nochmal abgeändert, brauche trotzdem noch Hilfe Zitieren
Hcore Geschrieben 15. Februar 2005 Geschrieben 15. Februar 2005 Hi, erstmal solltest du dir ein paar Gedanken über den Ablauf eines solchen Programms machen (denke ich). Also im Prinzip ein Struktogramm erstellen. Denn z.B. was soll denn dein Programm machen, wenn mal der 1. des Monats kein Montag ist, d.h. du musst als erstes mal festlegen für welchen Monat welchen Jahres du das Kalenderblatt erzeugen willst und damit auch wie viele Tage der Monat überhaupt hat. Dann berechnen welcher Tag der 1. ist. Wenn du das weißt, dann mußt du dir Gedanken machen, wie die Schleife(n) aussehen müssen, um eine solche strukturierte Ausgabe zu erzeugen. Wenn du die "Vorüberlegungen" hast, sollte das eigentliche Programmieren, nicht mehr so schwer sein. Grüße, Hcore Zitieren
The Nightfly Geschrieben 15. Februar 2005 Autor Geschrieben 15. Februar 2005 Ich habe einen Programmablaufplan gemacht. Der Kalender berechnet nach den gregorianischen und rechnet den Januar und Februar eines Monats al 13. und 14. des jeweills letzten Monats. Der Kalender beginnt an dem 1.01.1900 zu zählen, obwohl meine Zeitspanne nur 2005 bis 2007 zählt. Das Problem ist, das ich die Berechnungen für die jeweilligen Wochentage und Tage im Monat schon fertig habe. Jetzt muss ich nur noch die Ausgabe hinbekommen...und das ist für mich echt ein schwieriges Unterfangen... Ich scuh ja nur einen Hinweis, wo ich Anfangen könnte... Naja trotzdem Danke Zitieren
Hcore Geschrieben 15. Februar 2005 Geschrieben 15. Februar 2005 Ich habe einen Programmablaufplan gemacht. Der Kalender berechnet nach den gregorianischen und rechnet den Januar und Februar eines Monats al 13. und 14. des jeweills letzten Monats. Der Kalender beginnt an dem 1.01.1900 zu zählen, obwohl meine Zeitspanne nur 2005 bis 2007 zählt. Gut, du weißt also, dass z.B der 01.02.2005 ein Dienstag ist. Das Problem ist, das ich die Berechnungen für die jeweilligen Wochentage und Tage im Monat schon fertig habe. Jetzt muss ich nur noch die Ausgabe hinbekommen...und das ist für mich echt ein schwieriges Unterfangen... Ich scuh ja nur einen Hinweis, wo ich Anfangen könnte... Naja trotzdem Danke Dann braucht du jetzt eine Schleife zur Ausgabe: Ich schreib mal Pseudocode (ein bisschen Arbeit soll dir ja auch noch bleiben ) int i = 1; cout<< "Mo Di Mi Do Fr Sa So" << endline;; // so viele Leerzeichen erzeugen bis die 1 unter dem passenden Wochentag steht for ( int l=1; l++; l < erster_tag_des_monats) {cout << " "; j++;} while (i <= tage_im_monat) { if (i<10) cout << " " << "i" << " " else cout << i << " "; j++; if ( j==7) {cout << endline; j=0;} Beispiel von oben: erster Tag in diesem Monat ist der Dienstag. erster_tag_des_monats wäre also mit dem Wert 2 zu besetzen. (die Berchnung hast du ja, sagst du) Der Rest ist dann relativ selbsterklärend denke ich. Zitieren
The Nightfly Geschrieben 15. Februar 2005 Autor Geschrieben 15. Februar 2005 1000 Dank! Ich versuchs mal, ich zeig dir aber nochmal meinen kompletten Code: Nicht wundern ist alles noch ziemlich durcheinander!! #include <iostream.h> #include <conio.h> #include <iomanip.h> //Hier die Konstanten: #define MAXJAHR 2007 #define MINJAHR 2005 int main() { int schalttag; int tage_im_jahr; int wochen_im_jahr; int Monat; int Jahreszahl ; int Tag; cout<< "Bitte geben sie eine Jahreszahl an!: "; cin>>Jahreszahl; cout<<"\n"; // ---------------------------------------------------------------------------- // Hier Fehlermeldung wenn die Jahreszahlen nicht zwischen den berechnbaren // Werten 2005 und 2007 liegen //----------------------------------------------------------------------------- do { int hilfsvariable; if (Jahreszahl< MINJAHR) { hilfsvariable=-1; cout<< "Jahreszahl zu klein!\n"; } if (Jahreszahl > MAXJAHR) { hilfsvariable=1; cout<< "Jahreszahl zu gross!\n"; } switch (hilfsvariable) { case -1: cout<< "Sie koennen nur Jahreszahlen ueber " << MINJAHR <<" eingeben!\n"; cout<<"Bitte geben Sie erneut eine Jahreszahl an: "; cin >> Jahreszahl; break; case 1: cout<< "Sie koennen nur Jahreszahlen unter " <<MAXJAHR <<"eingeben!\n"; cout<<"Bitte geben Sie erneut eine Jahreszahl an: "; cin >> Jahreszahl; break; } } while (Jahreszahl>MAXJAHR || Jahreszahl<MINJAHR); //------------------------------------------------------------------------------ // Eingabe des Monats in Zahlen von 1-12, bei Eingabe von 0 und Zahlen über 12 // erscheint eine Fehlermeldung. //------------------------------------------------------------------------------ cout<< "Bitte geben Sie denn gewuenschten Monatszahl an (1-12):"; cin >> Monat; cout<<"\n"; do { int hv; if (Monat<1) { hv=-1; cout<< "Monatszahl zu klein!\n"; } if (Monat>12) { hv=12; cout<< "Monatszahl zu gross!\n"; cout<<"\n"; } switch(hv) { case -1: cout<< "Bitte geben sie eine geltende Monatszahl an!"; cin>> Monat; cout<<"\n"; break; case 12: cout<< "Das Jahr hat nur 12 Monate! Bitte geben Sie erneut ein!"; cin>> Monat; break; } } while (Monat>12 || Monat<0 ); //------------------------------------------------------------------------------ //Berechnung Wochentag // Nach dem gregorianischen Kalender hier gilt 2=Montag 3=Dienstag usw. // Die Woche beginnt daher mit dem Sonntag //------------------------------------------------------------------------------ int Wt,K,J; float Jahr; int m; Jahr= Jahreszahl; K= (int)Jahr %100; J= (int)(Jahr-K)/100; //----------------------------------------------------------------------------- // Januar und Februar werden in gregorianischer Zeitrechnung als 13. u 14 // des vorhergehenden Jahres gesehen. // --------------------------------------------------------------------------- if(Monat<3) { Monat+=12; K-=1; if (K == (-1)) { K=99; J-=1; } } m=Monat; int q=24; //------------------------------------------------------------------------------ // Wt=(q+((int)((m+1)*26)/10)+K+((int)K/4)+((int)J/4)-2*J)%7; // Hier wird mit der aufgespaltenen Gleichung gerechnet //------------------------------------------------------------------------------ int a1,a2,a3,a4,a5; a1=(m+1)*26/10; a2=K/4; a3=J/4; a4=q+a1+K+a2+a3-2*J; a5=a4%7; Wt=a5; cout<< "Wochentag: "<<Wt<<endl; //----------------------------------------------------------------------------- // Berechnung der Anzahl der Tage im Monat // Hier werden zu jedem Monat des Jahres die Tage berechent //----------------------------------------------------------------------------- int tage_im_Monat; switch (Monat) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout<<"Tage im Monat= 31"<<endl; break; case 4: case 6: case 9: case 11: cout<<"Tage im Monat= 30"<<endl; break; case 2: cout<<"Tage im Monat= 28"<<endl; break; } //------------------------------------------------------------------------------ // Form des Kalenders //------------------------------------------------------------------------------ int So =1; int Mo =2; int Di =3; int Mi =4; int Do =5; int Fr =6; int Sa =7; int i=Wt; cout<< "Mo Di Mi Do Fr Sa So"; for (i=0; i>53;) cout<<i; i++; for (m=1; m<13;) cout<<m; m++; if (i>6) { i=0; } getch (); return 0; } Ich will ja gar nicht, dass man mir die ganze Arbeit abnimmt, nur so lerne ich's. Aber ich habe halt mal einen Leitfaden gebraucht Danke nochmal Zitieren
Hcore Geschrieben 15. Februar 2005 Geschrieben 15. Februar 2005 also, ich hab das jetzt, so wie ich die Ausgabe vorgeschlagen hab, mal umgesetzt. Nebenbei, deine Berechnung des Wochentags war auch irgendwo buggy, glaub ich. Habs auf jeden Fall mal ausgebessert und vereinfacht. #include <iostream.h> #include <conio.h> #include <iomanip.h> //Hier die Konstanten: #define MAXJAHR 2007 #define MINJAHR 2005 int main() { int Monat; int Jahreszahl ; cout<< "Bitte geben sie eine Jahreszahl an!: "; cin>>Jahreszahl; cout<<"\n"; // ---------------------------------------------------------------------------- // Hier Fehlermeldung wenn die Jahreszahlen nicht zwischen den berechnbaren // Werten 2005 und 2007 liegen //----------------------------------------------------------------------------- do { if (Jahreszahl< MINJAHR) { cout<< "Jahreszahl zu klein!\n"; cout<< "Sie koennen nur Jahreszahlen ueber " << MINJAHR <<" eingeben!\n"; cout<<"Bitte geben Sie erneut eine Jahreszahl an: "; cin >> Jahreszahl; } if (Jahreszahl > MAXJAHR) { cout<< "Jahreszahl zu gross!\n"; cout<< "Sie koennen nur Jahreszahlen unter " <<MAXJAHR <<"eingeben!\n"; cout<<"Bitte geben Sie erneut eine Jahreszahl an: "; cin >> Jahreszahl; } } while (Jahreszahl>MAXJAHR || Jahreszahl<MINJAHR); //------------------------------------------------------------------------------ // Eingabe des Monats in Zahlen von 1-12, bei Eingabe von 0 und Zahlen über 12 // erscheint eine Fehlermeldung. //------------------------------------------------------------------------------ cout<< "Bitte geben Sie denn gewuenschten Monatszahl an (1-12):"; cin >> Monat; cout<<"\n"; do { if (Monat<1) { cout<< "Monatszahl zu klein!\n"; cout<< "Bitte geben sie eine geltende Monatszahl an!"; cin>> Monat; cout<<"\n"; } if (Monat>12) { cout<< "Monatszahl zu gross!\n"; cout<<"\n"; cout<< "Das Jahr hat nur 12 Monate! Bitte geben Sie erneut ein!"; cin>> Monat; } } while (Monat>12 || Monat<1 ); //------------------------------------------------------------------------------ //Berechnung Wochentag // Nach dem gregorianischen Kalender hier gilt 0= Sonntag 1=Montag 2=Dienstag usw. // Die Woche beginnt daher mit dem Sonntag //------------------------------------------------------------------------------ int a,y,m,d; a = (14 - Monat)/12; y = Jahreszahl -a; m = Monat + 12*a - 2; d = (1 + y + y/4 - y/100 + y/400 + (31*m)/12)%7; //Sonntag soll in unserem Kalender aber 7 sein if (d==0) d=7; cout<< "Wochentag: "<< d <<endl; //----------------------------------------------------------------------------- // Berechnung der Anzahl der Tage im Monat // Hier werden zu jedem Monat des Jahres die Tage berechent //----------------------------------------------------------------------------- int tage_im_monat; switch (Monat) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout<<"Tage im Monat= 31"<<endl; tage_im_monat = 31; break; case 4: case 6: case 9: case 11: tage_im_monat = 30; break; case 2: tage_im_monat = 28; //falls Schaltjahr 29!!! break; } //------------------------------------------------------------------------------ // Form des Kalenders //------------------------------------------------------------------------------ int i = 1; int j = 0; cout<< "Mo Di Mi Do Fr Sa So" << endl; // so viele Leerzeichen erzeugen bis die 1 unter dem passenden Wochentag steht for ( int l=1; l < d; l++) {cout << " "; j++;} while (i <= tage_im_monat) { if (i<10) cout << " " << i << " "; else cout << i << " "; j++; i++; if ( j==7) {cout << endl; j=0;} } cout << endl; getch (); return 0; } Zitieren
The Nightfly Geschrieben 15. Februar 2005 Autor Geschrieben 15. Februar 2005 Danke! Naja die Berechnung des Wochentages habe ich von den Kalenderformeln des gregorianischen Geistlichen Zeller und ich musste die ja irgendwie Umsetzten. Aber DAnke für's Kopfzerbrechen. Versuche es jetzt umzusetzen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.