      program verschiebungen
c
c-----------------------------------------------------------------------
c       Hauptprogram zur
c       Praktikumsaufgabe PA2
c
c    Loesen eines linearen erweiterten Gleichungssystem K Y = Q 
c    in dem Unterprogramm LOESE(A, N, B, M, IER)
c
c    Uebergabeparameter:
c
c    A...............Koeffizientenmatrix
c    N...............Dimension der Koeffizientenmatrix
c    B...............Matrix der rechten Seite
c    M...............Zahlen der Spalten auf der rechten Seite
c    IER.............Fehlervariable
c 
c    Lokale Variablen:
c
c    wmax............Arbeitsfeld
c    n...............Problemdimension
c    ik, nk..........Adressen im Arbeitsfeld
c    i...............Hilfsvariable
c
c    Benoetigte Unterprogramme:
c
c    REAL SUBROUTINE LOESE(...)
c-----------------------------------------------------------------------
c
      INTEGER wmax, n, ik,nk, i
c   Arbeitsfeld
      PARAMETER (wmax=100)
      REAL work(wmax)
      

c   Einlesen der Steifigkeitsmatrix im SSM

c     Dimension
        OPEN(16, FILE='k.dat')
        READ(16,*) n
c     Adressrechnung        
        ik = 1
        nk = (n*(n+1))/2
          IF(ik-1+nk .GT. wmax) 
     *         STOP 'Arbeitsfeld zu klein'
c     Einlesen der Elemente
        DO 100 i=1,nk
 100    READ(16,*) work(ik-1+i)
        CLOSE(16)
c     Kontrollausgabe
        WRITE(*,'(//A/)') 'Steifigkeitsmatrix'
        CALL ausg_ssm(work(ik),n,'(9F10.1)')

c   Einlesen der eingepraegten Kraefte

********* Ergaenzen Sie das Programm *********

**********************************************

c   Loesen des Gleichungssystems

********* Ergaenzen Sie das Programm *********

**********************************************
c   Fehlerbehandlung

********* Ergaenzen Sie das Programm *********

**********************************************
c   Ausgabe der Verformung

********* Ergaenzen Sie das Programm *********

**********************************************

      END


      SUBROUTINE ausg_ssm(A,n,fmt)

c       Ausgabe einer symmetrischen
c       n x n - Matrix A gespeichert
c       im SSM
c
c     A.........auszugebende Matrix (I)
c     n.........Dimension           (I)
c     fmt.......Ausgabeformat       (I)

      INTEGER n, izanf,i,j
      REAL A(1)
      CHARACTER*20 fmt
      
      izanf=0
      DO i=1,n
        WRITE(*,fmt) (A(izanf+j), j=1,i)
        izanf = izanf+i
      END DO
      
      RETURN
      END



      SUBROUTINE ausg_mat(A,n,m,fmt)

c       Ausgabe einer n x m - Matrix A
c
c     A.........auszugebende Matrix (I)
c     n.........Zeilenzahl          (I)
c     m.........Spaltenzahl         (I)
c     fmt.......Ausgabeformat       (I)

      INTEGER n,m, i,j
      REAL A(n,m)
      CHARACTER*20 fmt
      
      DO i=1,n
        WRITE(*,fmt) (A(i,j), j=1,m)
      END DO
      
      RETURN
      END
