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

Aufgabe 2

PROGRAM A_03
 IMPLICIT NONE
 INTEGER :: a, b, a_save, b_save, ggT, kgV, iostat

 DO
  DO
   WRITE (*,'(A)',ADVANCE='NO') 'geben Sie zwei INTEGER-Zahlen ein: '
   READ (*,*,IOSTAT=iostat) a,b
   IF ((iostat == 0) .AND. (a > 0) .AND. (b > 0)) EXIT
  ENDDO
  a_save = a; b_save = b
  DO                           ! besser mit Hilfsvariablen:
   IF (a > b) THEN             ! g = MAX(a,b); k = MIN(a,b)
    a = MOD(a,b)               ! DO
    IF (a == 0) THEN           !  h = MOD(g,k)
     ggT = b                   !  IF (h == 0) THEN
     EXIT                      !   ggT = k
    ENDIF                      !   EXIT
   ELSE                        !  END IF
    b = MOD(b,a)               !  g = k; k = h
    IF (b == 0) THEN           ! END DO
     ggT = a
     EXIT
    ENDIF
   ENDIF
  ENDDO

  IF (MOD(MAX(a_save,b_save),MIN(a_save,b_save)) == 0) THEN
   kgV = MAX(a_save,b_save)   ! kann man auch anders definieren,
  ELSE                        ! dann entfaellt auch dieser Zweig!
   kgV = a_save*b_save/ggT    ! kgV(3,15) = 15 oder 45, je nach Definition
  ENDIF
  WRITE (*,*) ggT, kgV
 END DO
END


Reinfried O. Peter 2001-09-07