SZachownica

0

Chciałem zrobić program, który stworzy szachownicę, nie specjalnie się to udało, znalazłem pewien na internecie i go lekko przerobiłem
Tworzy szachownicę, ale nie do końca wiem dlaczego

dlaczego (x+y)%2 oraz czemu na końcu musi być '\n' Dziękuję za pomoc

#include<iostream>

using namespace std;

int main()

{ int n;
cin>>n;
for( int y = 0; y < n; ++y )
{
for( int x = 0; x < n; ++x )
{
if(( x + y ) % 2==0)
{
cout<<" ";
}
else{ cout<<"#";}
}

    cout << '\n';
}
0

\n to po prostu przejscie do nowej linii
Gdy rysujesz szachownice to rysujesz ją linia po linii, od lewej do prawej więc żeby narysować ją musisz w końcu przejść do następnej linii

2

if(( x + y ) % 2==0)

generalnie konstrukcja typu n % 2 == 0 oznacza czy reszta z dzielenia przez 2 wynosi zero, czyli - czy n jest parzyste? W ten sposób możesz zrobić coś na zmianę (białe, czarne, pola), ponieważ reszta z dzielenia przez 2 będzie zero przy parzystych i 1 przy nieparzystych liczbach.

Więc jeśli zrobiłbyś x % 2 == 0, to przy parzystych x byłoby np. czarne pole, a przy nieparzystych x byłoby białe pole.

I prawie dobrze, tylko wyszły by ci pionowe paski, a nie szachownica.

więc dlatego (x + y) % 2 == 0, gdzie przechodząc przez każdy kolejny rząd dodajesz wartość y, a ponieważ y się zmienia (parzyste/nieparzyste), to w rezultacie każdy kolejny rzad się zaczyna od innego koloru pola (białe, czarne), więc masz szachownicę.

edit:
@Visual Code

tak też można, ale wtedy w ogóle nie byłoby potrzebne dzielenie modulo, bo po prostu by była jedna flaga, którą by się zmieniało w dwóch miejscach: 1. na początku/końcu każdego rzędu 2. po każdym polu np. tak (w JavaScript) :

var s = '';
for (let y = 0, b = false; y< 8;y++, b = !b) {
  for (let x=0;x<8;x++, b=!b) {
     s += b? '#' : '.';
  } 
  s += '\n'
};
console.log(s)

1 użytkowników online, w tym zalogowanych: 0, gości: 1