Disegnare triangoli con asterischi e numeri in C++

Una serie di esercizi molto gettonati per aiutare i principianti a comprendere l'uso dei cicli, le condizioni per farli arrestare e l'annidamento.

 In ognuno dei seguenti frammenti di codice, è riportato un commento che illustra il risultato che si vuole ottenere a schermo.

#include <iostream>

using namespace std;

/*
Disegna un triangolo rettangolo come il seguente:

*
**
***
****
*****

*/
int main() {

	//il primo ciclo regola le righe
	for (int riga=0; riga < 6; riga++)
	{
		for (int stella = 0; stella < riga; stella++)
		{
			cout << '*';
		}
		cout << endl;
		
	}	

	getchar();
    return 0;
}

Analogo esercizio ma stavolta con i numeri progressivi. Ad ogni riga ricomincia la numerazione.

#include <iostream>

using namespace std;

/*
Disegna un triangolo rettangolo come il seguente:

1
12
123
12345
123456

*/
int main() {

	//il primo ciclo regola le righe
	for (int riga=0; riga < 6; riga++)
	{
		for (int stella = 0; stella < riga; stella++)
		{
			cout << stella + 1;
		}
		cout << endl;

	}

    return 0;
}

Analogo esercizio ma stavolta con i numeri progressivi. Ad ogni riga non ricomincia la numerazione ma un contatore complessivo viene aumentato ad ogni stampa tra riga e riga. E' stata aggiunta una finezza, una funzione setw che fa uno spazio fisso, un padding in gergo, di 3 caratteri così da distanziare al meglio le varie cifre. Va aggiunta la libreria iomanip in alto.

#include <iostream>
#include <iomanip>
using namespace std;

/*
Disegna un triangolo rettangolo come il seguente:

 1
 2  3
 4  5  6
 7  8  9 10
11 12 13 14

*/
int main() {

    int contatore = 1;
	//il primo ciclo regola le righe
	for (int riga=0; riga < 6; riga++)
	{
		for (int stella = 0; stella < riga; stella++)
		{
            cout << std::setw (3) << contatore ;
			//cout << contatore;
			contatore++;
		}
		cout << endl;

	}

    return 0;
}

 

 

Altro esempio leggermente più complesso è costruire un triangolo isoscele. Il trucco sta solo nel capire che ci vogliono due cicli, uno che stampa gli spazi vuoti ed uno come quello precedente che stampa gli asterischi o numeri progressivi riga/totale. In questo esempio stampiamo 5 righe. Se si volesse inserire un valore diverso, basta modificare il valore iniziale della variabile nrighe o farlo leggere, ad esempio, da tastiera/input.

#include <iostream>

using namespace std;

/*
Disegna un triangolo rettangolo come il seguente:

   *
  * *
 * * *
* * * *

*/
int main() {

    int nrighe = 5;

	//il primo ciclo regola le righe
	for (int riga=0; riga <= nrighe; riga++)
	{
		//stampo gli spazi iniziali per centrare la punta
		for (int stella = riga; stella < nrighe ; stella++)
		{
            cout << ' ';
		}

        //stampo gli asterischi per ogni riga
		for (int stella = 0; stella < riga ; stella++)
		{
            cout << '*' <<' ';
		}

		cout << endl;

	}

    return 0;
}