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") » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 5 Beiträge
Airblader

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.
Airblader*

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.
Dragon_Fighter

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.
eulerscheZahl

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) )
Dragon_Fighter Monatslänge/ Schaltjahr (C++-Aufgaben zu "Bedingte Anweisungen")

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