Anda di halaman 1dari 19

STANDAR KOMPETENSI

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

8 85

Pemrograman Komputer Bahasa FORTRAN

86

benar, efektif dan efisien sebuah program aplikasi.

dalam

mengembangkan

Dalam FORTRAN dikenal adanya fungsi-fungsi tertentu yang telah didefinisikan dan dikenal oleh prosesor FORTRAN sebagai fungsi pustaka (library). Adanya fungsifungsi 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 nilainilai (disebut argumen) dari suatu program pemanggil (asal), melaklukan perhitunganperhitungan, 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.
Main Program Subprogram 1 Subprogram 2

Subprogram 3

Subprogram 11

Subprogram 12

Subprogram 21

Subprogram 211

Subprogram 212

Gambar 5.1 Main Program subprogram dalam FORTRAN 5.1 STATEMEN PROGRAM

Pemrograman Komputer Bahasa FORTRAN

87

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 nama program utama 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.

Pemrograman Komputer Bahasa FORTRAN

88

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 INT(X) IFIX(X) IDINT(X) REAL(X) FLOAT(X) ICHAR(X) CHAR(X) SNGL(X) DBLE(X) FUNGSI TIPE ARGUMEN REAL*4 atau INTEGER REAL*4 REAL*8 INTEGER atau REAL*4 INTEGER CHARACTER INTEGER REAL*8 INT, REAL*4, REAL*8 TIPE HASIL FUNGSI INTEGER INTEGER INTEGER REAL*4 REAL*4 INTEGER CHARACTER REAL*4 REAL*8

CHARINT sesuai kode ASCII INTCHAR sesuai kode ASCII

TABEL 5.2 FUNGSI PEMBULATAN


FUNGSI PUSTAKA AINT(X) DINT(X) ANINT(X) DNINT(X) NINT(X) IDNINT(X) FUNGSI pembulatan kebawah (truncated) pembulatan kebawah (truncated) pembulatan terdekat (rounded) pembulatan terdekat (rounded) pembulatan terdekat (rounded) pembulatan terdekat (rounded) TIPE ARGUMEN REAL*4 REAL*8 REAL*4 REAL*8 REAL*4 REAL*8 TIPE HASIL FUNGSI REAL*4 REAL*8 REAL*4 REAL*8 INTEGER INTEGER

TABEL 5.3 FUNGSI PUSTAKA YANG LAIN


FUNGSI PUSTAKA EXP(A) ALOG(A) ALOG10(A) TAN(A) TANH(A) ATAN(A) SIN(A) SINH(A) ARTI FUNGSI eA log eA log 10A tangen A tangen hiperbolik arctan A sin A Sin hiperbola TIPE HASIL FUNGSI REAL REAL REAL REAL REAL REAL REAL REAL DIMENSI (A) TANPA DIM TANPA DIM TANPA DIM RADIAN* RADIAN* TANPA DIM RADIAN* RADIAN* TIPE ARGUMEN REAL REAL REAL REAL REAL REAL REAL REAL JUMLAH ARGUMEN SATU SATU SATU SATU SATU SATU SATU SATU

Pemrograman Komputer Bahasa FORTRAN

89

ASIN COS(A) COSH(A) ACOS SQRT(A) FUNGSI PUSTAKA 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)

Arc sinus cos A Cos hiperbolik Arc cosinus A ARTI FUNGSI |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 REAL REAL REAL REAL TIPE HASIL FUNGSI REAL INTEGER REAL REAL INTEGER INTEGER REAL REAL INTEGER INTEGER REAL INTEGER REAL INTEGER INTEGER REAL*4 REAL*8 LOGICAL

TANPA DIM RADIAN* RADIAN* TANPA DIM TANPA DIM DIMENSI (A) 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 REAL REAL REAL REAL TIPE ARGUMEN REAL INTEGER INTEGER REAL INTEGER REAL INTEGER REAL INTEGER REAL INTEGER REAL REAL INTEGER INTEGER REAL*4 REAL*8 INTEGER

SATU SATU SATU SATU SATU JUMLAH ARGUMEN SATU SATU DUA DUA DUA DUA DUA DUA DUA DUA SATU SATU DUA DUA DUA DUA DUA

TABEL 5.3 (LANJUTAN)

* 180O = radian 1 3.14159 o radian 1o = 1 = 57,2958 180 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 :


BERAPA DERAJAT? 60

Pemrograman Komputer Bahasa FORTRAN SIN 60.00 = .866603 CON 60.00 = .500000 TAN 60.00 = 1.73

90

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 :
fungsi statement 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

Pemrograman Komputer Bahasa FORTRAN 4.00 39.20 4.50 40.10 5.00 41.00 ---------------------------

91

Fungsi statement yang didefinisikan adalah sebagai berikut :


FAH(C)= 1.8 * C + 32 Ungkapan dari fungsi statement Argumen fungsi statement Nama dari fungsi statemen

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) Nama argumen untuk fungsi FAH Nama dari fungsi statement Nilai dari celcius Nama argumen pada saat didefinisikan

Contoh 5.4 :

C234567890 FAH(C)= 1.8 * C + 32 Nama argumen pada saat WRITE(*,*)--------------------------- digunakan 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

Pemrograman Komputer Bahasa FORTRAN

92

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 :
mendefinisikan fungsi eksternal di unit program utama dengan tipe sama

C234567890 INTEGER*4 F, FAKTORIAL WRITE(*,(1X,A,\)) BERAPA FAKTORIAL ? READ(*,(BN,I3) J memanggil fungsi eksternal F = FAKTORIAL(J) WRITE(*,(/,1X,I3,A,I10))J,FAKTORIAL =,F END mendefinisikan tipe dari fungsi eksternal C berupa INTEGER 4 byte C FUNGSI EKSTERNAL MENGHITUNG FAKTORIAL INTEGER*4 FUNCTION FAKTORIAL(N) FAKTORIAL = 1 argumen fungsi eksternal DO 500 I=2,N nama fungsi eksternal adalah 500 FAKTORIAL = FAKTORIAL * I FAKTORIAL 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 :

Pemrograman Komputer Bahasa FORTRAN

93

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

argumen-argumen subroutine Nama subroutine

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

Pemrograman Komputer Bahasa FORTRAN

94

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.

Pemrograman Komputer Bahasa FORTRAN

95

PROGRAM UTAMA WRITE(*,(1X,A,\))NILAI DARI X ? READ(*,(F5.2)) X CALL HITUNG(X) END

SUBROUTINE

- mengambil nilai dari pemanggil - tidak mengembalikan nilai ke pemanggil 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 CALL HITUNG(Y) WRITE(*,(1X,A,F8.2))Y= , Y END SUBROUTINE HITUNG(Y) WRITE(*,(1X,A,\))NILAI DARI X ? READ(*,(F5.2)) X SUBROUTINE

Pemrograman Komputer Bahasa FORTRAN

96

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 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 SUBROUTINE

Pemrograman Komputer Bahasa FORTRAN

97

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 WRITE(*,(1X,A,\))NILAI DARI X ? READ(*,(F5.2)) A CALL HITUNG(A,B) WRITE(*,(1X,A,F8.2))Y= , B END

SUBROUTINE

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 tugastugas yang di8kerjakan oleh subprogram SUBROUTINE dapat juga dikerjakan

Pemrograman Komputer Bahasa FORTRAN

98

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 dibuatbuat 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

Pemrograman Komputer Bahasa FORTRAN

99

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-32)+2 = JF(2)+2 = (22-32+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 46+57 = 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.

Pemrograman Komputer Bahasa FORTRAN

- 100

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

Pemrograman Komputer Bahasa FORTRAN

- 101

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 5L75 dan L<K200. Tuliskan ruas FORTRAN untuk menghitung : a. A15 + A17 + A19 + ... + A77 b. C 2 +C 5 + C8 + ... + C L c. B22 + B23 + B24 + ... + B36 d. DL + DL +1 + DL + 2 + ... + DK

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 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 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

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

Pemrograman Komputer Bahasa FORTRAN


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(*,*) 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

- 102

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

2. Buatlah program untuk menyelesaikan persakaan y(t)+Dy(t)+42f02y(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 dN = aN BN 1.721 dt 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. 4. Persamaan getaran suatu silinder mesin dinyatakan dalam bentuk

Pemrograman Komputer Bahasa FORTRAN

- 103

d 2 d 2 + D(0.01 3 + 2 1) + 4 2 f o = 0 2 dt dt 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.