2D Array kopieren und verändern

DerWisser

Grünschnabel
Hallo.
Ich wollte eigentlich die Werte von einem 2D array in ein anders kopieren und dabei eine bestimmte menge an Zahlen gegen 0 tauschen.
Code:
printf("Geben sie bitte, für den Schwierigkeitsgrad, eine Zahl zwischen 1 und 80 ein");
Ich dachte beim kopieren an:
Code:
 #include <stdio.h>
void main(void)
{
     int feld[9][9] =  //Das sudoku
{	
            {1, 7, 9, 4, 6, 3, 2, 8, 5},
			{4, 2, 5, 8, 1, 9, 7, 6, 3},
			{3, 6, 8, 7, 5, 2, 9, 4, 1},
			{9, 4, 7, 2, 3, 5, 6, 1, 8},
			{6, 8, 1, 9, 7, 4, 3, 5, 2},
			{2, 5, 3, 1, 8, 6, 4, 9, 7},
			{8, 1, 2, 6, 4, 7, 5, 3, 9},
			{5, 9, 6, 3, 2, 1, 8, 7, 4},
			{7, 3, 4, 5, 9, 8, 1, 2, 6},
};
     int feld2[9][9] = //das Feld nach der Abfrage 
{	
            {1, 2, 3, 4, 5, 6, 7, 8, 9},
			{0, 0, 0, 0, 0, 0, 0, 0, 0},
			{0, 0, 5, 0, 3, 0, 0, 0, 2},
			{0, 0, 0, 2, 0, 0, 0, 0, 0},
			{0, 0, 3, 0, 0, 0, 2, 0, 1},
			{0, 0, 0, 0, 0, 0, 0, 0, 0},
			{0, 0, 0, 0, 1, 0, 0, 0, 0},
			{0, 1, 0, 0, 0, 0, 9, 0, 0},
			{0, 0, 0, 0, 0, 0, 5, 0, 0},
};
int x, y;
feld[0][0] = feld2[0][0];
 feld[0][1] = feld2[0][1];
 feld[0][2] = feld2[0][2];
 feld[0][3] = feld2[0][3];
 feld[0][4] = feld2[0][4];
 feld[0][5] = feld2[0][5];
 feld[0][6] = feld2[0][6];
 feld[0][7] = feld2[0][7];
 feld[0][8] = feld2[0][8]; 
//usw.
aber das sieht ziemlich „Unelegant“ und dann es fehlt mir immer noch die Möglichkeit der abfrage.
Das sollte ein Sudoko werden bei dem man den Schwierigkeitsgrad (also die menge der zahlen die man löschen sollte) abfragen kann.
Weiß jemand wie ich das lösen könnte
 
Hmm für mich nichtganz eindeutig die Frage aber ich versuche es mal:

- volles Array (Lösung) erstellen
- volles Array kopieren (Ratearray)
- Eingabe der Schwierigkeit (n-Zahlen weglassen)
- for schleife (0-n)
- Boolvar auf false
- while schleife (solange Boolvariable falsch)
- Zufallsindex wählen(0-9)(0-9) oder einmal und splitten
- Abfragen ob der Inhalt 0 ist (wenn nein boolvar = true)
- indexplatz auf 0 setzen
- ende gelände

So oder so ähnlich sollte es klappen, die Frage ist nur ob es überhaupt lösbar ist ein bei einer zu einseitigen Matrix :)
 
Danke für deine hilfe aber ich muss erhlich sagen das ich nicht wirklich viel bis jetzt programmiert hab ....
ich versteh alles bis:
Boolvar auf false
- while schleife (solange Boolvariable falsch)
- Zufallsindex wählen(0-9)(0-9) oder einmal und splitten
- Abfragen ob der Inhalt 0 ist (wenn nein boolvar = true)
- indexplatz auf 0 setzen
 
Ok zur Erklärung: Ich habe deine Frage so verstanden das wenn der User den Schwierigkeitsgrad 40 angibt, genau 40 Zahlen vom Array auf 0 zurückgesetzt werde sollen. Der Hintergrund der ganzen Geschichte ist es zufällig irgendwelche Werte(Indizes) zu wählen und sie auf 0 zu setzen damit der User dieses Feld erraten muss(Soduku halt). Wenn dieses Feld aber schon mit 0 belegt ist, würde die For-Schleife weiterzählen und es wären z.B. nur 39 Felder auf 0 gesetzt worden und nicht 40. Desweiteren eine ausführlichere Erklärung zu den nicht verstandenen Punkten

Du setzt in der For-Schleife eine Variable vom Typ Bool auf false, das bedeutet in diesem Fall, der Slot wird schon eine 0 haben, es ist quasi nur ein Schalter. Solange diese Variable false ist wird die While-Schleife ausgeführt. Diese erzeugt zufällig Indizes (0-9)
da dein Array ja bla[9,9] aussieht. Z.b. erzeugt das Programm x1=4 und x2=7 dann fragst du ab ob dort schon eine 0 steht. Ist dies der Fall werden neue Indizes erzeugt solange bis der Platz keine 0 enthält. Dann setzt du die Bool Variable auf true und den Platz auf 0 somit wird die While-Schleife abgebrochen und die For-Schleife geht weiter. Dieses Prozedere n-mal.

Zufallswert erzeugen: random(10) oder rand % 10
Alles weitere findest du in der Hilfe mfg;-)
 
Zurück