/* File: figure2.c */
/* Time-stamp: "2001-03-21 14:53:10 calvanes" */
/* Scopo: esempio di uso di funzioni (con variabili locali e con parametri) */

/* Permette all'utente di stampare su schermo figure geometriche.
   L'utente interagisce con il programma tramite una semplice interfaccia.
   E' possibile scegliere
    - la forma della figura da stampare (quadrato o triangolo)
    - la dimensione della figura
*/

#include <stdio.h>

void StampaQuadrato(int altezza)  /* altezza e' un parametro formale */
{
  int i, j;  /* i e j sono variabili locali */

  for(i = 1; i <= altezza; i++) {
    for(j = 1; j <= altezza; j++)
      printf("*");
    printf("\n");
  }
}


void StampaTriangolo(int altezza) /* altezza e' un parametro formale */
{
  int i, j;  /* i e j sono variabili locali!!! */

  for(i = 1; i <= altezza; i++) {
    for(j = 1; j <= altezza - i ; j++)
      printf(" ");
    for(j = 1; j <= 2*i - 1 ; j++)
      printf("*");
    printf("\n");
  }
}


void StampaSaluto(void)
{
  printf("Ho finito!\n");
}


int main(void)
{
  char ch;
  int dim;

  do {
    printf("\nIMMETTI UN CARATTERE A SCELTA FRA I SEGUENTI\n");
    printf("  q: stampa un quadrato\n");
    printf("  t: stampa un triangolo\n");
    printf("  f: per terminare il programma:\n");
    scanf("%c", &ch); getchar();
    if (ch == 'q' || ch == 't') {
      printf("dimensione? ");
      scanf("%d", &dim); getchar();
      printf("\n");
      switch(ch) {
      case 'q' :
        StampaQuadrato(dim);      /* dim e' il parametro attuale: il valore  */
        break;                    /* di dim viene usato per inizializzare il */
      case 't' :                  /* parametro formale (che e' una variabile */
        StampaTriangolo(dim);     /* locale) della funzone  invocata.        */
        break;
      }
    }
  } while (ch != 'f');
  StampaSaluto();

  return 0;
}