Schachbrett mit Zahlen



  • Hallo :),

    habe ein Schachbrett zu programmieren, das wie folgt aussieht:

    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    5 6 7 8 9

    Ich bin auf einem Technischen Gymnasium und der Lehrer sagte, es sein egal, wie man die Aufgabe löst, also habe ich es einfach mit mehreren cout's gemacht... allerdings nicht sonderlich schön...

    Gibt es eine Möglichkeit diese Aufgabe auch mit Schleifen zu lösen (for oder while)?

    Ich bin mittlerweile mit for-Schleifen so weit, dass die Ausgabe bei mir so aussieht:

    1 2 3 4 5
    5 6 7 8 9
    ...

    aber das ist ja nicht gerade das gewünschte Ergebnis...

    Vielen Dank für eure Hilfe

    MfG

    Poque



  • Ja, natürlich kann man das mit Schleifen lösen. 🙂

    Am naheliegendsten wäre wohl der Einsatz von zwei verschachtelten Schleifen. Überleg dir, was sich von einer x-Position zur nächsten ändert. Dann kannst du diese Aktionen z.B. in der inneren Schleife durchführen. Gleichzeitig schaust du auch, wie sich die y-Koordinaten verändern und inwiefern x von y abhängig ist, und wendest das ebenfalls an.

    Nimm dir vielleicht einen Block und ein Schreibzeug, dann kannst du das in Ruhe durchgehen. 😉



  • Danke für deine schnelle Antwort.
    Ich habs jetzt versucht aber ich komm wirklich nicht dahinter. Ich will eigentlich nur eine lokale Variable in den Schleifen benutzen (müsste ja gehen?) und die kann ich ja nicht innerhalb der Schleifen auf einen bestimmten "Anfangswert" setzen, würde sich ja x-mal wiederholen...

    Man man man 🙂



  • Poque schrieb:

    und die kann ich ja nicht innerhalb der Schleifen auf einen bestimmten "Anfangswert" setzen, würde sich ja x-mal wiederholen...

    Doch, nur ist dieser Anfangswert eben nicht konstant, sondern von der Zählvariable der äusseren Schleife (z.B. y ) abhängig. Verstanden? 😉

    Ansonsten zeig mal, was du bereits hast.

    P.S. Ich denke, es liegt in deinem Sinne, dass ich dir nicht die fertige Lösung poste, sondern dich selbst zum Nachdenken anrege? Sowas kann sicher immer wieder nützlich sein. 🙂



  • Okay 🙂

    Manchmal muss man einfach kurz nachdenken,
    ohne die alten Ansätze im Kopf zu haben...

    Habs jetzt so:

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    void main()
    {
    	int a = 0, b = 0;
    
    	for (int k = 0; k < 5; k++)
    	{
    		a++;
    		b = a;
    		for (int i = 0; i < 5; i++)
    		{
    			cout << b++ << "  ";
    		}
    	cout << endl;
    	}
    }
    

    Ich denke es geht noch einfacher, aber wenigstens hab ichs jetzt mal 🙂
    Werde nun noch anstelle dieser Leerzeichen im cout ein paar
    Befehle aus der <iomanip> einsetzen, ist denke ich schöner.

    Vielen Dank für deine Hinweise und ja, es ist in meinem Sinne,
    dass du nicht einfach die Lösung postest!

    Was ich jetzt noch überlege ist, ob es geht, die Zähler der Schleifen
    an Stelle der beiden lok. Variablen a und b zu verwenden.

    Gruß

    Poque



  • müßte auch mit direktem berechnen gehen, vielleicht so:

    cout << ´k+i+1 << "  ";
    


  • Poque schrieb:

    Was ich jetzt noch überlege ist, ob es geht, die Zähler der Schleifen
    an Stelle der beiden lok. Variablen a und b zu verwenden.

    Ja, zum Beispiel so:

    for (int i = k; i < k+5; i++)
    {
        cout << i << endl;
    }
    

    Denn a ist in deinem Beispiel sowieso immer gleich k+1 ; genauso ist b immer gleich k+i+1 .



  • Poque schrieb:

    ... und der Lehrer sagte, es sein egal, wie man die Aufgabe löst, ...

    find' ich gut - dann ist Raum für Phantasie:

    #include <iostream>
    
    int a( int i )
    {
        return i < 1? 0: i%5? a(i-1) + 1: a(i/5);
    }
    
    int main()
    {
        using namespace std;
        for( int i=0; i<25; ++i%5? cout: cout << endl )
            cout << a(i)+1 << " ";
        return 0;
    }
    

    oder:

    for( int i=0; i<25; ++i%5? cout: cout << endl )
            cout << (i - 4*(i/5))+1 << " ";
    

    siehe auch hier.



  • Poque schrieb:

    ...und der Lehrer sagte, es sein egal, wie man die Aufgabe löst...

    das würde er bereuen, falls du mit sowas ankommen solltest:

    puts ("1 2 3 4 5\n2 3 4 5 6\n3 4 5 6 7\n4 5 6 7 8\n5 6 7 8 9");
    

    🙂



  • for (unsigned i = 0; i < 4; ++i)
    {
        for (unsigned j = 0; j < 4; ++j)
        {
            cout << i + j + 1 << " ";
        }
        cout << endl;
    }
    

Anmelden zum Antworten