C++, Macierz wypełniona jedynkami w kształt rombu

0

Witam.
Mam problem z raczej dość prostym do napisania programem. Otóż zaczynam swoją podróż z C++ i na zajęciach mieliśmy wykonać program, który, wypełni macierz kwadratową o nieparzystej liczbie wierszy jedynkami w kształcie rombu:

0001000
0011100
0111110
1111111
0111110
0011100
0001000 

Napisałem tak jakby 'pierwszą część' która wypełnia mi jedynkami jakby tylko górę do połowy.

 #include <iostream>
using namespace std;
int main()
{
	const int wiersz = 7; //zadeklarowanie wielkosci macierzy
	int tabA[wiersz][wiersz];
	//zerowanie
	for (int i=0; i<wiersz; i++)
	{
		for (int j=0; j<wiersz; j++)
		{
			tabA[i][j] = 0;
		}
	}
	//wstawianie jedynek
	int srodek = wiersz/2;
	for (int i=0; i<=srodek; i++)
	{
		for (int j=srodek-i; j=srodek+i; j++)
		{
			tabA[i][j] = 1;
		}
	}
	//wyswietlenie
	for (int i = 0; i < wiersz; i++)
	{
		for (int j = 0; j < wiersz; j++)
		{
			cout << tabA;
		}
	cout << "\n";

	}
return 0;
}

jednak kompilator zwraca mi taki oto błąd:

romb.cpp: In function ‘int main()’:
romb.cpp:19:33: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 

Czy pomógłby ktoś rozwiązać ten problem ?

2
for (int j=srodek-i; j=srodek+i; j++)

na

for (int j=srodek-i; j==srodek+i; ++j)

= vs ==

0

Teraz po skompilowaniu i uruchomieniu wyszło takie coś:

0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
0x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef500x7ffc6c24ef50
 

chyba nadal coś nie tak wyszło.

2
cout << tabA; 

na

cout << tabA[i][j]; 
0

Jeszcze raz wymęczę was.
Teraz jedynką wypełniony został pierwszy wiesz

0001000
0000000
0000000
0000000
0000000
0000000
0000000

A w warunku dałem, żeby do połowy doszło. Jeszcze jedna mała podpowiedź ?

#edit
dobra, ogarnąłem, górną część wypełnia tak jak chciałem.
Byłby ktoś tak miły, i pomógł, nakierował jak zrobić żeby wypełniało dolną część?
Siedzę i głowię i nie mogę do tego dojść...

 
#include <iostream>
using namespace std;
int main()
{
	const int wiersz = 7; //zadeklarowanie wielkosci macierzy
	int tabA[wiersz][wiersz];
	//zerowanie
	for (int i=0; i<wiersz; i++)
	{
		for (int j=0; j<wiersz; j++)
		{
			tabA[i][j] = 0;
		}
	}
	//wstawianie jedynek
	int srodek = wiersz/2;
	for (int i=0; i<=srodek; i++)
	{
		for (int j=srodek-i; j<=srodek+i; j++)
		{
			tabA[i][j] = 1;
		}
	}
	//wyswietlenie
	for (int i = 0; i < wiersz; i++)
	{
		for (int j = 0; j < wiersz; ++j)
		{
			cout << tabA[i][j];
		}
	cout << "\n";

	}
return 0;
}
1
    for (int i=0; i<=srodek; i++)
    {
        for (int j=srodek-i; j<=srodek+i; j++)
        {
            tabA[i][j] = 1;
            tabA[wiersz - 1 - i][j] = 1;
        }
    } 

niestety nieoptymalne bo dwa razy nadpisuje jedynkami środkowy wiersz :p

1

Tak Ci dobrze idzie, że aż żal "jątrzyć" :-)
A może postaw sprawę "na głowie". Wypełnij całą tablicę 1'kami a zerami tylko rogi? Będziesz mógł w 1 przebiegu pętli zrobić całość :-)
Jeśli tablica ma szerokość == wysokość, a bieżącym indeksem jest dla kolumn i a dla wierszy j to:
lewy górny róg: i, j
prawy górny róg: szerokość - i, j
lewy dolny róg: i, wysokość - j
prawy dolny róg: szerokość - i, wysokość -j

Nie chcę Ci tu pisać programu bo nie było by zabawy :-)

0

No nie o to chodzi, żeby za mnie pisać, tylko dać jakąś podpowiedź.
O to mi chodziło :D
Dziękuję za pomoc!! :)

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