Zadanie jest w zasadzie trywialne. Można to zrobić nie tylko rysując tą figurę, ale tworząc tabelkę kwadratową (albo operować, jakby ona była). W "puste" miejsca wypisujemy znak spacji, a w innym wypadku znak '*'. Można to byłoby zrobić w sposób mało rozumowy - sprawdzić i zapamiętać wszystkie pozycje pól z gwiazdkami i w nich wypisywać je, ale po co się tak męczyć? Kto myśli ten szybko dochodzi do celu ;). Zastanówmy się zatem nad tym jaki jeden warunek zrobić, aby narysować przekątną. Pola przekątnej () mają współrzędne sobie równe. Pierwsza gwiazdka na polu [0][0] kolejna [1][1] zatem, gdy x i y są sobie równe. (Tak bardzo upraszczając). Kolejnym warunkiem w naszym X jest 2. przekątna. [0][9] [1][8] (dla boku 10) zatem, wtedy, gdy suma x i y jest równa (10-1). Zatem nasz X możemy narysować tak:
#include <iostream>
using namespace std;
int main(void)
{
//rysujemy X
const int bok=10;
char tabela[bok][bok];
for(int i=0;i<bok;i++)
{
for(int x=0;x<bok;x++)
{
cout<<(tabela[i][x] =(((x==i)||(i+x==(bok-1)))?'*':' '));
}
cout<<'\n';
}
return 0;
}
A co z Z? Przekątną Z już mamy, zatem teraz wystarczy warunek na kreskę górną i dolną... a ona jest wtedy, gdy nasza wysokość jest w wierszu skrajnym, zatem program może wyglądać tak:
#include <iostream>
using namespace std;
int main(void)
{
//rysujemy rozciągnięte Z (bo 10 x 10 Z nie przypomina)
const int bok=10;
char tabela[bok][bok];
for(int i=0;i<bok;i++)
{
for(int x=0;x<bok;x++)
{
cout<<(tabela[i][x]=(((i==0||i==(bok-1))||(i+x==(bok-1)))?'*':' '));
}
cout<<'\n';
}
return 0;
}
Można to też zrobić w sposób wypisz 10 * potem wypisz 8 znaków spacji i gwiazdkę, 7 znaków spacji ... i tak do 0 zspacji i znów 10*, ale nie wydaje mi się, aby tamto rozwiązanie było czytelniejsze i ładniejsze. Poza tym to możemy sobie bez problemu wrzucić w jakąś tabelkę.
Edit: zostałem ubiegnięty.
Edit: To jak ma być w tabelce to tutaj będzie również zapisywane do tabeli, bo bez tabeli rozwiązanie już jest.