Mno, úprimne, veľmi by ma prekvapilo, keby ten tvoj kód fungoval správne... Dva cykly sa používajú na to, že jeden sa stará o vypisovanie riadkov a druhý, ten vnorený, na vypisovanie samotných stĺpcov (políčok).
Vezmime si tú pyramídu. Ja som takéto srandy zo školy riešil už dosť dááááávno, takže teraz som si vymyslel svojské riešenie (možno sa učí aj v škole, netuším). V každom prípade mi to vracia správny výsledok
Potrebuješ pár vecí:
- rozmery daného objektu. To, že hviezdičky sú len niekde, nič neznamená, pretože zvyšok potrebuješ vyplniť prázdnym miestom, aby bola pyramída pekne zarovnaná nastred.
- stred riadku (to je vážne jednoduché, hádam písať nemusím)
- krajné pozície
C# kód
Kód:
static void GetPyramid(int maxRows)
{
int maxColumns = (maxRows * 2) - 1; // max sirka
int mid = (maxColumns / 2) + 1; // stred pyramidy
for (int row = 1; row <= maxRows; row++)
{
string rowItself = ""; // premenna na ukladanie riadku
int asterixesOfRow = (row * 2) - 1; // pocet hviezdiciek daneho riadku
int limitLeft = mid - (asterixesOfRow - 1) / 2; // kraj zlava
int limitRight = mid + (asterixesOfRow - 1) / 2; // kraj zprava
for (int column = 1; column <= maxColumns; column++)
{
if (column >= limitLeft && column <= limitRight) rowItself += "*";
else rowItself += " ";
}
Console.WriteLine(rowItself);
}
}
Ja viem, vy sa učíte C, ale princíp je rovnaký...

Zisťuješ vždy len krajné pozície a ak je aktuálny stĺpec v danom rozsahu, dáš hviezdičku, inak len prázdny string/znak. Ja som to najskôr pridal vždy do premennej a vypisoval riadok po riadku. Pozri ten kód, hádam sa z toho vysomáriš, keďtak sa pýtaj.
Nakreslenie štvorca a iných obrazcov sa riadi podobnými pravidlami. Obdĺžnik a štvorec je vážne primitívny...