Spielfeld



  • Hallo, ich habe gerade erst angefangen zu Programmieren. Ich bräuchte mal etwas Hilfe, wir haben als Aufgabe bekommen, nach der Eingabe zweier Zahlen ein Spielfeld ausgeben zu lassen, dass zwischen + und - switcht.

    Beispiel:
    3 6
    +-+-+-
    -+-+-+
    +-+-+-

    und
    6 3
    +-+
    -+-
    +-+
    -+-
    +-+
    -+-

    Jetzt habe ich das schon mehrmals neu geschrieben, aber sobald die zweite Zahl eine ungerade ist, funktioniert es nicht mehr. Könnte jemand mal drüber schauen und mir erklären, was hier falsch ist? Danke im Voraus.

    #include <stdio.h>
    
    
    int main(int argc, char* argv[])
    {
    	int zeile, spalte, sparte, a = 0, b, NEIN = 1, JA = 0, restwert;
    
    	scanf_s("%d %d", &zeile, &spalte);
    	sparte = spalte;
    	for (int i = 0; i < zeile; i++)
    	{
    		for (int j = 0; j < spalte; j++)
    		{
    			if (a == sparte)
    			{
    				printf("\n");
    				sparte += spalte;
    				b = NEIN;
    				NEIN = JA;
    				JA = b;
    			}
    			if (a % 2 == 0)
    			{
    				restwert = NEIN;
    			}
    			else if (a % 2 != 0)
    			{
    				restwert = JA;
    			}
    			restwert ? printf("+") : printf("-");
    			a++;
    		}
    	}
    	return 0;
    }
    


  • @Luka Vielleicht wäre ein Beispiel gut, wie es richtig aussehen soll.
    Wenn die Zeile immer mit einem + beginnen soll, musst du auf dei Spalte testen (und nicht a)

    for (int i = 0; i < zeile; i++)
    { for (int j = 0; j < spalte; j++)
      { (j%2 == 0) ? putchar('+') : putchar('-');
      }
      putchar('\n');
    }
    


  • @DirkB Danke für deine schnelle Antwort, die Ausgabe soll so aussehen :

    3 6
    +-+-+-
    -+-+-+
    +-+-+-

    6 3
    +-+
    -+-
    +-+
    -+-
    +-+
    -+-
    Wir sollen darauf achten , dass keine gleichen Zeichen direkt neben- oder übereinander stehen.
    Was bei mir nur funktioniert, wenn die zweite eingelesene Zahl (spalte) eine gerade ist.

    Meine Ausgabe sieht aber so aus:

    3 6 Ist richtig.
    +-+-+-
    -+-+-+
    +-+-+-

    und bei:
    6 3 leider nicht richtig.
    +-+
    +-+
    +-+
    +-+
    +-+
    +-+



  • @Luka
    Dein Code ist leider vollkommen wirr.

    				sparte += spalte;
    				b = NEIN;
    				NEIN = JA;
    				JA = b;
    

    Keine Ahnung was du damit bezwecken wolltest. Klar, wenn ich mich jetzt hinsetze und mir das länger ansehe komme ich vermutlich drauf, aber dazu dass mir das Spass machen würde bin ich ca. 20 Jahre zu alt.

    for (int y = 0;  y < rowCount; y++) {
        for (int x = 0; x < columnCount; x++) {
            putchar("+-"[(x + y) & 1]);
        }
        putchar('\n');
    }
    


  • @Luka sagte in Spielfeld:

    Wir sollen darauf achten , dass keine gleichen Zeichen direkt neben- oder übereinander stehen.
    Was bei mir nur funktioniert, wenn die zweite eingelesene Zahl (spalte) eine gerade ist.

    Dann lass diesen komischen if (a == sparte) {...} Teil weg.

    Und bei if (a % 2 == 0) brauchst du im else-Zweig kein weiteres if
    Wenn du im else-Zweig angekommen bist, ist a nicht gerade.

    In C gilt 0 (Null) als falsch/unwahr. Alle anderen Werte als richtig/wahr.

    Zudem werden Makros (oft als Konstanten (miss)braucht) traditionell in Großbuchstaben geschrieben.

    Deine wechselnde Definition der Variablen JA und NEIN ist daher maximal verwirrend.



  • @DirkB @hustbaer
    Super, danke euch beiden. Ich muss zu geben, am Ende habe ich meinen Code auch nicht mehr verstanden, durch das öfters neu schreiben, habe ich den Code immer etwas länger gezogen, um dann vielleicht den Fehler zu sehen, aber das hat das Ganze, glaube ich, nur unübersichtlicher gemacht.



  • @Hustbaer
    könntest du mir erklären, was in dem Putchar passiert?
    [(x + y) & 1] Also der Teil, was genau passiert hier. Ich muss leider sagen, ich verstehe es nicht.


  • Mod

    Wenn man eine Zahl mit 1 ver-UND-ed, ist das ein sehr kompakter Test, ob die Zahl gerade oder ungerade ist. Denn gerade Zahlen enden im Binärsystem immer auf 0, ungerade Zahlen immer auf 1, daher ist (ungerade Zahl) & 1 gleich 1 und (gerade Zahl) & 1 ist gleich 0.

    PS: Falls du nicht weißt, was das & (in diesem Zusammenhang) bedeutet: https://en.wikipedia.org/wiki/Bitwise_operation#AND



  • Es wird die Summe aus x (Spalte) und y (Reihe) gebildet.
    Dann wird die Summe logisch mit 1 ver'and'et, das Ergebnis ist 0, wenn die Summe gerade ist, und 1, wenn die Summe ungerade ist.
    Dementsprechend wird dann aus "+-" der char mit dem Index 0 (+) oder der mit dem Index 1 (-) genommen.



  • Ey Super, danke für die Hilfe. Ich habs jetzt verstanden. Danke fürs Zeit nehmen.



  • Belli meinte binär ver'and'et.

    Das logische AND ist in C && und betrachtet Zahlen, so wie ich es oben beschrieben habe (0 ist falsch, andere Werte wahr).

    @Luka sagte in Spielfeld:

    könntest du mir erklären, was in dem Putchar passiert?

    Das gibt ein (1) Zeichen (char) an die Standardausgabe (output). Das ist meist der Bildschirm.

    printf steht für print formattet und gibt einen formatierten String an die Standardasugabe aus.



  • @DirkB sagte in Spielfeld:

    Belli meinte binär ver'and'et.

    Das ist natürlich richtig, sorry und danke fürs richtig stellen!


Anmelden zum Antworten