Schachbrett programmieren in C

Hallo Zusammen,

ich habe da ein kleines Problem beim Programmieren mit C und komme schon seit Tagen nicht mehr wirklich voran.
Ich muss ein Schachbrett programmieren, welches abwechselnd „0“ für schwarz und „1“ für weiß anzeigt. Das sollte folgendermaßen aussehen:

schachbrett

Nun habe ich es geschafft, das Grundgerüst mit Nullen aufzubauen, jedoch fehlt mir das Wissen, um die Einsen abwechselnd reinzubekommen.

Der Quellcode sieht zur Zeit so aus:

#include <stdio.h>

int main(void)
{
	int brett[8][8] = { 0 };
	int i, j;

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			printf("| %d ", brett[i][j]);
		}
		printf("|\n");
	}
	printf("\n\n");

	return 0;
}

Über einen guten Ratschlag wäre ich sehr glücklich!
Danke

hi,

nen Hinweis würde ich mal einbringen:

Immer, wenn i+j ungerade ist, bekommt das Array an der Stelle eine 1.

grüße
lipi

1 Like

hmm,

würden die Nullen und Einsen dann nicht in einem Linien-
statt einem Karomuster dargestellt werden?
Also quasi

01010101
01010101
01010101
01010101

usw.

LG

hi,

damit man erkennt wo du den gedanklichen Hänger hast wäre es durchaus nett, wenn du erklärst, warum du glaubst auf dein Ergebnis zu kommen.

Wie würdest du denn den Wert der 2. Zeile und 2. Spalte direkt ansprechen?

grüße
lipi

1 Like

Danke für Deine Hilfe lipi,

den Wert könnte ich direkt ansprechen, indem ich sofort nach der Initialisierung auf 0
brett[1][1] = 1;
einfüge, aber das wäre ja eine „manuelle“ Zuweisung.
Meinst du, ich sollte nach der Initialisierung auf Null irgendwie noch eine Initialisierung auf Eins für alle ungeraden Stellen vornehmen? Wenn ja: Wie am besten?

Finde den Fehler!

Schon mal etwas von Verzweigungen gehört? Du durchläufst doch schon das ganze Brett mit den beiden Schleifen. lipi hat dir den Hinweis gegeben

Du musst das nur umsetzen!

hi,

ja, und 1 + 1 ist 2 also gerade.

Wenn alle ungeraden Werte von i+j eine 1 bekommen, bleibt die Position [1][1] auf 0.

nur um mal das generelle zu klären, unabhängig wie.

Hast du keine Idee wie man alle geraden und ungeraden Werte unterscheiden könnte?

grüße
lipi

Vielleicht wäre es dann nützlich, die genaue Aufgabenstellung hier zu präsentieren.

Um nur die gezeigte Ausgabe zu erzeugen, ist das Array ja gar nicht erforderlich.

'tschuldigung, war mein Fehler, auch noch Anfängerfehler. :relaxed: Das kommt davon, wenn man nebenbei Klassenarbeiten korrigiert. :stuck_out_tongue:

Ich habe schon einige Ideen, nur Probleme beim eigenständigen Formulieren.
Vllt noch ein int Ungerade deklarieren für Zahlen != /2
bzw. mit dem Modulo arbeiten?!

genau das. In C# habe ich das Programm übrigens schon lange fertig, mit deiner Array-Variante. :wink:
grafik

Lass mich raten…du bist keine Anfängerin :wink:
Mir fällt es grad noch nicht so einfach

Bis auf meinen Anfängerfehler, für den ich mich schon ausreichend geschämt habe :smiley:, habe ich dir doch oben geschrieben, was du machen musst.

Die Schleifen zum Durchlaufen des Arrays hast du. Dass du i+j mit Modulo auf gerade/ungerade prüfst, weißt du nun auch. Ich weiß nicht (mehr), wie das bei C mit der Arrayinitialisierung ist, in C# bräuchtest du nämlich keine. In der inneren Schleife prüfst du, ob (i+j)%2 0 oder 1 ist (wegen Summe gerade oder ungerade) und je nachdem gibst du eben 0 oder 1 aus. Fertig!

Nochmal: worum geht es bei Deiner Aufgabe? Um Array-Initialisierung? Um verschachtelte Schleifen? Um Array-Arithmetik?

Für die Ausgabe reichen die zwei Schleifen, die du schon hast. Dafür benötigst du kein Array.

Wenn es um die Initialisierung geht: ein Array kann bei der Definition vollständig initialisiert werden.
int a[2][2] = { {1,2}, {3,4} };

Wenn es rechnen mit Schleifenindizes geht, solltest du zwei geschachtelte Schleifen verwenden. Zuerst die Werte zuweisen, in der zweiten Schleife dann ausgeben.

Schachbrett mit 8x8 Felder, schwarze Felder 0 und weiße Felder 1 als Wert und Ausgabe!

Dabei muss
image
als Ergebnis rauskommen

Falsche Antwort. Ihm ging es eher darum, was mit der Aufgabe gelernt/geübt werden soll:

Wieso falsche Antwort?
Ich kann doch nicht mehr sagen, als es mir die Aufgabenstellung vorgibt.

Doch, ich wiederhole es:

Z. B. auch, ob überhaupt mit Arrays programmiert werden sollte, da, wie er schon sagte,

Dann ist die einfachste Lösung

for ( i=0; i < 4; i++)
{ 
    printf("|0|1|0|1|0|1|0|1|\n");  
    printf("|1|0|1|0|1|0|1|0|\n");
}
2 Like

Das wäre natürlich die einfachste Variante für mich,
sollte das aber schon als Funktion schreiben und nicht über printf ausgeben.
Ob mit Array oder ohne spielt dabei aber wohl keine Rolle