Hallo zusammen,
ich benötige die Hilfe von einigen Useren die sich mit Symbolrätseln auskennen.
Da unser Lehrer erkrankt ist, hat er uns eine Aufgabe geben, die sehr stark die Zeugnisnote beinflussen wird.
Wir sollen ein Symbolrätsel löser/ersteller schreiben... aber ich hab erlich gesagt kaum Ahnung davon
Soweit bin ich gekommen:
[JAVA=42]
public class Alphametik3 {
private char [][][] matrix;
private char[] ops;
private static final int anf = (int) 'A';
private int[] loesungsVektor = new int[10];
private int[][] loesung = new int[3][3];
private boolean[][] moeglich = new boolean[10][10];
private static final int N=10;
private boolean geloest;
public Alphametik3(char[][][] m, char[] o){
matrix = m;
ops = o;
geloest = false;
aufbauTabellen();
versuche(0);
}
public int[][] getLoesung() {
return loesung;
}
public boolean getGeloest() {
return geloest;
}
private void aufbauTabellen() {
for (int i=0; i<10; i++)
for (int j=0; j<10; j++)
moeglich[j] = true;
for (int i=0; i<3; i++)
for (int j=0; j<3; j++) {
int k =0;
while (matrix[j][k]==' ')
k++;
moeglich[(int)matrix[j][k]-anf][0]=false;
}
}
private boolean frei(int grenze, int wert) {
for (int i=0; i<grenze; i++) {
if (wert==loesungsVektor) {
return false;
}
}
return true;
}
private int bildeZahl(int i, int j) {
int hilf = loesungsVektor[(int)(matrix[j][3])-anf];
int basis=10;
int k = 2;
while (k>=0 && matrix[j][k]!=' ') {
hilf += loesungsVektor[(int)(matrix[j][k])-anf] * basis;
basis*=10;
k--;
}
return hilf;
}
private boolean gleichungRichtig(int k) {
if (k<3) {
switch (ops[k]) {
case '+': return bildeZahl(k,0)+bildeZahl(k,1) == bildeZahl(k,2);
case '-': return bildeZahl(k,0)-bildeZahl(k,1) == bildeZahl(k,2);
case '*': return bildeZahl(k,0)*bildeZahl(k,1) == bildeZahl(k,2);
case '/': return bildeZahl(k,0)/bildeZahl(k,1) == bildeZahl(k,2);
default:
}
} else {
switch (ops[k]) {
case '+': return bildeZahl(0,k-3)+bildeZahl(1,k-3) == bildeZahl(2,k-3);
case '-': return bildeZahl(0,k-3)-bildeZahl(1,k-3) == bildeZahl(2,k-3);
case '*': return bildeZahl(0,k-3)*bildeZahl(1,k-3) == bildeZahl(2,k-3);
case '/': return bildeZahl(0,k-3)/bildeZahl(1,k-3) == bildeZahl(2,k-3);
default:
}
}
return false;
}
private void testen() {
if (gleichungRichtig(0) && gleichungRichtig(1) && gleichungRichtig(2) &&
gleichungRichtig(3) && gleichungRichtig(4) && gleichungRichtig(5)) {
bildeLoesung();
}
}
private void bildeLoesung() {
geloest = true;
for (int i=0; i<3; i++)
for (int j=0; j<3; j++) {
loesung[j] = bildeZahl(i,j);
}
}
}
[/code]
ich bin mir nicht sicher, ob diese...
public int[][] getLoesung() {
return loesung;
}
public boolean getGeloest() {
return geloest;
}
so schon fertig sind.
Und sicher bin ich mir ebenfalls nicht, ob es soweit gut aussieht.
Ich hoffe mir kann jemand schnell helfen, Vielen Dank
PS: Nicht dneken ich sei faul, aber im Internet habe ich nix gefunden, womit ich etwas anfagen könnte. Das Programm soll Backtracking enthalten, glaube ich

ich benötige die Hilfe von einigen Useren die sich mit Symbolrätseln auskennen.
Da unser Lehrer erkrankt ist, hat er uns eine Aufgabe geben, die sehr stark die Zeugnisnote beinflussen wird.
Wir sollen ein Symbolrätsel löser/ersteller schreiben... aber ich hab erlich gesagt kaum Ahnung davon
Soweit bin ich gekommen:
[JAVA=42]
public class Alphametik3 {
private char [][][] matrix;
private char[] ops;
private static final int anf = (int) 'A';
private int[] loesungsVektor = new int[10];
private int[][] loesung = new int[3][3];
private boolean[][] moeglich = new boolean[10][10];
private static final int N=10;
private boolean geloest;
public Alphametik3(char[][][] m, char[] o){
matrix = m;
ops = o;
geloest = false;
aufbauTabellen();
versuche(0);
}
public int[][] getLoesung() {
return loesung;
}
public boolean getGeloest() {
return geloest;
}
private void aufbauTabellen() {
for (int i=0; i<10; i++)
for (int j=0; j<10; j++)
moeglich[j] = true;
for (int i=0; i<3; i++)
for (int j=0; j<3; j++) {
int k =0;
while (matrix[j][k]==' ')
k++;
moeglich[(int)matrix[j][k]-anf][0]=false;
}
}
private boolean frei(int grenze, int wert) {
for (int i=0; i<grenze; i++) {
if (wert==loesungsVektor) {
return false;
}
}
return true;
}
private int bildeZahl(int i, int j) {
int hilf = loesungsVektor[(int)(matrix[j][3])-anf];
int basis=10;
int k = 2;
while (k>=0 && matrix[j][k]!=' ') {
hilf += loesungsVektor[(int)(matrix[j][k])-anf] * basis;
basis*=10;
k--;
}
return hilf;
}
private boolean gleichungRichtig(int k) {
if (k<3) {
switch (ops[k]) {
case '+': return bildeZahl(k,0)+bildeZahl(k,1) == bildeZahl(k,2);
case '-': return bildeZahl(k,0)-bildeZahl(k,1) == bildeZahl(k,2);
case '*': return bildeZahl(k,0)*bildeZahl(k,1) == bildeZahl(k,2);
case '/': return bildeZahl(k,0)/bildeZahl(k,1) == bildeZahl(k,2);
default:
}
} else {
switch (ops[k]) {
case '+': return bildeZahl(0,k-3)+bildeZahl(1,k-3) == bildeZahl(2,k-3);
case '-': return bildeZahl(0,k-3)-bildeZahl(1,k-3) == bildeZahl(2,k-3);
case '*': return bildeZahl(0,k-3)*bildeZahl(1,k-3) == bildeZahl(2,k-3);
case '/': return bildeZahl(0,k-3)/bildeZahl(1,k-3) == bildeZahl(2,k-3);
default:
}
}
return false;
}
private void testen() {
if (gleichungRichtig(0) && gleichungRichtig(1) && gleichungRichtig(2) &&
gleichungRichtig(3) && gleichungRichtig(4) && gleichungRichtig(5)) {
bildeLoesung();
}
}
private void bildeLoesung() {
geloest = true;
for (int i=0; i<3; i++)
for (int j=0; j<3; j++) {
loesung[j] = bildeZahl(i,j);
}
}
}
[/code]
ich bin mir nicht sicher, ob diese...
public int[][] getLoesung() {
return loesung;
}
public boolean getGeloest() {
return geloest;
}
so schon fertig sind.
Und sicher bin ich mir ebenfalls nicht, ob es soweit gut aussieht.
Ich hoffe mir kann jemand schnell helfen, Vielen Dank
PS: Nicht dneken ich sei faul, aber im Internet habe ich nix gefunden, womit ich etwas anfagen könnte. Das Programm soll Backtracking enthalten, glaube ich
Zuletzt bearbeitet von einem Moderator: