Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Monatslänge/ Schaltjahr (C++-Aufgaben zu "Bedingte Anweisungen") » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Monatslänge/ Schaltjahr (C++-Aufgaben zu "Bedingte Anweisungen")
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Dragon_Fighter
Jungspund


Dabei seit: 10.04.2013
Beiträge: 11

Monatslänge/ Schaltjahr (C++-Aufgaben zu "Bedingte Anweisungen") Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hey!

(1) Schreiben Sie ein Programm monatslaenge, das den Anwender auffordert, eine ganze Zahl zwischen 1 und 12 einzugeben, und das dann angibt, wie viele Tage der entsprechende Monat hat.
Hierbei soll die Zahl 1 für Januar mit 31 Tagen, die Zahl 2 für Februar mit 28 Tagen usw. stehen.
Falls eine Zahl eingelesen wird, die keinem Monat entspricht, soll eine entsprechende Fehlermeldung ausgegeben werden.

(2) Schreiben Sie ein Programm Schaltjahr, das eine Jaheszahl einliest und bestimmt, ob die eingegebene Jahreszahl zu einem Schaltjahr gehört.

Hinweis: Zunächst sind alle durch 4 teilbaren Jahreszahlen Schaltjahre. Ausgenommen sind lediglich die Sekulärkjahre XX00, die nicht durch 400 teilbar sind: So war weder 1800 noch 1900 ein Schaltjahr, aber 2000 schon.

Meine Ideen:
Hier meine Versuche:

Zu (i) mit switch:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
#include <iostream>
using namespace std;

int main() {

int a;

cout << "Bitte geben Sie eine ganze Zahl zwischen 1 und 12 ein (1 und 12 inklusive)." << endl;

cin >> a;

switch(a) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
cout << "Der Monat " << a << " hat 31 Tage." << endl;
break;
case 2:
cout << "Der Monat " << a << " hat 28 Tage." << endl;
break;
case 4: case 6: case 9: case 11:
cout << "Der Monat " << a << " hat 30 Tage." << endl;
break;
default:
cout << "Sie haben keine ganze Zahl zwischen 1 (inklusive) und 12 (inklusive) eingegeben!" << endl;

}

}


Bei mir funktioniert das.

Zu (ii):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#include <iostream>
using namespace std;

int main() {

int jahr;

cout << "Bitte geben Sie eine Jahreszahl ein." << endl;
cin >> jahr;

if( ((jahr % 4 == 0) && (jahr % 100 != 0)) || ((jahr % 100 == 0) && (jahr % 400 == 0)) ) {

  cout << "Das Jahr " << jahr << " war/ ist ein Schaltjahr." << endl;
}

else {
  cout << "Das Jahr " << jahr << " war/ ist kein Schaltjahr." << endl;
}

}


Auch das ist m.E. so in Ordnung.


Dennoch hätte ich gerne zu (i) und (ii) Eure Meinung, da ich noch Anfänger bin und mich daher nicht so auf meine Meinung verlassen möchte.


Sehr viele Grüße

Dragon_Fighter

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dragon_Fighter: 11.04.2013 14:30.

11.04.2013 14:29 Dragon_Fighter ist offline Beiträge von Dragon_Fighter suchen Nehmen Sie Dragon_Fighter in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das sieht doch beides ganz vernünftig aus!
1. Könnte man auch mit einem array machen (falls ihr die schon behaldelt habt)

2.:
code:
1:
((jahr % 100 == 0) && (jahr % 400 == 0))

das ist redundant: wenn ein Jahr Vielfaches von 400 ist, so ist es auch Vielfaches von 100, das jahr%100 kannst du dir also sparen.
code:
1:
if( ((jahr % 4 == 0) && (jahr % 100 != 0)) || (jahr % 400 == 0) )


__________________
Syntax Highlighting fürs Board (Link)
11.04.2013 16:09 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dragon_Fighter
Jungspund


Dabei seit: 10.04.2013
Beiträge: 11

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo!

Danke,

das mit dem Array muss ich noch nach hinten schieben, das hatten wir noch nicht behandelt.

Und zu der zweiten Anmerkung von Dir: Da habe ich wohl Tomaten vor den Augen gehabt.

Aber vielleicht lasse ich die auch stehen, weil es (für mich) dann inhaltlich klarer ist.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dragon_Fighter: 11.04.2013 16:13.

11.04.2013 16:12 Dragon_Fighter ist offline Beiträge von Dragon_Fighter suchen Nehmen Sie Dragon_Fighter in Ihre Freundesliste auf
Airblader*
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich würde beim switch/case nicht alles ausgeben, sondern nur die Anzahl der Tage in eine Variable schreiben und diese dann zur Ausgabe nutzen. Das macht den Code lesbarer, flexibler und reduziert Code-Duplikation.
11.04.2013 17:57
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So, jetzt wo ich daheim bin, kann ich auch besser sagen, was ich meinte:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
cin >> monat;

int tage;
switch( monat ) {
    case 2:
        tage = 28;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        tage = 30;
        break;
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        tage = 31;
        break;
    default:
        cout << "Ungültige Eingabe" << endl;
        return 0;
}

cout << "Der Monat " << monat << " hat " << tage << " Tage." << endl;


Allerdings ist ein switch/case hier sowieso schon eher unpraktisch, aber sicherlich die beste Variante, wenn man noch keine besseren Methoden kennt.

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
11.04.2013 19:42 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Monatslänge/ Schaltjahr (C++-Aufgaben zu "Bedingte Anweisungen")