/* File: vettinv.c */
/* Time-stamp: "2002-04-29 19:20:54 calvanes" */
/* Scopo: uso di vettori e funzioni */

/* Legge un vettore di interi di dimensione fissata, inverte il vettore e lo
   stampa. */

#include <stdio.h>

#define LUNG 5


void leggiVettore(int v[], int dim)
{
  int i;

  printf("Inserire un vettore di interi di dimensione %d\n", dim);
  for (i = 0; i < dim; i++)
    scanf("%d", &v[i]);
}


void stampaVettore(int v[], int dim)
{
  int i;

  printf("Indice Elemento\n");
  for (i = 0; i < dim; i++)
    printf("%6d %8d\n", i, v[i]);
}


void invertiVettore(int v[], int dim)
  /* Inverte il vettore v di dimensione dim.
     Versione iterativa. */
{
  int temp;  /* usata per scambiare due elementi del vettore */
  int i;

  for (i = 0; i < dim/2; i++) {         /* scambia vett[i] con vett[dim-1-i] */
                       /* N.B. funziona sia per dim pari che per dim dispari */
    temp = v[i];
    v[i] = v[dim-1-i];
    v[dim-1-i] = temp;
  }
}


void invertiVettoreRic(int v[], int dim)
  /* Inverte il vettore v di dimensione dim.
     Versione ricorsiva. */
{
  int temp;  /* usata per scambiare due elementi del vettore */

  if (dim > 1) {
    temp = v[0];                /* scambia vett[0] con vett[dim-1] */
    v[0] = v[dim-1];
    v[dim-1] = temp;
    invertiVettoreRic(v+1, dim-2);
  }
}


int main(void)
{
  int vett[LUNG];

  leggiVettore(vett, LUNG);
  invertiVettore(vett, LUNG);
  stampaVettore(vett, LUNG);

  invertiVettoreRic(vett, LUNG);
  stampaVettore(vett, LUNG);

  return 0;
}