MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 4
MODUL I
Struktur Program, Operasi Bilangan, dan Kontrol Alur Program
1. Tujuan Praktikum
• Mahasiswa dapat memahami dasar pemrograman Fortran.
• Mahasiswa memahami operasi bilangan serta kontrol alur program dalam pemrograman Fortran.
• Mahasiswa dapat membuat program perhitungan sederhana menggunakan Fortran.
• Mahasiswa dapat mengaplikasikan kontrol alur program yang sesuai berdasarkan kasus yang diberikan.
2. Dasar Pemrograman Fortran 2.1 Struktur Program Fortran
Struktur program dalam Fortran secara garis besar dapat digambarkan sebagai berikut : Script 1.1 program [nama_program]
implicit none
[deklarasi :: variabel, konstanta dll]
[isi_program]
end program [nama_program]
Struktur program Fortran dapat dibagi menjadi tiga bagian:
a. Deklarasi (The declaration section). Bagian ini terdiri dari pernyataan-pernyataan yang tidak dapat dieksekusi yang mendefinisikan nama program, konstanta parameter, dan tipe variabel parameter dalam program.
b. Isi program (The execution section). Bagian ini terdiri dari satu atau lebih pernyataan yang mendeskripsikan langkah perhitungan atau proses yang dilakukan dalam program.
c. Akhir program (The termination section). Bagian ini terdiri dari pernyataan atau kumpulan pernyataan yang menghentikan eksekusi program dan memberitahukan compiler bahwa program telah selesai.
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 5
2.2 Instruksi Output Sederhana dalam Fortran
Misalkan terdapat file data_diri.f90 yang berisi di bawah ini:
Script 1.2 program data_diri
implicit none
character(100) :: nama,nim,jk
nama = "[Nama]"
nim = "[NIM]"
jk = "[Laki-laki/Perempuan]"
write(*,*) "Nama : ", nama write(*,*) "NIM : ", nim
write(*,*) "Jenis Kelamin : ", jk end program data_diri
Program di atas akan menampilkan teks yang berisi nama, nim dan jenis kelamin. Variabel nama, nim, dan jenis kelamin dapat diganti sesuai identitas peserta praktikum. Dalam program di atas, masing-masing pernyataan memiliki penjelasan:
program Awal dari sebuah program dalam Fortran. Yang diikuti dengan nama program.
implicit none Pendeklarasian untuk mematikan fungsi implicit typing pada program.
character(100) :: Mendeklarasikan bahwa variabel memiliki tipe karakter dengan jumlah maksimum (karakter) 100.
[variabel] = ... Variabel dalam program yang memiliki nilai atau operasi tertentu.
write(*,*) Perintah untuk mengeluarkan tampilan pada layar monitor.
end program Akhir dari sebuah program.
Selanjutnya file data_diri.f90 di-compile dengan perintah:
$ gfortran -o data_diri data_diri.f90
Perintah di atas akan menghasilkan sebuah program yang bernama data_diri. Program ini selanjutnya dapat dieksekusi sehingga menampilkan hasil di bawah ini:
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 6
$ data_diri Nama : [Nama]
NIM : [NIM]
Jenis Kelamin : [Laki-laki/Perempuan]
2.3 Pemahaman Jenis Data dan Pendeklarasian Variabel Beberapa jenis data dalam Fortran dan pendeklarasinya:
• Karakter:
o CHARACTER : untuk data berupa string.
• Logika:
o LOGICAL : untuk objek yang mempunyai nilai true atau false.
• Angka:
o INTEGER : untuk bilangan bulat,
o REAL atau DOUBLE PRECISION : untuk bilangan tidak bulat dengan batasan, o COMPLEX : untuk bilangan kompleks.
Berikut adalah contoh pendeklarasian dan inisialisasi data pada Fortran:
Script 1.3 program deklarasi
implicit none
character(LEN=8) :: char = 'Contoh :' integer :: i = 1
integer, parameter :: j = 2 real :: a = 3
double precision :: b = 4 logical :: c = .true.
write(*,*) char
write(*,*) "i =",i,"j =",j write(*,*) "a =",a
write(*,*) "b =",b write(*,*) "c =",c end program deklarasi
Simpan script 1.3 dalam file deklarasi.f90, kemudian compile file tersebut menjadi program deklarasi. Apabila dieksekusi, program deklarasi ini akan menampilkan:
$ deklarasi
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 7
Contoh :
i = 1 j = 2 a = 3.00000000
b = 4.0000000000000000 c = T
2.5 Input / Output Sederhana
write(*,*) Perintah dalam Fortran untuk menampilkan output tak terformat pada layar. Khusus untuk print tidak disarankan karena obsolete print
read(*,*) Perintah untuk meminta masukkan (input) data pada user dari keyboard.
Script 1.4 program operasi_input
implicit none real :: i,j,k,l
write(*,*) "Masukkan nilai i"
read(*,*) i
write(*,*) "Masukkan nilai j"
read(*,*) j k = i*j-2
l = i*(j-2)
write(*,*) "k =", k write(*,*) "l =", l end program operasi_input
Simpan script 1.4 dalam file operasi_input.f90, kemudian compile file tersebut menjadi program operasi_input. Bagaimana tampilan program tersebut setelah di- eksekusi?
2.4 Operator Bilangan dan Operasi Bilangan
Operator yang ada dalam Fortran dan tingkatan perhitungannya :
Operator Precedence Example
user-defined monadic Highest .INVERSE.A
** . 10**4
* Or / . 89*55
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 8
monadic + or - . -4
dyadic + or - . 5+4
// . str1//str2
.GT., >, .LE., <=, etc . A > B
.NOT. . .NOT.Bool
.AND. . A.AND.B
.OR. . A.OR.B
.EQV. or .NEQV. . A.EQV.B
user-defined dyadic Lowest X.DOT.Y
Contoh operasi sederhana pada Fortran dan penggunaan tanda kurung ditunjukkan pada script 1.5 :
Script 1.5 program operasi_hitung
implicit none
integer, parameter :: i = 4, j = 2 integer :: k , l
k = i*j-2 l = i*(j-2)
write(*,*) i,"*", j ,"- 2 = ", k write(*,*) i,"* (", j ,"- 2) = ", l end program operasi_hitung
Simpan script 1.5 dalam file operasi_hitung.f90, kemudian compile file tersebut menjadi program operasi_hitung. Bagaimana tampilan program tersebut setelah di- eksekusi?
3. Kontrol Alur Program
Pada pemrograman bahasa Fortran alur program dikendalikan dengan beberapa cara 3.1 Pernyataan Kondisional (IF ELSE)
Pernyataan kondisional dapat berupa IF… dan IF… THEN….ELSE IF….END IF.
a) Kondisional IF merupakan kondisi yang hanya terdiri dari satu syarat. Biasanya program akan mengenali bila pernyataan itu memenuhi syarat atau tidak memenuhi syarat.
Bentuk umum pernyataan IF : if (logical_expr) then
statement 1 statement 2 ...
end if
block 1
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 9
b) Kondisional IF… THEN….ELSE IF….END IF merupakan bentuk lebih kompleks dari perintah kondisional IF. Bentuk ini digunakan jika dibutuhkan lebih dari dua syarat dalam program.
Bentuk umum pernyataan IF… THEN….ELSE IF….END IF : if (logical_expr_1) then
statement 1 statement 2 . . .
else if (logical_expr_2) then statement 1
statement 2 . . .
else
statement 1 statement 2 . . .
end if
Contoh penggunaan bentuk if ditunjukkan oleh script 1.6. Program didalamnya menghitung nilai y pada saat t. Fungsi y(t) memiliki persamaan seperti dibawah ini:
𝑦(𝑡) = 3𝑡3+ 5 𝑡 ≥ 0
−3𝑡3+ 5 𝑡 < 0
Script 1.6 program fungsi_y
implicit none real :: y ,t
! Program untuk menghitung fungsi y pada saat t write(*,*) "Masukkan nilai t :"
read(*,*) t if ( t >= 0 ) then
y = 3 * t**3 + 5 else
y = -3 * t**3 + 5 end if
write(*,*) "Nilai y pada saat t =", t, "adalah, "
write(*,*) "y =", y end program fungsi_y
Simpan script 1.6 dalam file fungsi_y.f90, kemudian compile file tersebut menjadi program fungsi_y. Apa yang terjadi jika input nilai t, (a) lebih besar dari nol, atau (b) lebih kecil dari nol? Jelaskan apa yang membedakan perhitungan fungsi y pada kondisi (a) dan (b)?
block 1
block 2
block 3
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 10
Contoh aplikasi if else selanjutnya adalah pada script 1.7. Program dalam script ini menggunakan bentuk kondisional untuk mengidentifikasi tingkat eksposure UV berdasarkan nilai indeks-nya. Input program ini adalah nilai indeks UV. Referensi kategori eksposure indeks UV didapat dari WHO (2002).
Script 1.7 program uv_index
implicit none real :: uv
! Perintah untuk memasukkan nilai indeks uv write(*,*) "Masukkan nilai indeks uv :"
read(*,*) uv
! Pilihan kategori indeks uv if ( uv < 2 ) then
write(*,*) "Indeks UV rendah"
else if ( uv >= 3 .and. uv < 6) then write(*,*) "Indeks UV sedang"
else if ( uv >= 6 .and. uv < 8) then write(*,*) "Indeks UV tinggi"
else if ( uv >= 8 .and. uv < 11 ) then write(*,*) "Indeks UV sangat tinggi"
else if ( uv >= 11 ) then
write(*,*) "Indeks UV ekstrem"
end if
end program uv_index
Simpan script 1.7 dalam file uv_index.f90, kemudian compile file tersebut menjadi program uv_index. Bagaimana tampilan program tersebut setelah dieksekusi?
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 11
3.2 Pilihan berganda (select case)
Select case dapat digunakan jika terdapat n kemungkinan yang bisa terjadi, yang masing-masing harus dievaluasi.
Bentuk umum pernyataan select case : [name:] SELECT CASE (case_expr) CASE (case_selector_1) [name]
Statement 1 Statement 2 . . .
CASE (case_selector_2) [name]
Statement 1 Statement 2 . . .
. . .
CASE DEFAULT [name]
Statement 1 Statement 2 . . .
END SELECT [name]
Contoh aplikasi dari select case ditunjukkan pada script 1.8. Program ini merupakan program konversi suhu dari skala Celcius ke dalam beberapa skala temperatur lain (Kelvin, Fahrenheit dan Reamur). Persamaan-persamaan konversi tersebut yaitu:
𝐾𝑒𝑙𝑣𝑖𝑛 = 𝐶𝑒𝑙𝑐𝑖𝑢𝑠 + 273.15 𝐹𝑎ℎ𝑟𝑒𝑛ℎ𝑒𝑖𝑡 = 𝐶𝑒𝑙𝑐𝑖𝑢𝑠 × 9 5⁄ + 32
𝑅𝑒𝑎𝑚𝑢𝑟 = 𝐶𝑒𝑙𝑐𝑖𝑢𝑠 × 4 5⁄
Script 1.8 program konversi_suhu
implicit none
real :: temp_c, temp_k, temp_f, temp_r integer :: option_temp
! Perintah untuk memasukkan nilai temperatur dalam Celcius write(*,*) "Masukkan nilai temperatur dalam Celcius"
read(*,*) temp_c
! Perintah untuk memasukkan pilihan untuk konversi write(*,*) "Pilih konversi suhu: "
write(*,*) "1) Celcius -> Kelvin"
write(*,*) "2) Celcius -> Fahrenheit"
write(*,*) "3) Celcius -> Reamur"
read(*,*) option_temp
! Pilihan konversi
select case (option_temp) case(1)
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 12 temp_k = temp_c + 273.15
write(*,*) "Temperatur pada "
write(*,*) temp_c ,"o C = ", temp_k, "K"
case(2)
temp_f = temp_c * 9. / 5. + 32 write(*,*) "Temperatur pada "
write(*,*) temp_c ,"o C = ", temp_f, "o F"
case(3)
temp_r = temp_c * 4./ 5.
write(*,*) "Temperatur pada "
write(*,*) temp_c ,"o C = ", temp_r, "o Re"
end select
end program konversi_suhu
Simpan script 1.8 dalam file konversi_suhu.f90, kemudian compile file tersebut menjadi program konversi_suhu. Bagaimana tampilan program tersebut setelah di- eksekusi? Apa yang terjadi jika input option_temp diluar pilihan di atas? Apa yang perlu dilakukan agar output program menampilkan pesan error jika input option_temp di luar pilihan tersebut (1-3)?
4. Soal Latihan
1. (Script 1.4/1.5/1.7) Dari sisi meteorologis, arah angin berasal dari mana angin tersebut berhembus (mis. angin timuran berhembus dari timur ke barat). Parameter angin yang diukur umumnya dalam kecepatan dan arah angin. Kenaikan sudut arah angin searah dengan jarum jam, yaitu angin utara 0o, angin timur 90o, angin selatan 180o dan angin barat 270o. Akan tetapi untuk keperluan analisis, terkadang hanya komponen kecepatan angin dalam sumbu x (angin u), atau komponen kecepatan angin dalam sumbu y (angin v) saja yang digunakan. Nilai komponen angin u dan v bisa didapat melalui,
𝑢 = −|𝑉⃗ | sin 𝜙 𝑣 = −|𝑉⃗ | cos 𝜙
Pada persamaan di atas, komponen V merupakan kecepatan angin (m/s) sedangkan φ merupakan arah angin dalam satuan radian (rad). Buatlah program untuk menghitung komponen angin u dan v dengan input,
(a) Ditentukan dalam program (V = 5 m/s dan φ = 30o)
(b) Berasal dari user, V dalam satuan m/s dan φ dalam satuan derajat (o)
ϴ
u v V
MODUL I STRUKTUR PROGRAM, OPERASI BILANGAN, DAN KONTROL ALUR PROGRAM 13
(c) Buatlah program yang bisa menampilkan nama arah mata angin dengan meminta inputan arah angin (φ) dalam satuan derajat!
Catatan :
Sudut dibaca radian dalam Fortran, untuk konversi sudut dari derajat ke radian, 𝑠𝑢𝑑𝑢𝑡 (𝑟𝑎𝑑) = 𝜋 180⁄ ∗ 𝑠𝑢𝑑𝑢𝑡(°)
2. (Script 1.4/1.5/1.7) Temperatur potensial adalah temperatur yang dibutuhkan untuk memindahkan parcel udara kering secara adiabatik jika mengalami kompresi atau ekspansi pada temperatur T dan tekanan P ke tekanan standar Ps (1000 hPa). Temperatur potensial memiliki persamaan,
𝜃 = 𝑇 (𝑃𝑠 𝑃)
𝑅 𝐶𝑝
Dengan: T = Temperatur (K) P = Tekanan (hPa)
Ps = Tekanan Standar (1000 hPa) R = Konstanta gas udara (287 J K-1 kg-1)
Cp = Kapasitas panas spesifik pada tekanan konstan (1004 J K-1 kg-1)
(a) Buatlah program untuk menghitung temperatur potensial dengan meminta inputan temperatur (T) dalam satuan derajat Celcius (oC) dan tekanan (P) dalam satuan milibar (mb) pada user!
(b) Buatlah program untuk menganalisis kestabilan statis dari temperatur potensial nomor (a) dengan ketinggian 10 meter dan 20 meter!
𝑑𝜃
𝑑𝑧> 0 , 𝑠𝑡𝑎𝑡𝑖𝑐𝑎𝑙𝑙𝑦 𝑠𝑡𝑎𝑏𝑙𝑒 𝑑𝜃
𝑑𝑧 = 0 , 𝑠𝑡𝑎𝑡𝑖𝑐𝑎𝑙𝑙𝑦 𝑛𝑒𝑢𝑡𝑟𝑎𝑙 𝑑𝜃
𝑑𝑧< 0 , 𝑠𝑡𝑎𝑡𝑖𝑐𝑎𝑙𝑙𝑦 𝑢𝑛𝑠𝑡𝑎𝑏𝑙𝑒 Source : Buku Holton Hal.53
Daftar Pustaka
Chapman, S.J. (2017): Fortran for Scientists and Engineers. New York, McGraw-Hill Education WHO (2002): Global Solar UV Index, A Practical Guide.
Holton, 2004. Introduction To Dynamic Meteorology 4th. USA : Elsevier