/* File: figure4.c */
/* Time-stamp: "2002-03-25 12:18:24 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  (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 StampaSeq(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, j;

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


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

  for(i = 1; i <= altezza; i++) {
    for(j = 1; j <= offset+altezza-i; j++)
      printf("%c", ' ');
    for(j = 1; j <= 2*i-1; j++)
      printf("%c", 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;
}