/**********************************************************

    Scrivere la funzione main che visualizza un menu e
    attende la scelta da parte dell'utente.
    A seconda della scelta dell'utente, viene invocata
    una delle 5 funzioni precedenti oppure il programma
    viene terminato.
    L'output deve essere del tipo:

       ***** Menu' *****
       1: Stampa la cornice di un quadrato di lato N
       2: Stampa un triangolo rettangolo di lato N
       3: Stampa la diagonale principale di un quadrato di lato N
       4: Stampa un triangolo rettangolo rovesciato di lato N
       5: Stampa la diagonale secondaria di un quadrato di lato N
       0: Esci

       La tua scelta:
       La lunghezza del lato:

    Se la scelta è diversa da 1, 2, 3, 4 o 5 la lunghezza del lato N non deve essere richiesta
    Altrimenti l'output deve variare in base alla scelta tra uno dei seguenti.
    Ogni figura deve essere prodotta da una funzione a parte.
    Si mostra il caso lato uguale a 3 al variare della scelta:

    1)

        * * *
        *   *
        * * *

    2)

        *
        * *
        * * *

    3)

        *
          *
            *

    4)

        * * *
          * *
            *

    5)

            *
          *
        *

    0)
        --uscita dal programma--

    In tutti gli altri casi deve comparire un alert del tipo:

        Scelta non valida!

************************************************************/

#include <iostream>
using namespace std;

    stampaCornice(int n)
    {
        // 1 Stampo la cornice di un quadrato
        int i, j;
        i = 0;
          while (i < n) {
            int j = 0;
            while (j < n) {
              if ((i==0) || (i==n-1))
                cout << "* ";
              else{
                if ((j==0) || (j==n-1))
                   cout << "* ";
                else
                   cout << "  ";
              }
              j = j + 1;
            }
            cout << endl;
            i = i + 1;
          }
    }

    void stampaTriRet(int n)
    {
        // 2 Stampa un triangolo rettangolo
        int i, j;
        i = 0;
        while ( i < n) {
          j = 0;
          while ( j <= i ) {
          cout<<"* ";
              j = j + 1;
          }
          cout<<endl;
          i = i + 1;
        }
    }

    void stampaDiagPrin(int n)
    {
        // 3 Stampa diagonale principale
        int i, j;
        i = 0;
        while ( i < n) {
          j = 0;
          while ( j < n ) {
          if ( j == i ) {
              cout<<"* ";
          }
          else {
              cout << "  ";
          }
              j = j + 1;
          }
          cout<<endl;
          i = i + 1;
        }
    }

    void stampaTriRetRo(int n)
    {
        // 4 stmapa un triangolo rettangolo rovesciato
        int i, j;
        i = 0;
        while ( i < n) {
          j = 0;
          while ( j < n ) {
          if ( j >= i ) {
              cout << "* ";
          }
          else {
              cout << "  ";
          }
              j = j + 1;
          }
          cout<<endl;
          i = i + 1;
        }
    }

    void stampaDiagSec(int n)
    {
        // 5 Stampo la diagonale secondaria
        int i, j;
        i = 0;
        while ( i < n) {
          j = 0;
          while ( j < n ) {
          if ( j == n - 1 - i ) {
              cout<<"* ";
          }
          else {
              cout << "  ";
          }
              j = j + 1;
          }
          cout<<endl;
          i = i + 1;
        }
    }


int main() {

  int s;
  int n;
  bool stop = false;
  while (stop == false)
  {

    // stampa menu'
    cout << "***** Menu' *****" << endl;
    cout << "1: Stampa la cornice di un quadrato di lato N" << endl;
    cout << "2: Stampa un triangolo rettangolo di lato N" << endl;
    cout << "3: Stampa la diagonale principale di un quadrato di lato N" << endl;
    cout << "4: Stampa un triangolo rettangolo rovesciato di lato N" << endl;
    cout << "5: Stampa la diagonale secondaria di un quadrato di lato N" << endl;
    cout << "0: Esci" << endl << endl;

    cout << "La tua scelta: ";
    cin >> s;

    if((s!=0)&&(s!=1)&&(s!=2)&&(s!=3)&&(s!=4)&&(s!=5))
    {
        cout<<"Scelta non valida!"<<endl<<endl;
        continue;
    }

    if(s==0)
    {
        // Nel caso 0 torno true quindi chiudo il ciclo
        cout<<"--uscita dal programma--"<<endl;
        stop = true;
        continue;
    }

    cout << "La lunghezza del lato: ";
    cin >> n;

    if (s==1)
    {
        stampaCornice(n);
    }

    if (s==2)
    {
        stampaTriRet(n);
    }
    if (s==3)
    {
        stampaDiagPrin(n);
    }
    if (s==4)
    {
        stampaTriRetRo(n);
    }
    if (s==5)
    {
        stampaDiagSec(n);
    }
  }
  return 0;
}
