in C überprüfen ob sudokumatrix
Verfasst: Sa Mär 19, 2016 1:09 pm
Hi Leute,
ich bin im ersten Semester Informatik und schreibe am Montag eine Klausur in C. Versuche noch ein paar Programme zu schreiben um zu üben. Bei dieser Aufgabe, bekomm ich aber immer die Fehlermeldung Segmantation fault. Ich finde meinen Fehler nicht.
Aufgabe: Programmieren Sie eine Funktion
int sudokucheck(const int** s)
die von einer durch ein zweidimensionales int-Feld der Größe 9x9 testet, ob es sich um eine Sudoku-Matrix handelt. Geben Sie 1 zurück, falls ja, und 0 sonst.
mein Code:
ich bin im ersten Semester Informatik und schreibe am Montag eine Klausur in C. Versuche noch ein paar Programme zu schreiben um zu üben. Bei dieser Aufgabe, bekomm ich aber immer die Fehlermeldung Segmantation fault. Ich finde meinen Fehler nicht.
Aufgabe: Programmieren Sie eine Funktion
int sudokucheck(const int** s)
die von einer durch ein zweidimensionales int-Feld der Größe 9x9 testet, ob es sich um eine Sudoku-Matrix handelt. Geben Sie 1 zurück, falls ja, und 0 sonst.
mein Code:
Code: Alles auswählen
#include<stdio.h>
#include <string.h>
int sudokucheck(const int** s){
int laenge = 9;
int n = 0;
int m = 0;
while (n < laenge){ // jede zeile gibt eine permutation der Länge 9 an
m = 0;
while (m < laenge){
if (permtest(s[n][m], laenge)){
m++;
}
else {
return 0;
}
}
n++;
}
m = 0;
while (m < laenge){ // jede spalte gibt eine permutation der Länge 9 an
n = 0;
while (n < laenge){
if (permtest(s[n][m], laenge)){
m++;
}
else {
return 0;
}
}
}
int laenge2 = 3; // Jeder Block (3x3 Matrix) enthält jeden Wert 1 bis 9 genau einmal
m = 0;
int i = 0;
int x = 1;
int y = 2;
int feld1[i][m], feld2[x][m], feld3[y][m];
while (y <= laenge){ // solange nicht über die 9 zeile untersucht wird
for(m = 0; m < laenge2; m++){ // solange nicht über die 9 spalte untersucht wird
if((!memcmp(feld1, feld2, sizeof(3))) && (!memcmp(feld2, feld3, sizeof(3)))){ // solange alle ungleich sind
m+3;
}
else{ // wenn keine ungleichheit herrscht
return 0; // felhlerrückgabe
}
i + 3; // nächste 3er box überprüfen
x + 3;
y + 3;
}
}
return 1;
}
int permtest(const int** s, int laenge){ // ohne wiederholung und bijektiv
int i = 0;
int index = 0;
for (int j = 1; j <= laenge; j++){ // hier gehe ich das Feld der Menge {1,2...,n} durch
i = 0; // ich beginne wieder bei 0 zu zählen
index = 0; // ich muss immer wieder den index auf beginn setzen - gehe von vorne durch
while (index != (laenge)){ // solange ungleich länge
if (j == s[index]){ // überprüfe ob gleichheit herrscht
i++; // zähle die häufigkeit
}
index++; // gehe zur nächsten stelle im index
}
if (i != 1 ){ // wenn i nicht genau 1
return 0; // keine permutation
}
}
return 1; // sonst permutation
}