Setelah menyelesaikan mata kuliah Komputer mahasiswa mampu mengembangkan paket program aplikasi mandiri untuk
menyelesaikan masalah keteknikan khususnya Teknik Mesin dengan bahasa FORTRAN
KOMPETENSI DASAR
Mahasiswa dapat membuat membuat program aplikasi modular dalam bentuk fungsi dan subrutin sehingga program aplikasi yang dihasilkan lebih handal, mudah dibaca,
gampang menemukan kesalahan yang terjadi, efektif dan efisien.
INDIKATOR
1. Mahasiswa memiliki pengetahuan
yang mendasar tentang pendeklarasian, penempatan dan pemanggilan sebuah fungsi (function) dan mampu menggunakannya dalam mengembangkan sebuah program aplikasi.
2. Mahasiswa memiliki pengetahuan
yang mendasar tentang pendeklarasian, penempatan dan pemanggilan sebuah subrutin (subroutine) dan mampu menggunakan-nya didalam mengembangkan sebuah program aplikasi.
3. Mahasiswa mampu membedakan
fungsi dan subrutin dan mampu menggunakannya secara
85
8
benar, efektif dan efisien dalam mengembangkan sebuah program aplikasi.
Dalam FORTRAN dikenal adanya fungsi-fungsi tertentu yang telah didefinisikan dan dikenal oleh prosesor FORTRAN sebagai fungsi pustaka (library). Adanya fungsi-fungsi ini sangat membantu dalam penyederhanaan penulisan suatu program FORTRAN. Seiring dengan kompleksitas dari program aplikasi yang dibuat, sering kali kita mengunakan suatu fungsi secara berulang-ulang di dalam sutu program, tetapi fungsi tersebut bukan merupakan fungsi pustaka. Untuk menyederhanakan penulisan program dan mencegah penulisan sekelompok statemen yang dilaksanakan (executable) secara berulang-ulang, kita dapat menggunakan suatu fungsi atau subprogram. Setiap subprogram, yang merupakan “anak program” dengan “progrma induk” (main program), akan berlaku sebagai fungsi pustaka yang telah didefinisikan lebih dahulu.
Suatu subprogram dapat “memanggil” atau dihubungkan dengan program lainnya, dan seterusnya, seperti terlihat dalam gambar 5.1. Subprogram menerima nilai-nilai (disebut argumen) dari suatu program pemanggil (asal), melaklukan perhitungan-perhitungan, dan kemudian mengirim kembali (RETURN) hasil atau hasil-hasil ke program pemanggil. Penggunaan subprogram berfungsi untuk mengurangi kerumitan program dan menyelesaikan masalah-masalah berikut :
1. Algoritma-algoritma penyelesaian dari masalah-masalah yang rumit menjadi sukar dan akibatnya sukar untuk dirancang.
2. Program yang terlalu panjang.
3. Penemuan kesalahan (debugging) dan pembetulannya pada program yang panjang menjadi sulit dilakukan.
4. Dokumentasi yang banyak diperlukan untuk memahami alur program.
Gambar 5.1 Main Program – subprogram dalam FORTRAN
5.1 STATEMEN PROGRAM
Main Program
Subprogram 1 Subprogram 2 Subprogram 3
Subprogram 11 Subprogram 12 Subprogram 21
Statemen PROGRAM digunakan untuk mengidentifikasi bahwa unit program tersebut adalah merupakan suatu program utama dan sekaligus memberikan nama dari program utamannya. Bentuk umum statemen ini adalah :
PROGRAM <nama-program> dimana :
<nama-program> adalah nama dari program utama yang dipilih oleh pembuat program. Bila statemen PROGRAM tidak dituliskan, maka nama dari program utama dianggap bernama MAIN Contoh 5.1 : C234567890 PROGRAM HITUNG A= 20.0 WRITE(*,21) A 21 FORMAT(1X,’NILAI A = ’,F7.2) END
Program tersebut adalah program utama dengan nama HITUNG.
5.2 FUNGSI (FUNCTION)
Fungsi di dalam bahasa FORTRAN terdiri dari 3 macam fungsi, yaitu fungsi pustaka/intrinsic (intrinsic function), fungsi statemen (statement function) dan fungsi eksternal (external function).
A. FUNGSI PUSTAKA (LIBRARY FUNCTION)
Fungsi pustaka (library function) atau fungsi intrinsic (interinsic function) atau disebut juga dengan istilah fungsi standar (standard function) merupakan fungsi yang sudah didefinisikan dan sudah disediakan oleh FORTRAN untuk digunakan. Dengan adanya fungsi ini, programmer secara langsung dapat menggunakan nama fungsi serta argumennya, dan akan langsung diperoleh harga fungsi tersebut (tabel 5.1, 52 dan 53 menunjukkan jenis fungsi pustaka yang tersedia (Built in)). Bentuk statemen fungsi ini adalah :
NAME (<argumen>) dimana :
NAME = nama dari fungsi pustaka (subprogram) yang tersedia <argumen> = besaran yang menentukan harga fungsi tersebut.
Pembatasan-pembatasan dalam penggunaan fungsi pustaka : 1. Nama fungsi tidak dapat ditambah atau dikurangi.
2. Argumen dapat berupa konstanta, variabel, ekspresi atau salah satu anggota fungsi pustaka.
3. Tiap-tiap fungsi mempunyai tipe tertentu yang ditentukan oleh huruf pertama dari namanya.
4. Tipe argumen yang terdapat dalam suatu fungsi dapat tidak sama dengan tipe fungsinya. Tipe argumen tergantung dari jenisnya.
5. Tipe hasil fungsi dalam suatu ekspresi sebaiknya sama dengan tipe ekspresinya.
6. Dalam sebuah statemen, tiap fungsi boleh digunakan lebih dari satu kali. TABEL 5.1 FUNGSI KONVERSI TIPE
FUNGSI
PUSTAKA FUNGSI ARGUMENTIPE TIPE HASIL FUNGSI
INT(X) IFIX(X) IDINT(X) REAL(X) FLOAT(X) ICHAR(X) CHAR(X) SNGL(X) DBLE(X)
CHARINT sesuai kode ASCII INTCHAR sesuai kode ASCII
REAL*4 atau INTEGER REAL*4
REAL*8
INTEGER atau REAL*4 INTEGER
CHARACTER INTEGER REAL*8
INT, REAL*4, REAL*8
INTEGER INTEGER INTEGER REAL*4 REAL*4 INTEGER CHARACTER REAL*4 REAL*8
TABEL 5.2 FUNGSI PEMBULATAN
FUNGSI
PUSTAKA FUNGSI ARGUMENTIPE TIPE HASIL FUNGSI
AINT(X) DINT(X) ANINT(X) DNINT(X) NINT(X) IDNINT(X)
pembulatan kebawah (truncated) pembulatan kebawah (truncated) pembulatan terdekat (rounded) pembulatan terdekat (rounded) pembulatan terdekat (rounded) pembulatan terdekat (rounded)
REAL*4 REAL*8 REAL*4 REAL*8 REAL*4 REAL*8 REAL*4 REAL*8 REAL*4 REAL*8 INTEGER INTEGER
TABEL 5.3 FUNGSI PUSTAKA YANG LAIN
FUNGSI
PUSTAKA FUNGSIARTI HASILTIPE
FUNGSI
DIMENSI
(A) ARGUMENTIPE ARGUMENJUMLAH
EXP(A) ALOG(A) ALOG10(A) TAN(A) TANH(A) ATAN(A) SIN(A) SINH(A) eA log eA log 10A tangen A tangen hiperbolik arctan A sin A Sin hiperbola REAL REAL REAL REAL REAL REAL REAL REAL TANPA DIM TANPA DIM TANPA DIM RADIAN* RADIAN* TANPA DIM RADIAN* RADIAN* REAL REAL REAL REAL REAL REAL REAL REAL SATU SATU SATU SATU SATU SATU SATU SATU
ASIN COS(A) COSH(A) ACOS SQRT(A) Arc sinus cos A Cos hiperbolik Arc cosinus A REAL REAL REAL REAL REAL TANPA DIM RADIAN* RADIAN* TANPA DIM TANPA DIM REAL REAL REAL REAL REAL SATU SATU SATU SATU SATU TABEL 5.3 (LANJUTAN) FUNGSI PUSTAKA ARTI FUNGSI TIPE HASIL FUNGSI DIMENSI (A) TIPE ARGUMEN JUMLAH ARGUMEN ABS(A) IABS(A) AMAXO(A1,…) AMAX1(A1,…) MAXO(A1,…) MAXI(A1,…) AMINO(A1,…) AMINI(A1,…) MINO(A1,…) MINI(A1,…) FLOAT(IA) IFIX(A) SIGN(A1,A2) ISIGN(IA1,IA2) MOD(A1,A2) AMOD(A1,A2) DMOD(A1,A2) EOF(X) |A| |A| Max. A Max. A Max. A Max. A Min. A Min. A Min. A Min. A Harga real A Harga int. A Tanda A1=A2 Tanda IA1=IA2 Sisa pembagian Sisa pembagian Sisa pembagian End of file REAL INTEGER REAL REAL INTEGER INTEGER REAL REAL INTEGER INTEGER REAL INTEGER REAL INTEGER INTEGER REAL*4 REAL*8 LOGICAL TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM TANPA DIM REAL INTEGER INTEGER REAL INTEGER REAL INTEGER REAL INTEGER REAL INTEGER REAL REAL INTEGER INTEGER REAL*4 REAL*8 INTEGER SATU SATU DUA DUA DUA DUA DUA DUA DUA DUA SATU SATU DUA DUA DUA DUA DUA * 180O = Π radian 180 14159 . 3 1o = o radian 2958 , 57 1 1 = Contoh 5.2 : C234567890
WRITE(*,’(1X,A,\)’) ’BERAPA DERAJAT?’ READ (*,’(F6.2)’) X1 X = X1/57.2958 Y1 = SIN(X) Y2 = COS(X) Y3= TAN(X) WRITE(*,*) WRITE(*,’(1X,A,F6.2,A,F6.5)’)’SIN’,X1,’=’,Y1 WRITE(*,’(1X,A,F6.2,A,F6.5)’)’COS’,X1,’=’,Y2 WRITE(*,’(1X,A,F6.2,A,F6.5)’)’TAN’,X1,’=’,Y3 END
Bila program tersebut daijalankan, akan didapatkan hasil :
SIN 60.00 = .866603 CON 60.00 = .500000 TAN 60.00 = 1.73
B. FUNGSI STATEMEN (STATEMENT FUNCTION)
Fungsi ini berfungsi untuk mendefinisikan sebuah fungsi dalam bentuk sebuah statemen tunggal. Bentuk umum fungsi ini seperti berikut ini :
<fname> ([<farg.> [, <farg.>]… ]) = <ekspresi> dimana :
<fname> adalah nama dari fungsi statemen yang didefinisikan.
<farg.> adalah nama dari formal argmen fungsi yang berupa data yang diberikan kepada fungsi tersebut.
<ekspresi> adalah suatu ungkapan statemen fungsi yang didefinisikan. Fungsi statement harus diletakkan sebelum executable statement, sedang fungsi statemen itu sendiri tidak termasuk sebagai executable statement, karena tidak dieksekusi untuk menghasilkan sesuatu, tetapi hanya didefinisikan saja. Executable statement yang menggunakan fungsi ini yang akan dieksekusi.
Contoh 5.3 :
C234567890
FAH(C)= 1.8 * C + 32
WRITE(*,*)’---‘ WRITE(*,*) ‘CELCIUS FAHRENHEIT’ WRITE(*,*)’---‘ C = 0.0 5 WRITE(*,’(1X,F7.2,4X,F10.2)’) C, FAH(C) IF(C .LT. 5.0) THEN C = C + 0.5 GOTO 5 ENDIF WRITE(*,*)’---‘ END
Tampak bahwa FAH adalah merupakan fungsi C yang besarnya ditunjukkan dalam ungkapan 1.8 * C + 32. Bila program ini dijalankan akan didapatkan hasil :
CELCIUS FAHRENHEIT .00 32.00 .50 32.90 1.00 33.80 1.50 34.70 2.00 35.60 2.50 36.50 3.00 37.40 3.50 38.30 fungsi statement
4.00 39.20
4.50 40.10
5.00 41.00
---Fungsi statement yang didefinisikan adalah sebagai berikut :
FAH(C)= 1.8 * C + 32
Nilai dari Fahrenheit yang ditampilkan dipergunakan fungsi statemen yang sudah didefinisikan tersebut, sebagai berikut :
5 WRITE(*,’(1X,F7.2,4X,F10.2)’) C,FAH(C) Contoh 5.4 : C234567890 FAH(C)= 1.8 * C + 32 WRITE(*,*)’---‘ WRITE(*,*) ‘CELCIUS FAHRENHEIT’ WRITE(*,*)’---‘ C = 0.0 5 WRITE(*,’(1X,F7.2,4X,F10.2)’)CELCIUS, FAH(CELCIUS) IF(CELCIUS .LT. 5.0) THEN CELSIUS = CELSIUS + 0.5 GOTO 5 ENDIF WRITE(*,*)’---‘ END
Hasil dari program 5.3 dan 5.4 adalah sama, walaupun menggunakan nama argumen yang berbeda pada saat digunakan.
C. FUNGSI EKSTERNAL (EXTERNAL FUNCTION)
Fungsi eksternal berfungsi untuk mengidentifikasi suatu unit program sebagai suatu fungsi eksternal. Bentuk umum :
<type> FUNCTION <fnama> ([<farg>[,<farg>]…]) dimana :
<type> adalah tipe dari fungsi eksternal, dapat berupa : INTEGER
INTEGER*2
Ungkapan dari fungsi statement Argumen fungsi statement
Nama dari fungsi statemen
Nama argumen untuk fungsi FAH Nama dari fungsi statement
Nilai dari celcius
Nama argumen pada saat digunakan
Nama argumen pada saat didefinisikan
INTEGER*4 REAL REAL*4 REAL*8 DOUBLE PRECISION LOGICAL LOGICAL*2 LOGICAL*4
<fnama> adalah nama yang dipilih untuk fungsi eksternal. <farg> adalah nama dari argumen fungsi eksternal.
Contoh 5.5 :
C234567890
INTEGER*4 F, FAKTORIAL
WRITE(*,’(1X,A,\)’) ‘BERAPA FAKTORIAL ?’ READ(*,’(BN,I3) J
F = FAKTORIAL(J)
WRITE(*,’(/,1X,I3,A,I10)’)J,’FAKTORIAL =’,F END
C
C FUNGSI EKSTERNAL MENGHITUNG FAKTORIAL INTEGER*4 FUNCTION FAKTORIAL(N) FAKTORIAL = 1
DO 500 I=2,N
500 FAKTORIAL = FAKTORIAL * I END
Bila program ini dijalankan, akan didapatkan hasil :
BERAPA FAKTORIAL ? 12 12 FAKTORIAL = 479001600
5.2 SUBRUTIN (SUBROUTINE)
Subroutine berfungsi untuk mengidentifikasi bahwa suatu unit program adalah suatu rutin bagian, serta sekaligus memberikan nama dan argumen-argumen. Bentuk umum dari pernyataan SUBROUTINE adalah sebagai berikut :
SUBROUTINE <nama-subroutine> [<farg>[,<farg>]…])] Dimana :
<nama-subroutine> adalah nama dari rutin bagian
<farg> adalah nama dari argumen, atau disebut juga dengan istilah dummy argument.
Beberapa ketentuan dari subroutine adalah :
argumen fungsi eksternal
mendefinisikan tipe dari fungsi eksternal berupa INTEGER 4 byte
nama fungsi eksternal adalah FAKTORIAL
mendefinisikan fungsi eksternal di unit program utama dengan tipe sama
1. Subroutine merupakan unit program tersendiri yang diawali dengan statemen SUBROUTINE dan diakhiri dengan statemen END atau RETURN serta dipergunakan oleh unit program yang lain dengan statemen CALL PROGRAM UTAMA . CALL A(X,HASIL) . . END SUBROUTINE A(X,Y) . . . END
2. Subroutine dapat berisi statemen-statemen apapun kecuali statemen PROGRAM, statemen SUBROUTINE yang lainnya atau statemen FUNCTION.
3. Nama argumen tidak boleh tampak di statemen COMMON, EQUIVALENCE< INTRINSIC atau DATA
4. Argumen sesungguhnya yang tampak di statemen CALL harus sesuai urutannya, jumlahnya dan tipenya dengan dummy argument yang tampak di statemen SUBROUTINE. Antara nama argumen sesungguhnya dan dummy argument boleh sama ataupun tidak.
CALL X(A, B, I1, C1, J1)
SUBROUTINE X(A, B, I1, C1, J1)
5. Didalam suatu subroutine dapat memanggil subroutine yang lainnya PROGRAM UTAMA CALL A(…) CALL C(…) CALL B(…) END SUBROUTINE A(…) CALL B(…) END SUBROUTINE B(…) END argumen-argumen subroutine Nama subroutine
SUBROUTINE C(…) END
6. Subroutine dapat tidak mengandung dummy argument, yang berarti tidak ada data yang dikirim ke subroutine dan tidak ada hasil yang dikirim balik ke pemanggil subroutine Contoh 5.6 : C234567890 CALL CETAK WRITE(*,*)’FORTRAN CALL CETAK END C
C SUBROUTINE TANPA DUMMY ARGUMENT SUBROUTINE CETAK
WRITE(*,*)’---‘ END
Bila program ini dijalankan, akan didapat hasil :
---FORTRAN ---Contoh 5.7 : C234567890 WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) X CALL HITUNG(X) END C
C SUBROUTINE DG DUMMY ARGUMENT
C TIDAK MENGEMBALIKAN NILAI KE PEMANGGIL SUBROUTINE HITUNG(X)
Y=X**2-2*X
WRITE(*,’(1X,A,F8.2)’) ‘Y= ‘,Y END
Bila program ini dijalankan, akan didapat hasil :
NILAI DARI X ? 5.0 Y = 15.00
Tampak pada program utama, nilai variabel X dikirimkan ke rutin bagian HITUNG. Pada rutin bagian HITUNG data yang diterima digunakan untuk menghitung nilai Y. Nilai ini tidak dikirim balik ke program pemanggil tetapi di rutin bagian langsung ditampilkan.
PROGRAM UTAMA SUBROUTINE WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) X CALL HITUNG(X) END SUBROUTINE HITUNG(X) Y=X**2-2*X
WRITE(*,’(1X,A,F8.2)’) ‘Y= ‘,Y END Contoh 5.8 : C234567890 CALL HITUNG(Y) WRITE(*,’(1X,A,F8.2)’)’Y= ’, Y END C
C SUBROUTINE DG DUMMY ARGUMENT C MENGEMBALIKAN NILAI KE PEMANGGIL C SUBROUTINE HITUNG(Y) WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) X Y=X**2-2*X END
Bila program ini dijalankan, akan didapat hasil :
NILAI DARI X ? 5.0 Y = 15.00
Tampak pada program utama, memanggil rutin bagian HITUNG untuk mendapatkan nilai Y. sedangkan pada rutin bagian HITUNG terdapat proses meminta data X yang digunakan untuk menghitung nilai Y. Nilai ini kemudian dikirimkan ke program pemanggil untuk ditampilkan.
PROGRAM UTAMA SUBROUTINE CALL HITUNG(Y) WRITE(*,’(1X,A,F8.2)’)’Y= ’, Y END SUBROUTINE HITUNG(Y) WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) X
- mengambil nilai dari pemanggil - tidak mengembalikan nilai ke pemanggil
Y=X**2-2*X END Contoh 5.9 C234567890 WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) X CALL HITUNG(X) WRITE(*,’(1X,A,F8.2)’)’Y= ’, X END C
C SUBROUTINE MENGHITUNG Y HASILNYA C DITERUSKAN KE PROGRAM UTAM
C
SUBROUTINE HITUNG(Y) Y=X**2-2*X
END
Bila program ini dijalankan, akan didapat hasil :
NILAI DARI X ? 5.0 Y = 15.00
Tampak pada program utama, nilai X dikirimkan sebagai argumen untuk rutin bagian HITUNG dan di tutin HITUNG ini digunakan untuk menghitunh Y. Hasil nilai Y di rutin bagian juga diletakkan pada variabel X yan gselanjutnya dikirim balik ke program pemanggil sebagai hasilnya.
PROGRAM UTAMA SUBROUTINE WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) X CALL HITUNG(X) WRITE(*,’(1X,A,F8.2)’)’Y= ’, X END SUBROUTINE HITUNG(Y) Y=X**2-2*X END
Contoh 5.10 : C234567890 WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) A CALL HITUNG(A,B) WRITE(*,’(1X,A,F8.2)’)’Y= ’, B END C C SUBROUTINE MENGHITUNG C SUBROUTINE HITUNG(X,Y) Y=X**2-2*X END
Bila program ini dijalankan, akan didapat hasil :
NILAI DARI X ? 5.0 Y = 15.00
PROGRAM UTAMA SUBROUTINE WRITE(*,’(1X,A,\)’)’NILAI DARI X ?’ READ(*,’(F5.2)’) A CALL HITUNG(A,B) WRITE(*,’(1X,A,F8.2)’)’Y= ’, B END SUBROUTINE HITUNG(X,Y) Y=X**2-2*X END
5.3 PERBANDINGAN FUNGSI DAN SUBRUTIN
Secara umum subprogram FUNCTION digunakan untuk menghitung suatu nilai tunggal, sedangkan subprogram SUBROUTINE digunakan untuk menghitung beberapa nilai atau melakukan tugas-tugas (misalnya, penukaran dua nilai). Kita perhatikan bahwa apapun yang dapat dikerjakan oleh subprogram FUNCTION dapat dikerjakan oleh subprogram SUBROUTINE. Seballiknya, kebanyakan tugas-tugas yang di8kerjakan oleh subprogram SUBROUTINE dapat juga dikerjakan
oleh subprogram FUNCTION. Misalnya, kita menuliskan sebuah subprogram FUNCTION untuk menukar nilai-nilai X dan Y :
Contoh 5.11 C234567890 FUNCTION EXCHG(X,Y) T = X X = Y Y = T RETURN END
Perhatikan bahwa nama FUNCTION secara sebarang diberi nilai karena ia harus didefinisikan di subprogram. Karena komunikasi melalui parameter, maka nilai X dan Y akan ditukar di program utama. Tetapi, pembentukan ini agak dibuat-buat dan tidak wajar. Berikut ini didaftarkan perbedaan utama antara subprogram SUBROUTINE dan FUNCTION :
1. Tidak ada nilai yang dikaitkan dengan NAMA suatu subrutin, sedangkan NAMA suatu subprogram FUNCTION harus memiliki suatu nilai, numerik atau logika. Karena itu, NAMA suatu subprogram FUNCTION harus mengikuti perjanjian tipe, dan harus didefinisikan di subprogram.
2. SUBROUTINE hanya boleh dipanggil oleh pernyataan pemanggil khusus yaitu CALL NAMA, sedangkan suatu subprogram FUNCTION boleh digunakan dalam cara sama seperti fungsi pustaka, yaitu dalam pernyataan hitungan dan sebagainya.
3. Subprogram FUNCTION harus memiliki paling sedikit satu argumen, sedangkan SUBROUTINE tidak perlu mempunyai satupun.
4. karena subprogram FUNCTION menghitung paling sdikit satu nilai, ia harus mengandung pernyataan RETURN. Subprogram SUBROUTINE tidak selalu memerlukan pernyataan RETURN.
SOAL-SOAL YANG DIPECAHKAN
1. Temukan kesalahan, jika ada, pada tiap sub program berikut :
A) C234567890 FUNCTION ADD(X,Y,Z) Z = X + Y RETURN END B) C234567890 SUBROUTINE AA(X,Y,Z) Z = X + Y RETURN END Jawab :
a. Nama fungsi ADD harus diberikan suatu nilai di subprogram, dan ternyata belum diberikan
b. Tidak terdapat kesalahan (nama subprogram tidak perlu diberikan suatu nilai.
2. Temukan keluaran program berikut yang menggunakan fungsi pernyataan (statement function) 3. A) C234567890 JF(M)=M**2-3*M+4 K=2 L=JF(K+2) M=JF(L-3*K)+K WRITE(*,10) K, L, M 10 FORMAT(1X,3(I10,2X)) STOP END B) C234567890 F(X,Y)=A*X+B*Y X = 2.0 Y = 3.0 A = 4.0 B = 5.0 C=F(6.0,7.0) WRITE(*,10)C 10 FORMAT(1X,F10.2) STOP END Jawab :
a. Baris pertama mendefinisikan fungsi JF(M) = M2 - 3M + 4. Baris kedua
mengisikan 2 ke K. Dengan baris tiga dan empat : L JF(2+2) = JF(4) = 42-3.4+4 = 8
M JF(8-3▪2)+2 = JF(2)+2 = (22-3▪2+4)+2 = 4
Karena 2,8 dan 4 akan dicetak pada satu baris, masing-masing dalam suatu medan selebar 8 digit.
b. Dengan baris dua sampai lima, X,Y,A,B diisi masing-masing 2,3,4,5. Ingat bahwa X,Y dalam F(X,Y) adalah perubah boneka (dummy variable) dan tidak mempunyai kaitan terhadap nilai-nilai X dan Y di program. Secara menjenis, dalam penghitungan C memakai baris enam kita masukkan 6 untuk nilai X dan 7 untuk nilai Y di F(X,Y), menggunakan nilai-nilai A dan B diprogram. Jadi,
C 4▪6+5▪7 = 59
Akubatnya, akan dicetak 59.00 rata kanan pada 10 kolom yang disediakan.
4. Tulislah suatu subprogram SUBROUTINE yang menghitung saldo bulanan yang baru suatu rekening giro, misal berbentuk :
BANK(BAL, DEP, M, CK, N) Dimana :
BAL menyatakan saldo bulanan rekening giro
DEP adalah suatu larik yang mendaftarkan M setoran untuk bulan tersebut.
CK adalah suatu larik yang mendaftar pembayaran N buah cek selama bulan tersebut.
Anggap terdapat biaya pelayanan, SC, sebesar Rp. 1000 tiap bulan dan Rp. 500 untuk setiap cek dan Rp. 250 untuk setiap setoran. Anggap juga DEP dan CK tidak pernah melebihi 100 elemen.
Kita cukup menambahkan setoran dan mengurangkan cek dan biaya pelayanan. Tetapi harus diperhatikan juga kasus dimana M dan/atau N nol. Sub progra tersebut adalah sebagai berikut :
C234567890
SUBROUTINE BANK(BAL, DEP, M, CK, N) DIMESION DEP(100), CK(100) IF (M .EQ. 0) GOTO 10 DO 100 K = 1, M BAL = BAL+DEP(K) 100 CONTINUE 10 IF (N .EQ. 0) GOTO 20 DO 200 K =1, N BAL = BAL –CK(K) 200 CONTINUE 20 SC = 1000.0+M*500.0+N*250.0 BAL = BAL – SC RETURN END SOAL-SOAL LATIHAN
1. Andaikan diberikan subprogram berikut :
C234567890 FUNCTION SUM(X,Y,Z) SUM=X+Y+Z Y= X+Y Z=Y+Z X=Z+X RETURN END C234567890 SUBROUTINE ADD(X,Y,Z,TOAL) Y=X+Y Z=Y+Z X=Z+X TOTAL=X+Y+Z RETURN END
Temukan keluaran ruas program :
C234567890 A=1.0 B=2.0 C=3.0 AMOUNT=SUM(A,B,C) CALL ADD(A,B,C,GT) WRITE(*,10)A,B,C,AMOUNT,GT 10 FORMAT(1X,5(F4.1, 2X)) END
2. Andaikan A, B, C, d adalah larik dimnensi satu yang disimpan dimemori, masing-masing dengan 100,50,75, dan 200 elemen. Andaikan L dan K juga dimemori dan 5≤L≤75 dan L<K≤200. Tuliskan ruas FORTRAN untuk menghitung : K L L L L D D D D B B B B c C C C A A A A a + + + + + + + + + + + + + + + + + + ... d. ... . ... C b. ... . 2 1 36 24 23 22 8 5 2 77 19 17 15 PRAKTIKUM
1. Tulislah beberapa program FORTRAN berikut, jalankan, amati prosesnya dan simpan dengan nama berbeda.
C234567890 PROGRAM LAT5_1A WRITE(*,’(1X,A,\)’)’AKAR BERAPA?’ READ(*,’(BN,F8.2)’) X Y=AKAR(X) WRITE(*,10)’AKAR’,X,’=’,Y 10 FORMAT(/,1X,A,F8.2,A,F11.5) END
C FUNGSI EKSTERNAL MENGHITUNG AKAR C FUNCTION AKAR(Q) ALAMA = 1.0 999 ABARU=(ALAMA+Q/ALAMA)/2.0 IF(ABS(ALAMA-ABARU).GT.0.00001) THEN ALAMA=ABARU GOTO 999 ENDIF AKAR=ABARU END
C FUNGSI EKSTERNAL MENGHITUNG NILAI C ABSOLUT
C
FUNCTION ABS(X) IF(X .LT. O.) THEN ABS=-X ELSE ABS=X ENDIF END C234567890 PROGRAM LAT5_1B REAL*8 F1 WRITE(*,’(1X,A,\)’)’BERAPA FAKTORIAL?’ READ(*,’(BN,F8.2)’) J CALL FAKTORIAL(J,F1) WRITE(*,10)J,’FAKTORIAL = ‘, F1) 10 FORMAT(/,1X,I3,A,D20.15) END
C FUNGSI EKSTERNAL MENGHITUNG FAKTORIAL C SUBROUTINE FAKTORIAL(N,F) REAL*8 F F = 1.0 DO 500 I=2,N 500 F = F*I END PROGRAM LAT5_1C C234567890 DIMENSIO X(1000), SD(100), RATA(100) WRITE(*,’(1X,A,\)’)’BERAPA KELAS?’ READ(*,’(BN,I2) KELAS WRITE(*,*)
C---MEMASUKKAN DATA DAN HITUNG SD DO 1 K=1, KELAS
CALL BACA(K,X,N)
CALL SDEV(N,X,SD(K), RATA(K)) 1 CONTINUE
C--- CETAK HASIL
WRITE(*,20)’**KELAS KE‘,NOURUT,’**’ 20 FORMAT(1X,A,I2,A)
WRITE(*,*)
WRITE(*,21)’ JUMLAH DATA?’ 21 FORMAT(1X,A,\) READ(*,’(BN,I3)’) N DO 1000 I=1,N WRITE(*,22)’DATA KE’,I,’?’ 22 FORMAT(1X,A,I2,A) READ(*,’(F6.2)’) X(I) 1000 CONTINUE END
DO 2 K=1, KELAS WRITE(*,*)
WRITE(*,10)’HASIL KELAS KE:’,K WRITE(*,11)’---‘
WRITE(*,12)’RATA-RATA NILAI =’,RATA(K) WRITE(*,13)’STANDARD DEVIASI=’,SD(K) 10 FORMAT(1X,A,I2) 11 FORMAT(1X,A) 12 FORMAT(1X,A,F6.2) 13 FORMAT(1X,A,F6.2) 2 CONTINUE END
C --- RUTIN MEMASUKKAN DATA SUBROUTINE BACA(NOURUT,X,N) DIMENSION X(100)
WRITE(*,*)
C---RUTIN STANDAR DEVIASI SUBROUTINE SDEV(N,X,SD,RATA) TOTAL=0.0 DO 2000 I=1,N TOTAL=TOTAL+X(I) 2000 CONTINUE RATA=TOTAL/N S1 = 0.0 DO 2100 I=1,N S1=S1+(X(I)-RATA)**2 2100 CONTINUE SD= SQRT(S1/N) END PROGRAM LAT5_1D C234567890 REAL K1,K2,K3,K4 N=1000 H=0.001 Y0=10.7 Y=Y0 WRITE(*,50) 50 FORMAT(‘’,6X,’R-K’,10X,’HASIL’) DO 800 I=1,N-1 T=H*FLOAT(I) K1=H*F(T,Y) K2=H*F(T+H/2.0,Y+K1/2.0) K3=H*F(T+H/2.0,Y+K2/2.0) K4=H*F(T+H,Y+K3) Y=Y+(K1+2.0*K2+2.0*K3+K4)/6.0 WRITE(*,700)t,y 700 FORMAT(‘’,2x,f10.6,4x,f10.4) 800 CONTINUE END C C
REAL FUNCTION F(T,Y) A=1.9 B=5.2 C=1.8 F=-(B/A)*Y-(C/A) RETURN END
2. Buatlah program untuk menyelesaikan persakaan y’’(t)+Dy’(t)+4π2f
02y(t)=0
dengan d=10.0, f0=1.0 dengan h=0.01. penyelesaian y’’(t)=f(t,y(t),y’(t))
dilakukan dengan substitusi z(t)=y’(t), yang memberikan z’(t)=f(t,y(t),y’(t))=f(t,y(t),z(t)) dan y’(t)=z(t)=g(t,y(t),y’(t))=g(t,y(t),z(t).
3. suatu pertumbuhan penduduk dalam suatu daerah dinyatakan dalam persamaan diferensial 721 . 1 BN aN dt dN = −
a dan B adalah suatu konstanta. Jika harga a=0.9 dan B=0.0056 serta N(t=0)=100 maka carilah N(t) secara numerik.
0 4 ) 1 01 . 0 ( 3 2 2 2 2 2 = + − + + θ θ θ π θ θ o f dt d D dt d
dimana D adalah redaman (D=0.5), fo adalah frekuensi diri silinder (fo=2 Hz). Apabila pada saat t=0 θ=π/2 dan dθ/dt=0 maka carilah θ(t) secara numerik.