Hey Ihr, brauche ganz ganz dringend Hilfe.
Mal kurz die Aufgabe:
Dieses Quadrat aus den Zahlen 1 – 9 ist ein „magisches Quadrat“, da die Zeilensummen, die Spaltensummen und die beiden Diagonalsummen gleich sind.
Schreiben Sie zur Klasse ”matrix” eine Methode ”magischesquadrat()”, die bei
ungerader, gleichgroßer Zeilen- und Spaltenzahl n ein magisches Quadrat erzeugt
aus den Zahlen 1 – n².
Schreiben Sie ein geeignetes Hauptprogramm, um die Methode zu testen.
Ausgabe: Das magische Quadrat
Hinweis: Besetze die Mitte der ersten Zeile mit der Zahl 1.
Für alle weiteren i Zahlen gilt:
Gehe eine Zeile nach oben und eine Spalte nach rechts
korrigiere ggfs. die Position
solange die Position schon besetzt ist,
gehe eine Spalte nach links und zwei Zeilen nach unten und korrigiere
ggfs. die Position
besetze nun diese Position mit i
„korrigiere Position“ heißt, dass sowohl Zeilen- als auch Spaltenindex
im Bereich 0 bis n-1 liegen muss; zu einem Index < 0 muss n addiert
werden, von einem Index > n-1 muss n subtrahiert werden.
Verwenden Sie hierzu eine Methode „private void korrektur()“!
Und hier meine bisherige Lösung:
Ich hoffe mir kann da jemand weiterhelfen benötige die lösung wirklich sehr sehr schnell!
Vielen Dank im Voraus!!!
Mal kurz die Aufgabe:
Dieses Quadrat aus den Zahlen 1 – 9 ist ein „magisches Quadrat“, da die Zeilensummen, die Spaltensummen und die beiden Diagonalsummen gleich sind.
Schreiben Sie zur Klasse ”matrix” eine Methode ”magischesquadrat()”, die bei
ungerader, gleichgroßer Zeilen- und Spaltenzahl n ein magisches Quadrat erzeugt
aus den Zahlen 1 – n².
Schreiben Sie ein geeignetes Hauptprogramm, um die Methode zu testen.
Ausgabe: Das magische Quadrat
Hinweis: Besetze die Mitte der ersten Zeile mit der Zahl 1.
Für alle weiteren i Zahlen gilt:
Gehe eine Zeile nach oben und eine Spalte nach rechts
korrigiere ggfs. die Position
solange die Position schon besetzt ist,
gehe eine Spalte nach links und zwei Zeilen nach unten und korrigiere
ggfs. die Position
besetze nun diese Position mit i
„korrigiere Position“ heißt, dass sowohl Zeilen- als auch Spaltenindex
im Bereich 0 bis n-1 liegen muss; zu einem Index < 0 muss n addiert
werden, von einem Index > n-1 muss n subtrahiert werden.
Verwenden Sie hierzu eine Methode „private void korrektur()“!
Und hier meine bisherige Lösung:
Code:
public class matrix {
private double m[][] = new double[10][10];
private int zeile,spalte;
private int q[][];
public matrix(int z,int s) {
zeile=z;
spalte=s;
if (zeile<0 || zeile >10 || spalte<0 || spalte>10)
System.out.println("Bitte geben Sie nur Zahlen zwischen 1 und 10 ein.");
}
public void wert(double w, int z, int s) {
m[z][s] = w;
}
public void reset(double f) {
for (int i=0;i<zeile;i++)
for (int j=0;j<spalte;j++)
m[i][j]=f;
}
public void ausgabe() {
for (int i=0;i<zeile;i++){
System.out.println();
for (int j=0;j<spalte;j++)
System.out.print(q[i][j]+" ");
}
}
[b]wobei dieser teil natürlich der interessanteste ist![/b]
public matrix(int n){
if (n>2 && n%2==1){
zeile=spalte=n;
q = new int[zeile][spalte];
for (int i=0;i<zeile;i++)
for (int j=0;j<spalte;j++)
q[i][j]=-1;
int z1=0;
int s1=n/2;
int z=1;
q[z1][s1]=1;
for (z=2;z<=n*n;z++){
q[z1][s1]=z;
z1--;
s1++;
if (z1<0){
z1+=n;
}
if (z1>=n){
z1-=n;
}
if (s1<0){
s1+=n;
}
if (s1>=n){
s1-=n;
}
}
}
else System.out.println("Bitte geben Sie eine natürliche ungerade Zahl größer gleich 3 ein.");
}
}
Ich hoffe mir kann da jemand weiterhelfen benötige die lösung wirklich sehr sehr schnell!
Vielen Dank im Voraus!!!