PROGRAM Tarih
!--------------------------------------------------------
! 07prg06.f95
! Verilen bir tarihin yılın kaçıncı günü olduğunu
! hesaplar.
!--------------------------------------------------------
IMPLICIT NONE

  INTEGER :: gun = 1     ! tarih: 01 Ağustos 2003
  INTEGER :: ay  = 8
  INTEGER :: yil = 2003

  PRINT *, gun, ay, yil, " tarihi yılın"
  PRINT *, Yilin_Gunu(gun,ay,yil), ". günüdür"

CONTAINS

  ! yil artıl yıl ise 1 aksi halde 0 gönderir
  INTEGER FUNCTION Artik(Yil)
  INTEGER, INTENT(IN) :: Yil

      Artik = 0

      IF( mod(yil,4)  ==0 .AND. &
          mod(yil,100)/=0 .OR.  &
          mod(yil,400)==0 ) Artik = 1

  END FUNCTION Artik


  ! Yılın kaçıncı günü olduğunu hesaplar ve o günü gönderirir
  INTEGER FUNCTION Yilin_Gunu(Gun, Ay, Yil)
  INTEGER, INTENT(IN) :: Gun, Ay, Yil
  INTEGER :: I
  INTEGER :: agun(12) = (/31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31/)

    Yilin_Gunu = gun

    DO I = 1, Ay-1
      Yilin_Gunu = Yilin_Gunu + agun(I)
      if(I==2) Yilin_Gunu = Yilin_Gunu + Artik(yil)
    END DO

  END FUNCTION

END PROGRAM Tarih