Zwei Arrays ausgeben [Kalender]



  • Hallo zusammen

    Nachdem ich nun mehrere Tage auf google verbracht und die Antwort zu meiner Frage nicht gefunden habe, wende ich mich an euch. Es gibt zwar unzaehlige Tutorials, doch entweder habe ich falsch gesucht, oder es findet sich wirklich nichts.
    Ich habe zwei Arrays, einer ist mit Monaten gefuellt (1-12), der andere mit den Tageszahlen der Monaten (31, 28...). Nun moechte ich, dass jeweils das erste Element aus dem einen Array zusammen mit dem ersten Element des anderen Array ausgegeben wird. Da es sich um ein primitives Kalender handelt, habe ich die Schaltjahre mit der Funktion 'Schaltjahr' aufgefangen.
    Bei meinem jetzigen Code wird jedes Element aus dem ersten Array mit jedem Element aus dem zweiten Array ausgegeben; wie kann ich das anders machen?

    Danke sehr fuer eure Hilfe im Voraus!

    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    bool Schaltjahr(int Jahr){
    //int Jahr;
    	//int Jahr;
    
    	if ((Jahr % 400 == 0))
    		return true;
    	if (Jahr % 4 == 0)
    		return true;
    	else if (Jahr % 100 == 0)
    		return false;
    
    return Jahr;
    }
    
    int main(){
    
    	int Jahr;
    	int TageDesMonats [12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	int MonateImJahr [ 12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    
    	if (MonateImJahr[2] == 2){
    		if (Schaltjahr(Jahr))
    			return 29;
    		else
    			return 28;
    	}
    
    	cout << "Jahr: ";
    	cin >> Jahr;
    	Schaltjahr(Jahr);
    //	cout << Jahr;
    
    	/*for (int Monat = 0; Monat <=12; Monat++){
    		cout << MonateImJahr [Monat] << endl;
    	for (int Tage = 0; Tage <=12; Tage++)
    		cout << TageDesMonats [Tage] << endl;}
    	*/
    
    	//for (int Monat = 0; Monat <=12; Monat++)
    	//	for (int Tage = 0; Tage <=12; Tage++){
    
    		cout << setw(4) << MonateImJahr [0]  << setw(12) <<TageDesMonats [0] << endl;
    
    //	Schaltjahr();
    
    return 0;
    }
    


  • Liegt es nicht an deiner geschachtelten for Schleife? Dann ist es auch kein Wunder, dass jedes Element aus dem ersten Array mit jedem Element aus dem zweiten Array ausgegeben wird. Schreib die Ausgaben in einen Anweisungsblock einer Schleife!

    lg, freakC++



  • Danke sehr fuer die schnelle Antwort; weil ich aber C++ Neuling bin, wuerde ich gerne wissen, was du genau meinst;
    dass meine Schleife nicht korrekt ist, dachte ich mir; ich weiss aber nicht, was ich genau daran aendern muss, damit es funktioniert



  • Siehe Kommentare im Code...

    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    bool Schaltjahr(int Jahr){
    	if ((Jahr % 400 == 0))
    		return true;
    	if (Jahr % 4 == 0)
    		return true;
    	else if (Jahr % 100 == 0)
    		return false;
            // Im Normalfall ist es kein Schaltjahr, also hier false zurückgeben
    	return false;
    }
    
    int main(){
    
    	int Jahr;
    	int TageDesMonats [12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	int MonateImJahr [ 12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    
    	// Dies macht keinen Sinn, denn MonateImJahr[2] wäre März. 
            // Denn Arrays beginnen mit dem Index 0.
            // Desweiteren ist Jahr noch nicht eingelesen worden. Und eine 
            // Rückgabe beendet hier das Programm.
    	//if (MonateImJahr[2] == 2){
    	//	if (Schaltjahr(Jahr))
    	//		return 29;
    	//	else
    	//		return 28;
    	//}
    
    	cout << "Jahr: ";
    	cin >> Jahr;
    
            // Wir müssen hier auch was mit der Rückgabe machen.
    	if (Schaltjahr(Jahr)) TageDesMonates[1] = 29;
    
            // Jetzt gehen wir alle Monate durch. 
            // Nehmen als Index 0 bis 11 (inklusive)
    	for (int Monat = 0; Monat < 12; Monat++){
              // und benutzen diese formatierte Ausgabe
      	  cout << setw(4) << MonateImJahr [Monat]  << setw(12) <<TageDesMonats [Monat] << endl;
            }
    
    // Das brauchen wir nicht:
    //return 0;
    }
    

    EDIT: wobei bei der Schaltjahrkontrolle oben noch ein Fehler ist, das überlass ich aber dir. 😉
    Schau dir das hier an, versuch es zu verstehen, bei Fragen sag Bescheid.



  • Ja klar, dass der Index bei Null beginnt und nicht 1 habe ich in der Eile vergessen;
    danke sehr fuer die Hilfe! Jetzt funktioniert es so wie es sollte!



  • Aber verstehst du es auch?
    Also warum nur eine Schleife, und wieso die Schaltjahrabfrage dort ist usw?



  • Die Schaltjahrabfrage habe ich verstanden;
    die Schleife gilt fuer beide, darum braucht es nur eine und nicht zwei;
    korrekt?



  • Richtig. Du hast ja nur einen Index und eine direkte Zuordnung.



  • Sehr schoen,
    danke noch mal fuer die Muehe und die Erklaerungen 😉


Anmelden zum Antworten