• Tidak ada hasil yang ditemukan

BAB 5 Program Fungsi Dan Subratin (Fotran)

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 5 Program Fungsi Dan Subratin (Fotran)"

Copied!
19
0
0

Teks penuh

(1)

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

(2)

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

(3)

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.

(4)

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)

CHARINT sesuai kode ASCII INTCHAR 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

(5)

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 :

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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.

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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.

(16)

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

(17)

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

(18)

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.

(19)

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.

Gambar

Gambar 5.1 Main Program – subprogram dalam FORTRAN
TABEL 5.1 FUNGSI KONVERSI TIPE

Referensi

Dokumen terkait

Di sisi lain, harga saham yang mahal mempengaruhi niat investor untuk membeli saham tersebut, dan mahalnya harga saham mengakibatkan saham yang ditawarkan menjadi kurang

Ketika Konosuke memberitahukan kepada calon pembeli tadi dan menceritakan upaya yang dilakukannya dalam membujuk majikannya, pembeli tadi akhirnya bersedia membeli sepeda

Yang dimaksudkan adalah bahwa individu mengenali nilai-nilai yang utama berupa kepercayaan kepada Tuhan dan harmoni, dan menjaga nilai tersebut setiap saat dan

Analisis SWOT digunakan untuk mengetahui apa-apa saja faktor kekuatan, kelamahan, kesempatan dan peluang yang dimiliki oleh perusahaan Express Group sebagai sebuah perusahaan

Jika terdapat bukti obyektif bahwa kerugian penurunan nilai telah terjadi atas instrumen ekuitas yang tidak memiliki kuotasi harga di pasar aktif dan tidak diukur pada nilai

Penelitian ini bertujuan untuk mengetahui waktu optimum, konsentrasi tiourea optimum dan rendemen pengendapan yang diperoleh pada hasil proses

Seperti hasil dari penelitian yang dilakukan oleh Apollo dan Cahyadi (2012) bahwa penyesuaian diri dan dukungan sosial memiliki korelasi negatif yang signifikan

Algortima Particle Swarm Optimization- Demster Shafer dapat diimplementasikan pada diagnosa indikasi penyakit ikan gurami yang memberikan pengetahuan berdasarkan