/* File: figure5.c */
/* Time-stamp: "2001-03-21 14:58:38 calvanes" */
/* Scopo: esempio di uso di funzioni (con variabili locali e con parametri)
          esempio di attivazioni annidate di funzioni */

/* 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  (quadrato o triangolo)
    - la dimensione della figura
    - di quanto spostare la figura a destra
    - il tipo di carattere con cui riempire la figura
*/

#include <stdio.h>


void StampaSequenza(int lung, char ch)
  /* Stampa una sequenza di lunghezza lung di caratteri ch. */
{
  int i;

  for(i = 1; i <= lung; i++)
    printf("%c", ch);
}


void StampaQuadrato(int altezza, int offset, char ch)
{
  int i;

  for(i = 1; i <= altezza; i++) {
    StampaSequenza(offset, ' ');
    StampaSequenza(altezza, ch);
    printf("\n");
  }
}


void StampaTriangolo(int altezza, int offset, char ch)
{
  int i;

  for(i = 1; i <= altezza; i++) {
    StampaSequenza(offset+altezza-i, ' ');
    StampaSequenza(2*i-1, ch);
    printf("\n");
  }
}


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


int main(void)
{
  char ch;
  int dim, offset;
  char chfig;

  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("offset? ");
      scanf("%d", &offset); getchar();
      printf("carattere di riempimento? ");
      scanf("%c", &chfig); getchar();
      printf("\n");
      switch(ch) {
      case 'q' : StampaQuadrato(dim, offset, chfig); break;
      case 't' : StampaTriangolo(dim, offset, chfig); break;
      }
    }
  } while (ch != 'f');
  StampaSaluto();

  return 0;
}