next up previous contents
Nächste Seite: Aufgabe 2 Aufwärts: Lösungen Vorherige Seite: Lösungen   Inhalt

Aufgabe 1

PROGRAM A_01
IMPLICIT NONE

INTEGER    :: n,k
INTEGER    :: ios
INTEGER    :: fak, sum, binominal
! Eingabe ---------------------------------------------------------------------
WRITE(*,'(A)') 'Berechnung der Binominalkoeffizienten in Tabellenform'
DO
  WRITE(*,'(A)',ADVANCE='NO') 'Geben Sie bitte n ein: '
  READ(*,*,IOSTAT=ios) n
  IF (ios==0) THEN
    IF ((n>=1) .AND. (n<30)) THEN  ! Plausibilitaetstest:
      EXIT
    ELSE
      WRITE(*,*) 'n musz > 0 und < 30 sein!'
    ENDIF
  ELSE
    WRITE(*,*) 'Fehlerhafte Eingabe!'
  ENDIF
END DO
! Berechnung und Ausgabe der Tabelle ------------------------------------------
sum=0; fak=1; binominal=1  ! Initialisierung
WRITE(*,'(A)') '  k  |  n-k  | Summe 1 bis k |         k!  | Binominalkoeff.'
WRITE(*,'(59("-"))')
DO k=1,n
  sum=sum+k
  fak=fak*k
  binominal=binominal*(n-k+1)/k
!------------------------------------------------------------------------------
! sum und fak sollten klar sein;
! (n ueber k) = n!/((n-k)!.k!) = n.(n-1)...(n-k+1)/k!
! n ist fest, k laeuft von 1 bis n;
! k = 1: (n ueber 1) = n/1! = n
! k = 2: (n ueber 2) = n.(n-1)/2! = n/1!.(n-1)/2 = (n ueber 1).(n-1)/2
! k = 3: (n ueber 3) = n.(n-1).(n-2)/3! = n.(n-1)/2!.(n-2)/3 =
!                    = (n ueber 2).(n-2)/3
! ...
! k: (n ueber k) = (n ueber k-1).(n-k+1)/k
!------------------------------------------------------------------------------
  WRITE(*,'(1X,i3," | ",i3,3X,"|",4X,i7,4X,"|",3X,i8,"  |   "i8)') &
                                         k,n-k,sum,fak,binominal
END DO
WRITE(*,'(59("-"))')
END PROGRAM


Reinfried O. Peter 2001-09-07