/* quadreto.c
 * Linguaggi e Traduttori
 * Prof. Ing. Stefano Salvi
 * Lezione 2a
 *
 * Esercizio 1;
 * Scrivere un programma che stampi la seguente figura: 
 *
 *      **********
 *      **       *
 *      * *      *
 *      *  *     *
 *      *   *    *
 *      *    *   *
 *      *     *  *
 *      *      * *
 *      *       **
 *      **********
 */

#include <stdio.h>

#define LATO	10

/* La funzione 'riga' stampa una riga di '*' lunga 'massimo'
 * elementi.
 * La riga 0 e la riga 'massimo - 1' saranno piene
 * Nelle altre righe saranno '*' il primo elemento, quello d'indice 'massimo - 1'
 * e quello il cui indice corrisponde con il numero di riga.
 */
void riga (int numero, int massimo)
{
int i;
  if (numero == 0 || numero == massimo - 1)
  {	/* Prima ed ultima riga */
    for (i = 0; i < massimo; i++)
      putchar ('*');
  }
  else
  {	/* Ogni altra riga */
    putchar ('*');	/* Stampo il primo asterisco */
    /* ATTENZIONE: Ciclo dal SECONDO al PENULTIMO !! */
    for (i = 1; i < massimo -1; i++)
      if (i == numero)	/* Se siamo sulla diagonale */
	putchar ('*');	/* Stampo '*' */
      else		/* Altrimenti */
	putchar (' ');	/* Stampo ' ' */
    putchar ('*');	/* Stampo l'ultimo asterisco */
  }
  putchar ('\n');
}

/* Funzione principale:
 * Si limita a chiamare la funzione 'riga' per ognuna delle righe
 * Si noti che utilizza la macro LATO per la dimensione.
 * Cambiando questa costante, si possono fare quadrati di qualunque dimensione
 */
int main ()
{
int i;

  for (i = 0; i < LATO; i++)
    riga (i,LATO);
  return 0;
}