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 4matrix[zeile][spalte] = zahl++;
} ;
return 1;
}