c Tutte le righe che incominciano con un carattere alla prima
c colonna vengono ignorate dai compilatori Fortran e sono quindi
c solo dei commenti.
c Le istruzioni vere e proprie incominciano non prima della
c colonna 7. Le colonne 2, 3, 4, 5 sono riservate alla
c scrittura di possibili indici di riferimento alla riga per
c cicli do-continue o per istruzioni goto.
c Quando invece in una riga compare un carattere nella
c colonna 6, questo indica che tale riga  è il proseguimento
c di quella precedente; le istruzioni infatti non possono
c superare la colonna 72
c234567
      program grafintpol
c Questo programma scrive in un file una tabella x-y
c che corrisponde ai valori in ordinata y data l'ascissa x
c di un polinomio di grado al massimo 9 all'interno di un
c certo intervallo, e in questo intervallo ne calcola l'integrale

c dichiarazioni:
      parameter(nmax=10)
c Esempio di common-block che mette in comune i valori del
c vettore c(nmax) con la funzione f(x)
      common /coeff/ c(nmax)
      real a, b, c, x, y, dx, sum, segno
      integer n, i, nc
c tipi di dati:
c integer, real, double precision, logical, character, parameter

c apertura files di dati e risultati finali
      open(10,file='coefficienti.dat')
      open(20,file='grafico.dat')
c sintassi:
c open([unit=]numero,file='nome'[,status=new/old,form=formatted/unformatted])
c tra parentesi quadra ciò che può essere tralasciato.

c lettura files di dati
      read(10,*) n
c l'asterisco indica la lettura (scrittura) con nessuna particolare
c formattazione del testo
      if(n.gt.nmax) stop 'N. coeff. > 10'
c altri operatori logici:
c ge, eq, ne, lt, le

c ciclo do-enddo
      do i=1,n
        read(10,*) c(i)
      enddo
c chiusura dell'unità 10 dove si era aperto il file 'coefficienti.dat'
      close(10)

c inizializzazione variabili
c ciclo do-continue (equivalente a do-endo)
      do 5 i=n+1,nmax
        c(i) = 0.0
 5    continue
      sum = 0.0

c unit 6 = standard output (schermo)
c unit 5 = standard input (tastiera)
      write(6,*) 'estremi intervallo:'
      write(6,*) 'a = ?'
      read (5,*) a
      write(6,*) 'b = ?'
      read (5,*) b

c esempio di if-then-elseif-else-endif
      if(a.gt.b) then
        call swap(a,b)
        segno = -1.0
      elseif(a.eq.b) then
        write(6,*) 'Integrale tra a e b di f(x) = 0.0'
        y = f(a)
        write(6,*) 'f(a) = f(b) =',y
        stop
      else
        segno = 1.0
      endif

      write(6,*) 'numero di campionamenti del polinomio'
      write(6,*) 'compresi gli estremi ?'
      write(6,*) 'N = ?'
      read (5,*) nc

      x = a
      dx = (b-a)/float(nc-1)

      do i=1, nc-1
        y = f(x)
        write(20,*) x, y
        sum = sum + dx * y
        x = x + dx
      enddo
      y = f(x)
      write(20,*) x, y
      close(20)

      sum = sum * segno
      write(6,*) 'Integrale tra a e b di f(x) =', sum

      stop
      end

c234567
c Esempio di funzione;
c osservare che va dichiarato il tipo di dato che la
c funzione ritorna
      real function f(x)
      parameter(nmax=10)
      common /coeff/ c(nmax)
      real c, x
      f = c(1) + x * ( c(2) + x * ( c(3) + x * ( c(4) +
     + x * ( c(5) + x * ( c(6) + x * ( c(7) + x * ( c(8) +
     + x * ( c(9) + x * c(10) ))))))))
      return
      end

c Esempio di subroutine
      subroutine swap(a,b)
      real a, b, tmp
      tmp = a
      a = b
      b = tmp
      return
      end