Temel Yönleriyle Fortran 90 / 95 / 2003

  Temel Konular
* Önsöz

* Fortran'a Giriş
* Fortran'nın Temelleri
* Basit ve Formatlı Okuma/Yazma
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Alt Programlar I
* Alt Programlar II
* Diziler
* Dinamik Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Yapısal Veri Tipleri
* Dosya Yönetimi
* Modül Kavramı
* Sayısal Tipler (KINDs)
* Bit Düzeyinde Çalışmak
* Kütüphane Fonksiyonları Listesi

* Yararlanılan Kaynaklar

  İleri Uygulamalar
* - - -
* Karmaşık Sayılar
* Tarih-Saat Fonksiyonları
* Rastgele Sayılar
* Katar - Sayı Dönüşümleri
* Komut Satırı İşlemleri
* Co-Array Fortran
* Derleme Seçenekleri
* Fortran ve C

  Seçilmiş Örnekler
* Sayılar Kuramı
* Analiz
* Lineer Cebir

  Fortran 90/95 Derleyicileri
* Salford (silversoft FTN95)
* G95
* GFORTRAN

  Dış Bağlantılar
* programlama.com
* Fortran (wikipedia)

* fortran.gantep.edu.tr
* g95.org
* Hot scripts

  İletişim
* E-posta

 

Bölüm 21: Tarih ve Saat Fonksiyonları

##################-- (%90)


Giriş

Bazı uygulamalarda program içerisinde tarih ve saat bilgilerine ihtiyaç duyulabilir. Fortran 90+'da tarih/saat bilgisine üç temel fonksiyon ile erişilebilir. Bu fonksiyonlar üç temel işlevi yerine getirir:

  • Takvim (Tarih) bilgileri
  • Yerel Saat
  • Saat Dilimleri
Bu bölümde aşağıda genel bildirimleri verilen şu (subroutine tipindeki) fonksiyonlar incelenmişitir.
  • CALL CPU_TIME(TIME)
  • CALL DATE_AND_TIME([DATE] [,TIME] [,ZONE] [,VALUES])
  • CALL SYSTEM_CLOCK(COUNT, COUNT_RATE, COUNT_MAX)

21.1   CPU_TIME() Fonksiyonu

Genel Yazım biçimi:

  CPU_TIME(TIME)   ! <<< orjinal bildirim
  CALL CPU_TIME(Zaman)
Bu fonksiyon(subroutine) mikroişlemciye bağlı olarak zaman bilgisini saniye cinsinden hesaplar. Burada
Zaman gerçel sayı tipinde ve INTENT(OUT) argumanı olarak tanımlanış bir değişkendir.
Derleyici tarih bilgisi göstermezse bu fonksiyon negatif bir değer gönderir.

Program 21.1, aşağıdaki sonsuz serinin üst limitini sonsuz yerine 1e9 (bir milyar) alarak hesaplar ve hesaplama süresini ekrana basar.

Bu seri yakınsak olup yakınsaklık değeri ln(2) = 0.69314718 dir.

Program 21.1: CPU_TIME kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
PROGRAM Sonsuz_Seri
!--------------------------------------------------------
! 21rg01.f95
! CPU_TIME kullanımı
!--------------------------------------------------------
IMPLICIT NONE
INTEGER :: n
REAL :: t1, t2
REAL :: s = 0.0


  CALL CPU_TIME(t1)

  DO n=1,1000000000
    s = s + (-1)**(n+1) / REAL(n)
  END DO

  CALL CPU_TIME(t2)

  PRINT *,"Hesaplanan deger: ",s
  PRINT *,"Hesaplama suresi: ",t2-t1," saniye."

END PROGRAM

ÇIKTI

 Hesaplanan deger:  0.6931375
 Hesaplama suresi:  7.155912  saniye.

21.2   DATE_AND_TIME() Fonksiyonu

Genel Yazım biçimi:

  CALL DATE_AND_TIME([DATE] [,TIME] [,ZONE] [,VALUES])   ! <<< orjinal bildirim
  CALL DATE_AND_TIME([Tarih] [,Saat] [,Bölge] [,Deger])
Sistem saatinden alınan tarih ve saat bilgilerini döndürür.
Bütün argümanlar esnek (optinal) ve INTENT(OUT) bildirimi ile döndürülür. Burada
  • Tarih en az 8 karakterden oluşan bir katardır. Son 8 karakter CCYYMMDD (CC yüzyıl, YY yıl, MM ay, DD gün) formatında tarih verisidir.
  • Saat en az 10 karakterden oluşan bir katardır. Son 10 karakter HHMMSS.SSS (HH saat, MM dakika, SS saniye, SSS mili saniye) formatında saat verisidir.
  • Bölge en az 5 karakterden oluşan bir kadardır. Son 5 karakter (+-)HHMM (UTC veya Greenwich'i referans alarak HH saat ve MM dakika cinsiden) saat farkı verisidir.
  • Deger 8 eleamanlı bir tamsayı dizisidir:
    Deger(1): Yıl
    Deger(2): Ay (1 to 12)
    Deger(3): Ayın günü
    Deger(4): Dakika cinsinden UTC'ye göre zaman farkı
    Deger(5): Saat (0 to 23)
    Deger(6): Dakika (0 to 59)
    Deger(7): Saniye (0 to 59)
    Deger(8): Mili saniye (0 to 999)
Örneğin aşağıdaki program parçası
  CHARACTER(10) :: t, b

  CALL DATE_AND_TIME(DATE = t, ZONE = b)

  PRINT *,"Tarih: ",t
  PRINT *,"Bölge: ",b
şöyle bir çıktı verebilir:
  Tarih: 20110129
  Bölge: +0200
Aşağıdaki program parçası uygun bir formatta bugünün tarihini ve şuandaki zamanı ekrana basar:

Program 21.2: DATE_AND_TIME kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
PROGRAM Sonsuz_Seri
!--------------------------------------------------------
! 21rg02.f95
! DATE_AND_TIME kullanımı
!--------------------------------------------------------
IMPLICIT NONE
INTEGER :: V(8)

  CALL DATE_AND_TIME(VALUES=V)

  PRINT *,"Tarih= ", V(3), V(2), V(1)

  PRINT 10,V(5:7)
  10 FORMAT("Saat = ",I2.2,":",I2.2,":",I2.2)

END PROGRAM

ÇIKTI

Tarih=  24 7 2011
Saat = 14:40:29

21.3   SYSTEM_CLOCK() Fonksiyonu

Genel Yazım biçimi:

  CALL SYSTEM_CLOCK(COUNT, COUNT_RATE, COUNT_MAX)      ! <<< orjinal bildirim
  CALL SYSTEM_CLOCK(Sayac, Sayac_Hızı, Sayac_en_büyük)
Mikroişlemciye bağlı saat (clock) sayımı bilgilerini döndürür.
Bütün argümanlar INTENT(OUT) özelliğene sahiptir.
  • Sayac bir tamsayıdır. Şuanki işlemci saatini veya eğer saat yoksa -HUGE(0) döndürür.
    Sayac değeri Sayac_en_büyük değerine ulaşıncaya kadar birer birer arttırılır daha sonra tekrar 0'dan başlar.
  • Sayac_Hızı bir tamsayıdır. Bir saniyedeki mikroişlemciye ait saat "tik-tak"ların sayısını döndürür.
  • Sayac_en_büyük bir tamsaydır. Sayac'ın alabileceği en büyük değerdir.
Örneğin aşağıdaki program parçası:
  INTEGER :: IC,IR,IM

  CALL SYSTEM_CLOCK (COUNT= IC, COUNT_RATE= IR, COUNT_MAX= IM)

  WRITE(*,*) IC, IR, IM
şu şeklinde bir çıktı verebilir:
  0 100000 2147483647



Powered by PHP