* Ö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
* - - -
* 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
* Sayılar Kuramı
* Analiz
* Lineer Cebir
Fortran 90/95 Derleyicileri
|
* Salford (silversoft FTN95)
* G95
* GFORTRAN
* programlama.com
* Fortran (wikipedia)
* fortran.gantep.edu.tr
* g95.org
* Hot scripts
* E-posta
|
|
Bölüm 24: Komut Satırı İşlemleri (Fortran 2003)
###################- (%95)
|
Giriş
Bir programa komut satırından parametre aktarımı yapmakda mümkündür.
Bu, derlenmiş (çalıştırılabilir) bir program komut satırından
(işletim sistemi ortamından) çalıştırılacağı zaman yapılır. Parametre aktarımı, programın adı
yazılıp bir boşluk bırakıldıktan hemen sonra yapılır.
Parametreler, komut satırından sayısal olarak
girilse bile program içinde karakter topluluğu (string) olarak gelir. Bu durumda, bu ifadeleri
sayısal değerlere çeviren fonksiyonlar kullanılır. Bunun için Bölüm 23'de anlatılan
yöntemlerden yararlanılır.
Bu özellik Fortran 2003'e ait olmasına rağmen G95 derleyicisi tarafından desteklenmektedir.
24.1 Komut Satırına Erişim Fonksiyonları
Aşağıdaki fonksiyon ve rutinler, kullanıcıyı komut satırına eriştirir.
- COMMAND_ARGUMENT_COUNT()
Komut satırından girilen parametre sayısını verir.
- CALL GET_COMMAND([COMMAND, LENGTH, STATUS])
Aşağıdaki INTENT(OUT) özelliğine sahip değişkenleri gönderir.
- COMMAND : (seçimlik) CHARACTER tipindeki bu değişken bütün komutu tutar.
- LENGTH : (seçimlik) INTEGER tipindeki bu değişken komutun karakter sayını tutar.
- STATUS : (seçimlik) INTEGER tipindeki bu değişken komut satırına erişimin gerçekleşip
gerçekleşmediği sorgular. 0 ise sorun yok anlamındadır.
- CALL GET_COMMAND_ARGUMENT(NUMBER[, VALUE, LENGTH, STATUS])
Komut satırı argumanını (parameteresini) gönderir.
- NUMBER : INTEGER tipinde ve INTENT(IN) özelliğine sahip bu değişken
kaçıncı argümana erişileceğini gösterir.
0 ila COMMAND_ARGUMENT_COUNT() arasında bir değerdir.
- VALUE : (seçimlik) CHARACTER tipinde INTENT(OUT) özelliğine sahiptir ve argümanın
değerini tutar.
- LENGTH : (seçimlik) INTEGER tipinde ve INTENT(OUT) özelliğine sahiptir.
Argümanın uzunluğunu tutar.
- STATUS : (seçimlik) INTEGER tipinde ve INTENT(OUT) özelliğine sahiptir.
Argümana erişimin başarılı olup olmadığnı sorgular.
24.2 Örnek Uygulamalar
ÖRNEK 1: KOMUT SATIRINDAKİ DEĞERLER
Bir önceki kısımda analatılan fonksiyonların ilk ve en basit kullanımı Program 24.1 verilmiştir.
Program 24.1: Komut satırındaki değerlerin yazdırılması.
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
PROGRAM KomSat
!-------------------------------------------------------
! 24prg01.f95
! Komut satırındaki değerlerin yazdırılması.
!-------------------------------------------------------
IMPLICIT NONE
CHARACTER(LEN=200) :: Komut
CHARACTER(LEN=10) :: Arguman
INTEGER :: I
! Bütün komutu al ve yazdır
CALL GET_COMMAND(Komut)
PRINT *, "Komut : ",TRIM(Komut)
! Komut satırı argümanlarını yazdır
DO I = 1, COMMAND_ARGUMENT_COUNT()
CALL GET_COMMAND_ARGUMENT(I,Arguman)
PRINT *, "Arguman ", I, " : ",TRIM(Arguman)
END DO
END PROGRAM |
Programın Windows ortamında G95 ile derlenip çalıştırılması aşağıdaki gibidir.
Linux ortamında derleme ve çalıştırma örneği aşağıdaki gibi olacaktır.
ÖRNEK 2: KOMUT SATIRINDAN GİRİLEN İKİ SAYININ TOPLANMASI
Bu örnekte komut satırından girilen iki sayının nasıl toplanacağı anlatılacaktır. İnceleyiniz.
Program 24.2: Komut satırından girilen iki sayının toplamı.
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
PROGRAM KomSat
!-------------------------------------------------------
! topla2.f95
! Komut satırından girilen iki sayının toplamı.
! Kullanımı: topla2 sayı1 sayı2
!-------------------------------------------------------
IMPLICIT NONE
CHARACTER(LEN=10) :: Arg1, Arg2
INTEGER :: N, a, b
! Arguman sayısı
N = COMMAND_ARGUMENT_COUNT()
IF(N /= 2) STOP "Eksik veya fazla parametre"
CALL GET_COMMAND_ARGUMENT(1,Arg1) ! 1 inci arguman
CALL GET_COMMAND_ARGUMENT(2,Arg2) ! 2 nci arguman
! Argumanları tam sayıya çevir
A = KtrTam(Arg1)
B = KtrTam(Arg2)
PRINT *,"Toplam = ", A+B
CONTAINS
! Bu fonksiyon bir katarı tamsayıya dönüştürür
INTEGER FUNCTION KtrTam(Katar)
CHARACTER (*), INTENT(IN) :: Katar
READ(UNIT=Katar,FMT='(I10)') KtrTam
END FUNCTION KtrTam
END PROGRAM |
ÇIKTI
$ g95 topla2.f95 -o topla2
$ topla2 11 22
Toplam = 33
$ topla2
STOP Eksik veya fazla parametre
|
ÖRNEK 3: KOMUT SATIRINDAN GİRİLEN BÜTÜN SAYILARIN TOPLANMASI
Bir önceki örneğin daha gelişmiş bir örneği aşağıda verilmiştir. Burada komut satırından girilen
bütün sayılar toplanmaktadır.
Program 24.3: Komut satırından girilen bütün sayının toplamı.
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
|
PROGRAM KomSat
!-------------------------------------------------------
! topla.f95
! Komut satırından girilen sayıların toplamı.
! Kullanımı: topla sayı1 sayı2 ...
!-------------------------------------------------------
IMPLICIT NONE
CHARACTER(LEN=10) :: Arg
INTEGER :: X, I, N, Toplam = 0
! Arguman sayısı
N = COMMAND_ARGUMENT_COUNT()
! Argumanları al ve topla
DO I = 1, N
CALL GET_COMMAND_ARGUMENT(I,Arg)
X = KtrTam(Arg)
Toplam = Toplam + X
END DO
PRINT *,"Toplam = ", Toplam
CONTAINS
! Bu fonksiyon bir katarı tamsayıya dönüştürür
INTEGER FUNCTION KtrTam(Katar)
CHARACTER (*), INTENT(IN) :: Katar
READ(UNIT=Katar,FMT='(I10)') KtrTam
END FUNCTION KtrTam
END PROGRAM |
ÇIKTI
$ g95 topla.f95 -o topla
$ topla 11 22
Toplam = 33
$ topla 11 22 33 44 100
Toplam = 210
|
ÖRNEK 4: BEŞ İŞLEM
Son olarak, komut satırından girilen sayılar üzerinde beş işlem yapan bir program aşağıda verilmiştir.
Program 24.4: Komut satırından girilen iki sayı üzerinde beş işlem.
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
|
PROGRAM KomSat
!-------------------------------------------------------
! hesap.f95
! Komut satırından girilen iki sayı üzerinde beş işlem.
! Kullanımı: hesap sayı1 operatör sayı2
!-------------------------------------------------------
IMPLICIT NONE
INTEGER :: N
REAL :: X, Y, Z
CHARACTER(10) :: Arg1, Arg2, Arg3
! Arguman sayısı
N = COMMAND_ARGUMENT_COUNT()
IF(N < 3) STOP "Eksik parametre"
IF(N > 3) STOP "Fazla parametre"
CALL GET_COMMAND_ARGUMENT(1,Arg1) ! 1 inci parametre
CALL GET_COMMAND_ARGUMENT(2,Arg2) ! 2 nci parametre
CALL GET_COMMAND_ARGUMENT(3,Arg3) ! 3 üncü parametre
x = KtrGer(Arg1)
y = KtrGer(Arg3)
SELECT CASE(Arg2(1:2))
CASE('+'); z = x+y
CASE('-'); z = x-y
CASE('*'); z = x*y
CASE('/'); z = x/y
CASE('**'); z = x**y
CASE DEFAULT; z = 0.0
WRITE(*,*) "Geçersiz parametre: ", Arg2
END SELECT
PRINT *," Sonuc = ",z
CONTAINS
! Bu fonksiyon bir katarı gerçel sayıya dönüştürür
REAL FUNCTION KtrGer(Katar)
CHARACTER (*), INTENT(IN) :: Katar
READ(UNIT=Katar, FMT='(F10.5)') KtrGer
END FUNCTION KtrGer
END PROGRAM |
ÇIKTI
$ g95 hesap.f95 -o hesap
$ hesap 2.5 + 3.0
Sonuc = 5.5
$ hesap 2.5 - 3.0
Sonuc = -0.5
$ hesap 2.5 ** 3.0
Sonuc = 15.625
|
|