Anfänger hat ein Problem mit Loubere



  • Wir sollen in einer Übung das magische Quadrat von Loubere programmieren und bei der vierten Regel hakt es bei mir.

    Vierte Regel: Wird das Quadrat an der rechten oberen Ecke verlassen, so ist die Zahl in das Feld unterhalb einzutragen.

    Ich benutze die 3 zum testen und er trägt alle Zahlen bis auf die sieben richtig ein. Selbst die beiden Zahlen 8 und 9 werden korrekt eingetragen.
    In dem Feld in dem die 7 stehen sollte bleibt die am Anfang eingetragene Null stehen. Ich finde den Fehler einfach nicht.

    Es wäre nett wenn mir jemand helfen könnte da ich es nächste Woche abgeben muss.

    #include <iostream.h>
    #include <iomanip.h> //io-Manipulatoren: setw()
    #include <conio.h>
    const int SEITE = 21 ; //Matrix
    unsigned matrix[SEITE][SEITE];

    void main(void) {
    int zahlenGenerator(const int seite); // Funktion zahlenGenerator wird ?

    int seite=0 ,zeile, spalte, ausgabe;

    cout << "Bitte geben Sie die laenge an" << endl << "Maximale laenge = "<<SEITE<<", die Zahl muss positiv und ungerade sein: ";
    cin >> seite;
    cout << endl << endl;
    ausgabe = zahlenGenerator(seite);
    if(ausgabe !=0)
    for(zeile=0; zeile<seite; zeile++)
    for(spalte=0; spalte<seite; spalte++)
    {cout << setw(3) << matrix[zeile][spalte] << " " ;
    if( spalte==(seite-1) ) cout << endl ; }
    getch();
    }

    int zahlenGenerator(const int seite){
    int zeile, spalte;
    unsigned zahl = 2;
    // Überprüfung der Variablen
    if(seite>SEITE || seite<=0 || seite%2==0){cout <<"Du sollst eine positive ungerade Zahl unter "<<SEITE<<" eingeben!"; return 0;}
    // Matrix initialisieren
    for(zeile=0; zeile<seite; zeile++)
    for(spalte=0; spalte<seite; spalte++)
    matrix[zeile][spalte] = 0 ;// 1. Zahl
    zeile = 0 ;
    spalte = seite/2 ;
    matrix[zeile][spalte] = 1;
    while(matrix[seite-1][seite/2] == 0)

    { zeile--;
    spalte++;

    if((zeile<0) & (spalte<seite)) zeile = seite-1;
    if((zeile<seite) & (spalte>=seite)) spalte = 0;
    if(matrix[zeile][spalte]!=0) {zeile+=2;spalte--;}
    if((zeile<0) & (spalte>seite)) {zeile+=2;spalte-- ;} // Regel 4

    matrix[zeile][spalte] = zahl++;

    } ;
    return 1;
    }


Anmelden zum Antworten