/* File: invertic.c */
/* Time-stamp: "2001-03-27 00:49:15 calvanes" */
/* Scopo: utilizzo della pila dei record di attivazione come memoria di lavoro
 */

/* Legge una sequenza di caratteri in ingresso e la inverte usando una
   funzione iterativa ed una ricorsiva. */

#include <stdio.h>

#define LUNGMAX 10
typedef char TipoParola[LUNGMAX];


void invertiInputIterativa(void)
  /* Inverte una sequenza di caratteri letti in input. Versione iterativa */
{
  TipoParola parola;
  int lung = 0;
  int i;
  char ch;

  ch = getchar();
  while (ch != '\n' && lung < LUNGMAX)
  {                                  /* lettura e memorizzazione in un array */
    parola[lung] = ch;
    lung++;
    ch = getchar();
  }

  /* writeln('Sequenza invertita:'); */
  for (i = lung-1; i >= 0; i--)   /* stampa della sequenza invertita */
    putchar(parola[i]);
}  /* invertiInputIterativa */


void invertiInputRicorsiva(void)
  /* Inverte una sequenza di caratteri letti in input. Versione ricorsiva */
{
  char ch;

  ch = getchar();
  if (ch != '\n') {
    invertiInputRicorsiva();                           /* chiamata ricorsiva */
    putchar(ch);                        /* al ritorno dalla chiamata ricorsiva
                                           viene stampato il carattere letto */
  }
  /* else
     printf("Sequenza invertita:\n"); */
}  /* invertiInputRicorsiva */


int main(void)
{
  printf("Immetti una sequenza di caratteri (lunga al piu' %d)!\n",
         LUNGMAX);
  
  invertiInputIterativa();
  printf("\nImmetti una sequenza di caratteri (di lunghezza qualsiasi)!\n");

  invertiInputRicorsiva();
  putchar('\n');
  return 0;
}  /* main */