************************************************************************
* File: sortmain.for
************************************************************************
* Scopo: utilizza i moduli per l'ordinamento realizzati dai file
*          - bubsort.for
*          - selsort.for
*          - inssort.for
*        Effettua lettura da file
************************************************************************

      PROGRAM SortMain

* Istruzioni dichiarative
      IMPLICIT NONE

* Dichiarazioni di tipo per le costanti
      INTEGER dim
      CHARACTER*12 nomefilein, nomefileout
* Definizioni delle costanti
      PARAMETER (dim = 10)
      PARAMETER (nomefilein = 'VETT.TXT', nomefileout = 'SORTED.TXT')

* Dichiarazioni delle variabili
      INTEGER i
      INTEGER origvett(dim), ordvett(dim)

* Subroutine usate:
*     BubSort (INTEGER(*), INTEGER)
*     SelSort (INTEGER(*), INTEGER)
*     InsSort (INTEGER(*), INTEGER)

* Istruzioni esecutive

* lettura vettore da file
      OPEN (9, FILE = nomefilein)
      READ (9,*) (origvett(i), i=1,dim)
      CLOSE (9)

      WRITE (*,*) 'Vettore letto dal file VETT.TXT:'

* stampa del vettore letto su video, tutti gli elementi SULLA STESSA riga
      WRITE (*,100) (origvett(i), i=1,dim)

* copia del vettore letto, ...
      DO 10 i = 1, dim
        ordvett(i) = origvett(i)
 10   CONTINUE
* ordinamento della copia a bolle ...
      CALL BubSort (ordvett, dim)
* e stampa su video del vettore ordinato
      WRITE (*,*) 'Dopo l''ordinamento a bolle:'
      WRITE (*,100) (ordvett(i), i=1,dim)

* copia del vettore letto, ...
      DO 20 i = 1, dim
        ordvett(i) = origvett(i)
 20   CONTINUE
* ordinamento della copia per selezione del minimo ...
      CALL SelSort (ordvett, dim)
* e stampa su video del vettore ordinato
      WRITE (*,*) 'Dopo l''ordinamento per selezione del minimo:'
      WRITE (*,100) (ordvett(i), i=1,dim)

* copia del vettore letto, ...
      DO 30 i = 1, dim
        ordvett(i) = origvett(i)
 30   CONTINUE
* ordinamento della copia per inserzione ...
      CALL InsSort (ordvett, dim)
* e stampa su video del vettore ordinato
      WRITE (*,*) 'Dopo l''ordinamento per selezione del minimo:'
      WRITE (*,100) (ordvett(i), i=1,dim)

* stampa del vettore ordinato su file
      OPEN (8, FILE = nomefileout)
      WRITE (8,*) 'Vettore ordinato salvato sul file SORTED.TXT'
      WRITE (8,100) (ordvett(i), i=1,dim)
      CLOSE (8)

      STOP

* Istruzioni FORMAT
 100  FORMAT(10I6)

      END