Zapewne rozważamy tylko trójkąty prostokątne.
#include <iostream>
main()
{
int height = 18;
for (int i = 0; i < height - 1; i++)
{
std::cout << "X";
// Tworzenie przestrzeni pomiędzy wysokością, a dłuższym bokiem
for (int j = 0; j < i; j++)
std::cout << " ";
// Tworzenie dłuższego boku
if (i)
std::cout << "X";
std::cout << std::endl;
}
// Tworzenie podstawy trójkąta
for (int i = 0; i < height + 1; i++)
std::cout << "X";
return 0;
}
Ogółem pomysł wygląda następująco:
pierwsza pętla odpowiada za poruszanie się po liniach - czyli wysokości trójkąta, ale bez ostatniego rzędu, czyli miejsca na podstawę. Dlatego w warunku mamy height - 1. Następnie już w pętli na samym początku wypisujemy X - w ten sposób tworzymy wysokość trójkąta. Potem jest pętla odpowiadająca za spacje, czyli naszą pustą przestrzeń. Potem sprytnie wykorzystujemy zliczanie iteracji pętli - if(i). Dla i = 0 nie musimy tworzyć dłuższego ramienia trójkąta, zaś dla i > 0 instrukcja wykona się zawsze, tak więc zawsze po spacjach dostaniemy X.
Na koniec, jak już wyjdziemy z pętli głównej, wchodzimy w pętlę odpowiadającą za podstawę. Tam mamy warunek height + 1. Dlaczego tak? Ponieważ wcześniejsza linia ma dokładnie height znaków - pierwszy X, height - 2 spacji oraz ostatni X. Razem daje nam to height znaków, więc ostatecznie musimy wykonać ostatnią pętlę height + 1 razy.