!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  PROGRAM Folgen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  (c) 2005, Christian B. Lang, Mathematische Methoden in der Physik
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  Die Glieder a_n einer Folge werden uebereinander ausgeschrieben. 
!  Gleichzeitig werden die aufeinander folgenden Werte graphisch 
!  dargestellt. Der Wert des Folgenglieds wird in der Funktion 
!  fg(n) berechnet. }
! 
!  Wenn Sie den Wert der Folgenglieder jeweils ausgeschrieben haben
!  wollen, so entfernen Sie die mit * markierten Kommentarklammern
!  im Programm.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  
PROGRAM Folgen
  
   implicit none
   integer::n,n1,n2
   character (len=256)::gnudat,gnucmd
   real::fg

   print *,'Ich berechne Folgenglieder von n=n1 bis n=n2.'
   print *,'n1 = '
   read(*,*) n1
   print *,'n2 = '
   read(*,*) n2
  
!  Ich verwende gnuplot, um die Daten zu plotten.
!  Wenn gnuplot nicht installiert ist, so koennen die Daten im File
!  folgen_plot.dat' mit einem anderen Plottingprogramm dargestellt
!  werden.
  
   gnudat='folgen_plot.dat'
   gnucmd='folgen_plot.cmd'
  
   print *,'Ich erzeuge zwei Files:'
   print *,trim(gnudat)
   print *,trim(gnucmd)
   print *,'Falls diese Files schon existieren, erfolgt eine Fehlermeldung.'
   open(unit=10,file=trim(gnudat),status='new')
   open(unit=11,file=trim(gnucmd),status='new')
   write(11,'(a)') 'set title "Folgen-Plot'
   write(11,'(a)') 'set xlabel "n"'
   write(11,'(a)') 'set ylabel "a_n"'
   write(11,'(a)') 'plot "'//trim(gnudat)//'" using 1:2 with linespoints'
   write(11,'(a)') 'pause -1'
   write(11,'(a)') 'quit'
   close(11)
   
   write(10,*)n1,fg(n1)
   
   do n=n1,n2
     write(10,*)n,fg(n)
   end do
   close(10)

!  Wenn das Unterprogramm "system" nicht verfuegbar ist, so kommentieren
!  Sie die folgende Zeile aus. Dann muessen Sie die Grafik selbst mittels
!  "gnuplot folgen_plot.cmd" aufreufen.

   call system(trim('gnuplot '//trim(gnucmd)))
   print *,'Ende des Programms'

END PROGRAM Folgen

REAL FUNCTION fg(n)
   implicit none
   integer::n
   real:: x

   x=n
   fg = 2 * x / (5 + x)

!  Andere Beispiele:
   fg = sin((x+0.5)*3.14159265358)/x  
END FUNCTION fg
