bahasa pemrograman fortran

84

Click here to load reader

Upload: jufriadif-naam

Post on 09-Jun-2015

8.357 views

Category:

Documents


9 download

DESCRIPTION

Dasar-dasar Pemrograman Bahasa Fortran

TRANSCRIPT

Page 1: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 1

BAB I PENDAHULUAN

1.1 Sekilas Tentang FORTRAN Fortran adalah salah satu bahasa tingkat tinggi (High Level Language) yang berfungsi menterjemahkan bahasa manusia (program) kedalam bahasa mesin (kode-kode mesin) yang siap dieksekusi oleh komputer. Fortran merupakan singkatan dari FORmula TRANslation. Bahasa Pemrograman Fortran lebih umum digunakan untuk menyelesaikan masalah pemrograman yang lebih umum berorientasi kepada masalah teknik. Bahasa Fortran merupakan salah satu bahasa tertua komputer, sehingga dari tahun-ketahun mengalami kemajuan dan perubahan, sehingga setiap pabrik software memakai cara dan pemakaian berbeda. Maka pada tahun 1977 dilakukan pembakuan (standard) Bahasa Fortran yang dikenal dengan nama FORTRAN77. Pada FORTRAN77 mencakup semua pernyataan dari versi sebelumnya serta ciri-ciri baru yang melengkapi dan memperbaharuinya, maka Bahasa Fortran yang dipelajari sekarang ini adalah Fortran versi 77 (FORTRAN77). Untuk membuat program Fortran dapat digunakan editor apa saja, apaka SideKick (SK), WordStart (WS), dan lain-lain. Dalam membuat program Fortran, setiap nama program harus diakhiri dengan ".FOR" (titik FOR). Cara pemberian nama tidak boleh lebih dari 8 digit karakter dan tidak boleh ada space kosong (blank). 1.2 Struktur Program Salah satu konsep dasar yang sangat penting dan perlu diketahui dalam membuat program Fortran adalah mengetahui bentuk dari struktur bahasa Fortran itu sendiri, karena jika tidak memahami dan mengetahui strukturnya maka program tersebut tidak dapat diterjemahkan oleh komputer. Struktur program Fortran didasari atas pembagian kolom dalam penulisan program. 1 (satu) baris hanya boleh ada 1 (satu) pernyataan yang terbagi kedalam 80 kolom, dimana pembagian kolom-kolom tersebut adalah sebagai berikut : Kolom 1 Jika diisi dengan : - "C" ,"c" atau "*" menyatakan baris tersebut hanya merupa kan baris komentar (tidak dieksekusi oleh komputer). - "$" (dollar) menyatakan baris tersebut berisi dengan meta command. Kolom 1-5 Digunakan untuk penulisan nomor label pernyataan, yang berupa suatu angka bilangan bulat diantara 1 sampai dengan 99999. Kolom 6 Berfungsi untuk meletakkan tanda sambungan, bahwa baris tersebut merupakan sambungan dari baris sebelumnya. Dapat berisi semua jenis karakter yang ada kecuali 0 (nol). Baris sambungan dapat mencapai 19 (sembilan belas) baris berturut-turut. Kolom 7-72 Digunakan untuk menulis pernyataan atau perintah (statement) Fortran.

Page 2: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 2

Kolom 73-80 Kolom ini tidak digunakan oleh Fortran, boleh berisi komentar bebas yang diinginkan programmer. Pembagian kolom dalam 1 (satu) baris dapat dilihat pada gambar berikut : tanda komentar atau metacommand (c/$) tanda sambung |1-----5|6|7-------------------------------------------------------------------------------72|73---------80| pernyataan / perintah (statement) komentar bebas nomor label Contoh Kolom 0 1 2 3 4 8 12345678901234567890123456789012345678901234567............0 $DEBUG ---> Metacommand

WRITE (*,5) ---> pernyataan 5 FORMAT ('progam Fortran - Contoh Saja') 1.3 Metacommand Metacommand atau compiler directive adalah bahasa pengontrol (control language) dari compiler Fortran yang gerfungsi untuk berkomunikasi antara programmer dengan compiler mengenai informasi-informasi tertentu. Metacommand dengan argumenya harus ditulis dalam1 (satu) baris, tidak boleh lebih, dan tidak boleh menggunakan tanda sambung. Disini tidak dijelaskan semua metacommand tersebut, hanya metacommand yang dirasa perlu saja bagi programmer tingkat formula atau menengah kebawah. Metacommand tersebut adalah sebagai berikut : a. $DEBUG dan $NODEBUG Bentuk umum : $[NO]DEBUG $DEBUG untuk mendeteksi kesalahan program pada saat run time (logika program). Jika terjadi kesalahan compiler akan memberitahukan dilayar monitor nomor baris berapa yang salah dan apa nama program Fortrannya. Defaultnya adalah $NODEBUG, yaitu bila tidak dibuat $DEBUG maka program tersebut dalam keadaan $NODEBUG (kalau ada kesalahan run time maka compiler tidak memberitahukan). Contoh : Jika terjadi kesalahan dalam menjalankan program seperti : ? Error: Data format error in file USER Error Code 12244, status 000F Line 5 In MAIN Of CONTOH.FOR PC = 0001: 4c2f; SS = 536C, FP = 0C17, SP = FF30D kesalahan terletak dibaris ke 5 nama source program CONTOH.FOR

Page 3: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 3

b. $INCLUDE Bentuk umum : $INCLUDE: 'nama_program.FOR' Digunakan untuk menyisip program lain (source program) pada posisi $INCLUDE. Program yang lain (source program) sebaiknya tidak diakhiri dengan END bila disisip didepan atau ditengah program. Contoh : -------------------------------------------------------------------------------------------------------------- Kolom 12345678901234567890123456789012345678901234567.........……………………...0

1 2 3 4 8 -------------------------------------------------------------------------------------------------------------- C program 1 nama program CONTOH1.FOR $DEBUG

WRITE (*,10) 10 FORMAT ('Ini Pada Contoh 1') ------------------------------------------------------------ C program 2 nama program CONTOH2.FOR $DEBUG $INCLUDE: 'CONTOH1.FOR'

WRITE (*,25) 25 FORMAT ('Ini Pada Contoh 2') END Bila program CONTOH2.FOR dijalankan, maka akan keluar hasil sebagai berikut : Ini Pada Contoh 1 ---> hasil program CONTOH1.FOR (include) Ini Pada Contoh 2 ---> hasil program CONTOH2.FOR 1.4. Tipe Data Nilai-nilai data didalam program Fortran disimpan oleh variabel data. Untuk membuat variabel yang pertama sekali harus ditentukan adalah nama dari variabel dan besar nilai yang dapat ditampung oleh variabel tersebut. Cara pemberian nama variabel adalah sebagai berikut : - Panjang yang dikenal hanya 6 digit - Harus didahului dengan huruf (karakter pertama harus huruf) - Tidak boleh ada blank atau spasi kosong - Tidak boleh memakai karakter khusus ("*","+","-",dll) - Tidak boleh kata-kata yang didefinisikan oleh Fortran. Contoh: Data ---> boleh 2XY ---> salah karena didahului oleh angka X Y ---> salah karena ada blank Write ---> salah karena pernyataan Fortran Data-a ---> salah karena ada "-" Untuk tipe data bilangan (angka), menentukan besar nilai yang dapat ditampung oleh sebuah variabel ditentukan dari banjang byte memory yang dibutuhkan untuk, yaitu dengan memakai rumus : Besar_nilai = 2 pangkat (8 x byte_memory)

Page 4: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 4

Karena didalam variabel bilangan (angka) mempunyai 2 (dua) jenis nilai, yaitu positif dan negatif, maka jangkauan nilainya dari -(2^(8*byte)/2) sampai dengan +(2^(8*byte)/2-1). Dikurang satu karen 0 (nol) termasuk kedalam bilangan positif. Nilai byte dalam bilangan bulat kelipatan 2 (dua) pangkat n , dimana nilai n bilangan bulat positif dan 0 (nol). Besarnya nilai byte tergantung dari jenis Prosesor Komputer. Contoh : Integer*4 A Artinya nama variabel A dengan tipe data bilangan bulat yang panjang byte memorynya 8 byte. Nilai yang sanggup ditampung oleh A adalah -(2^(8*4)/2) = -2147483648 sampai dengan +(2^(8*4)/2-1) = +2147483647 Untuk menentukan tipe data dalam Fortran dapat dilakukan dengan 2 (dua) cara, yaitu : - Implisit - Eksplisit. 1.4.1. Implisit Tipe data yang dikandung oleh sebuah variabel ditentukan dengan huruf pertama nama variabel tersebut. Jika nama vaiabel diawali denga huruf I, J, K, L, M, N maka nilai yang dikandung adalah bilangan bulat (Integer), selain dari itu nilai yang dikandung adalah bilangan pecahan (real) yang panjang nilainya 4 byte. Pemesanan lain dengan cara ini adalah untuk memesan variabel logika (LOGICAL), yaitu variabel yang hanya mempunyai nilai .TRUE. dan .FALSE. saja. Pemesanan dapat dilakukan dengan memberikan nilai .TRUE. atau .FALSE. kedalam sebuah nama variabel (huruf awal nama variabel boleh dari a-z atau A-Z). Contoh : MAD = .TRUE. DBS = .FALSE. 1.4.2. Eksplisit Tipe data variabel dengan metode ini dilakukan dengan pernyataan khusus, yaitu: - INTEGER - REAL - CHARACTER - LOGICAL. - 1.4.2.1 INTEGER INTEGER, yaitu digunakan untuk memesan tipe data bilangan bulat. Pemesanan dengan cara ini dikhususkan untuk nama variabel dengan awalan selain dari I, J, K, L, M, dan N, baik huruf kecil maupun huruf besar. Bentuk umum dari pernyataan ini adalah ; INTEGER[*byte] nama_variabel1, ..., nama_variabeln Contoh : INTEGER umur, Berat INTEGER*2 Besar1

Page 5: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 5

1.4.2.2. REAL REAL, yaitu digunakan untuk memesan tipe data bilangan pecahan (berkoma). Pemesanan cara ini dikhususkan untuk nama variabel yang berawal I, J, K, L, M, dan N, baik huruf kecil maupun huruf besar. Bentuk umum pernyataan ini adalah : REAL[*byte] nama_variabel1, ..., nama_variabeln Contoh : REAL nilai, nomor REAL*8 Jumlah 1.4.2.3. CHARACTER CHARACTER, yaitu digunakan untuk memesan tipe data karakter (string) atau nilai variabel tersebut diapit oleh tanda kutip ('). Bentuk umum pernyataan ini adalah : CHARACTER*n nama_variabel1, ..., nama_variabeln n => panjang digit yang dapat ditampung, maksimal 127 byte. Jika nilai n tidak dibuat maka panjang digitnya adalah 4 byte. Contoh : CHARACTER nama --> panjang digit nilai nama 4 byte (karakter) CHARACTER*15 alamat, kota -->panajang digit nilai alamat dan kota 15 byte (karakter). Cara diatas juga dapat dibuat seperti : CHARACTER nama*4 --> panjang digit nilai nama 4 byte (karakter) CHARACTER Alamat*15, kota*10 -->panjang digit yang ditampung oleh nilai untuk variabel nama sebanyak 15 digit dan kota 10 digit. 1.4.2.4. LOGICAL LOGICAL digunakan untuk memesan variabel logika, yang nilai dari variabel tersebut hanya .TRUE. dan .FALSE. saja. Bentuk umum dari deklarasi ini adalah : LOGICAL nama_variabel1, ..., nama_variabeln Contoh : LOGICAL mad, Dbs 1.5. Operasi Aritematika Operasi aritmetik adalah melakukan perhitungan dengan menggunakan operator aritmetik. Bentuk umum dari operaasi aritmetik adalah sebagai berikut : nama_variabel = ekspresi nama_variabel yang dipakai dalam operasi ini haruslah dengan tipe data bilangan (numerik) baik pecahan ataupun bilangan bulat. ekspresi dapat berupa nilai bilangan atau merupakan mengoperasikan bilangan (nilai numerik) atau variabel numerik dengan menggunakan operator arotmetik. Operator yang dipakai adalah sebagai berikut :

Page 6: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 6

Tabel 1-1. Operator Aritematika

Operator Keterangan Tingkat ( ) ** * / + -

blok operasi perpangkata

n perkalian

pembagian penambahan pengurangan

1 2 3 3 4 4

Tingkat merupakan tingkatan operasi, jika tingkat lebih kecil angkanya maka operasi tersebut dikerjakan terlebih dahulu. Contoh : A = 3 * 4 ** 2 A = ( 3 * 4 ) ** 2 hasilnya adalah : hasilnya adalah ; A = 3 * 16 A = 12 ** 2 A = 48, maka nilai A adalah 48. A = 144, maka A nilainya 144 A = 35 Nilai = 80 Dalam operasi pembagian (/), tipe data sangat berpengaruh sekali. Contoh : I = 1 / 2 A = 4 ** 0.5 hasilnya adalah : hasilnya adalah ; I = 0 A = 2.0 I = 0, maka nilai I adalah 0. maka A nilainya 2.0 J = 4 ** (1/2) K = 4 + 3.5 hasilnya adalah : hasilnya adalah ; J = 4 ** 0 K = 7 J = 1, maka nilai J adalah 1. maka K nilainya 7 B = 4.5 * 3.0 K = 4.5 * 3.0 hasilnya adalah : hasilnya adalah ; B = 13.5 K = 13 B = 13.5, maka B nilainya 13.5. maka K nilainya 13 Dari contoh diatas dapat dilihat, jika bilangan yang dioperasikan dengan tipe data bilangan bulat dibagi dengan bilangan bulat hasilnya akan dipancung, dari contoh diatas 1/2 akan menghasilkan nilai 0.5, tetapi karena tempat variabel penampung data bertipe bilangan bulat maka angka dibelakang koma dihilangkan, sehingga hasilnya menjadi 0 (nol). Maka untuk operasi pembagian, variabel penampung nilai harus bertipe bilangan pecahan. Begitu juga untuk operasi aritmetik bilangan pecahan, variabel penampungnya juga harus pecahan supaya tidak terjadi pemancungan nilai. Ungkapan operasi sama dengan (=) juga dapat mengopersikan pemberian nilai terhadap variabel karakter dengan nilai string (yang diapit tanda kutip). Contoh : Nama = 'Riandy' Alamat = 'Alai' nilai string nama variabel kharkter Operasi sama dengan (=) untuk variabel karakter atau nilai string tidak bisa dilakukan operasi

Page 7: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 7

aritmetik. Tetapi operasi dapat dilakukan terhadap sesama variabel kharakter. Contoh : Nama = Panggilan

Variabel kaharakter Variabel kharakter.

Page 8: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 8

BAB II PERINTAH MASUKAN DAN KELUARAN (I/O)

Pembuatan perintah dan nama variabel nantinya di dalam program dapat dibuat dengan memakai huruf besar, huruh kecil atau kombinasi dari huruf besar dan huruf kecil, tetapi ejaannya harus sama dengan yang telah ditetapkan. Perintah masukan dan keluaran merupakan perintah untuk melakukan pengaksesan terhadap media input dan output komputer, seperti Keyboard, Monitor, dan Printer. Yang dimasukan atau yang dikeluarkan oleh perintah ini adalah data-data yang telah ditetapkan oleh programmer. 2.1 Edit Descriptor Untuk memasukan atau menampilkan data, didalam Fortran harus ditetapkan bagaimana bentuk tampilan atau bentuk masukan yang diinginkan, didalam Fortran disebut dengan Format Specification. Didalam format specification terdapat informasi tentang letak, tipe, dan panjang dari nilai data yang dimasukan atau ditampilkan yang disebut dengan Edit Descriptor. 2.1.1 Edit Descriptor I Edit descriptor ini digunakan untuk tipe data bilangan bulat (Integer). Bentuk umumnya adalah :

[r]I[w] Dari bentuk umum diatas yang diapit oleh kurung siku ([]) adalah option (boleh dibuat kalau dibutuhkan dan kalau tidak dibutuhkan boleh ditinggalkan saja). Nilai untuk r dan w adalah bilangan bulat positif (integer). Diantara pernyataan diatas tidak boleh ada spasi kosong (blank). Keterangan : [r] => menunjukan banyaknya pengulangan (repeat) [w] => menunjukan panjang digit nilai data (width). Contoh : 3I6 -> 3 buah data bilangan bulat dengan panjang masing-masingnya 6 digit. I7 -> sebuah data biangan bulat dengan panjang 7 digit. Untuk menampilkan data, yang perlu diperhatikan adalah jika panjang digit yang disediakan lebih sedikit dari panjang nilai data yang ada maka yang akan keluar nantinya adalah tanda **** (tanda kali sebanyak panjang digit yang disediakan). Dan untuk menampilkan dilayar, minimal harus disediakan 1 spasi kosong di sudut kiri layar. 2.1.2 Edit Descriptor F Edit descriptor ini digunakan untuk tipe data bilangan pecahan (Real). Bentuk umumnya adalah :

[r]F[w].[d] Keterangan : [r] => menunjukan banyaknya pengulangan (repeat) [w] => menunjukan panjang digit (width) nilai data keseluruhan termasuk . (titik desimal). [d] => menunjukan panjang digit nilai dibelakang koma (desimal).

Page 9: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 9

Contoh : 3F6.2 -> 3 buah data bilangan pecahan dengan panjang masing-masingnya 6 digit (termasuk

titik desimal) dan 2 digit dibelakang koma. Jadi nilai positifnya hanya 6-(1+2)=3 digit.

F7.3 -> sebuah data biangan pecahan (real) dengan panjang 7 digit dengan 2 digit dibelakang koma (desimal).

2.1.3 Edit Descriptor A Edit descriptor ini digunakan untuk tipe data alfanumerik atau karakter. Bentuk umumnya adalah :

[r]A[w] Keterangan : [r] => menunjukan banyaknya pengulangan (repeat) [w] => menunjukan panjang digit (width) nilai data karakter keseluruhan. Contoh : 3A16 -> 3 buah data karakter dengan panjang masing-masingnya 16.A15 -> sebuah data karakter (huruf) dengan panjang 15 digit. 2.1.4 Edit Descriptor L Edit descriptor ini digunakan untuk tipe data Logika. Bentuk umumnya adalah :

[r]L[w] Keterangan : [r] => menunjukan banyaknya pengulangan (repeat) [w] => menunjukan panjang digit (width) nilai data karakter keseluruhan. Contoh : 3L8 -> 3 buah data logika dengan panjang masing-masingnya 8 digit. L5 -> sebuah data logika dengan panjang 5 digit. 2.1.5 Edit Descriptor Konstanta Karakter Edit descriptor ini digunakan untuk perintah keluaran saja (output). Edit descriptor ini tidak dapat diulang, hanya ditampilkan sekali saja. Bentuk umumnya adalah :

'konstanta karakter' Keterangan : 'konstanta karakter' => merupakan kata-kata apa saja yang diapit olehtanda petik tunggal (') Contoh : 'Saya Fortran' -> maka yang tampil nantinya kemedia output adalah : Saya Fortran 2.1.6 Edit Descriptor X Edit descriptor ini digunakan untuk menampilkan saja yang berfungsi untuk membuat spasi kosong (blank).

Page 10: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 10

Bentuk umumnya adalah :

[w]X Keterangan : [w] => panjang digit spasi yang ditampilkan. 2.1.7 Edit Descriptor / Edit descriptor ini digunakan untuk menampilkan jarak spasi baris. Berapa banyaknya tanda slash ini, sebanyak itu pula baris kosong yang ditampilkan. Edit Descriptor ini khusus untuk media tampilan (layar monitor). Bentuk umumnya adalah :

/ 2.1.8 Edit Descriptor \ Edit descriptor ini digunakan untuk menyatakan posisi berikutnya dalam baris yang sama. Edit Descriptor ini khusus untuk media tampilan (layar monitor). Bentuk umumnya adalah :

\ 2.1.9 Edit Descriptor Berulang Edit descriptor ini digunakan untuk menyatakan perulangan edit descriptor yang sama sebanyak beberapa kali (dalam bilangan bulat positif). Edit Descriptor ini khusus untuk media tampilan (layar monitor atau printer). Bentuk umumnya adalah :

[n](ed) Keterangan : [n] => menunjukan berapa kali perulangan yang diinginkan (dalam bilangan bulat positif). ed => edit descriptor yang ingin diulang dan harus diapit oleh tanda kurung "()". Contoh : 5(/) => maka akan dibuat sebanyak 5 buah baris kosong.

3('Fortran') => maka akan tampil kata fortran sebanyak 3 kali; FortranFortranForrtran. 2.2 Perintah FORMAT Perintah Format digunakan untuk mengedit data pada media input dan output komputer. Dalam pengeditan data pada perintah Format, yang perlu dilakukan adalah memgatur letak, menentukan tipe data, dan panjang digit dari data yang akan dimasukana atau ditampilkan media input atau output komputer. Perintah format merupakan pasangan dari perintah memasukan data (READ) dan menampilkan data (WRITE). Bentuk umum dari perintah Format adalah :

nl FORMAT fs

Page 11: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 11

Keterangan : nl => adalah menunjukan nomor label yang digunakan pada perintah READ dan WRITE

yang menjadi pasangan dari perintah FORMAT. Nomor label berupa angka bilangan bulat dari 0 sampai dengan 99999, yang ditulis antara kolom 1 (satu) sampai dengan kolom 5 (lima).

fs => adalah menunjukan format specification, yang merupakan pengaturan terhadap letak, tipe data dan panjang digit dari data. Format specification harus ditulis dalam tanda kurung; () dan isinya adalah edit descriptor.

Perintah FORMAT bebas diletakan pada baris berapa saja tetapi nomor label yang digunakan harus sesuai dengan perintah READ atau WRITE pasangannya. Contoh : A=75.53 B=45.34 WRITE(*,505) A,B 505 FORMAT (5X,'Nilai A dan B ',F7.2,F7.2) Bentuk hasil keluarn program : 1 2 3 4 5¦ 12345678901234567890123456789012345678901234567890 ¦ kolom ----------------------------------------------------------------------------------------- Nilai A dan B 75.53 45.34 Keterangan : => memasukan data kevariabel A dan B dengan nomor label 505 dan type data bilangan

pecahan (lihat cara pemberian tipe data pada bab sebelumnya). => perintah ini pasangan dari perintah tampilan WRITE dengan nomor label yang sama

(505). Bentuk tampilannya adalah 5 (lima) digit space kosong, tampil Nilai A dan B dan tampil nilai variabel A ( 75.53), nilai variabel B ( 45.34), sebelum nilai 75.53 akan keluar 3 buah spasi kosong karena digit yang disediakan 7 dan yang terpakai hanya 5 digit, beitu juga untuk nilai B.

Pada format specification dalam perintah format lebih dari 1 (satu) jenis edit descriptor, maka diantaranya harus ditambahkan (dibuat) pembatas dengan tanda koma (,). 2.3. Perintah READ Perintah READ digunakan untuk memasukan data dari media input komputer yang ditampung oleh sebuah variabel. Setiap data yang dimasukan harus disesuaikan dengan tipe data dari variabel tersebut. Bentuk Umum dari perintah READ adalah sebagai berikut :

READ(nu[,fs][,REC=nr][,END=nl1][,ERR=nl2])daftar_variabel Keterangan : Yang ditulis dengan huruf besar, kalau ada (dibutuhkan) ejaannya harus sama dengan bentuk umum diatas, dan dapat dibuat dengan huruf besar atau huruf kecil (dapat ditulis seperti : Read, read, reAD, Rec, reC, dan sebagainya). Sedangkan yang diapit oleh kurung siku bersifat option (kalau ada dibuat, kalau tidak tinggalkan) dan yang ditulis dengan huruf kecil merupakan pengenal yang disesuaikan dengan ketentuan yang telah ditetapkan oleh Fortran. nu => Nomor Unit

Page 12: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 12

Nomor unit atau unit specifier dapat disebut dengan istilah Logical Unit Number (LUN), yang merupakan spesifikasi dari alat input yang digunakan. Spesifikasi dari pengenal alat ini terdiri dari tanda asterik (*) atau angka 0 menunjukan alat input yang dipakai adalah media keyboard komputer dan angka dari -32768 sampai dengan 32767 selain nol (0) menunjukan alat input yang dipakai adalah file eksternal seperti printer atau file pada Disk (akan dijelaskan pada BAB berikutnya). fs => format specification Menunjukan format specification data yang dibaca seperti tipe data, letak, dan panjang digit yang ada (edit description). Dalam format specification dapat dibuat dalam 3 bentuk, yaitu : a. Format specificaion dapat berupa nomor label yang merupakan nomor label perintah Format yang memuat daftar edit descriptor dari data yang dimasukan. b. Daftar edit descriptior diapit diantara tanda petik satu (') dan tanda kurung "()". c. Daftar edit discriptor disimpan dalam bentuk sebuah varia bel karakter. nr => nomor record Hanya digunakan untuk membaca data dari file di disk secara langsung (direct accses), dimana nr dalam bilangan atau variabel bilangan bulat (integer) yang merupakan penunjuk nomor record yang di tulis (diisi). nl1 => nomor label1 Juga digunakan hanya untuk membaca data dari file di disk. Nomor label ini menunjukan apabila telah habis data dibaca maka proses akan pindah ke nomor label yang dituju. nl2 => nomor label2 Juga digunakan hanya untuk membaca data dari file di disk. Nomor label ini menunjukan apabila terjadi kesalahan dalam pembacaan data dari file di disk maka proses akan pindah ke nomor label yang dituju. daftar_variabel Merupakan daftar variabel yang dipakai untuk menampung data. Jika variabel yang dibaca lebih dari 1 (satu) maka diantara variabel tersebut diberi tanda pemisah koma (,). Contoh perintah READ : - Format specification dalam bentuk nomor a. Contoh 1. * menunjukana mengambil nilai dari keyboard 55 merupakan nomor label untuk perintah FORMAT READ(*,55) Nilai --> variabel penampung nilai data 55 FORMAT(I3)

3 adalah panjang digit nilai I adalah Edit descriptor untuk variabel Nilai (integer) 55 merupakan nomor label perintah FORMAT yang ditunjuk oleh READ. Contoh 2.

READ(*,5) X,J,Y 5 FORMAT(F5.2,I4,F7.3) - Format specification dalam bentuk nomor b. Contoh 1.

Page 13: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 13

READ(*,'(I3)') Nilai --> variabel penampung nilai data Contoh 2. READ(*,'(F5.2,I4,F7.3)') X,J,Y - Format specification dalam bentuk c. Contoh 1.

CHARACTER FS*4 FS=’(I3)’ READ(*,FS) Nilai

Contoh 2. CHARACTER TAMPIL*14 TAMPIL = '(F5.2,I4,F7.3)' READ(*,TAMPIL) X,J,Y 2.4. Perintah WRITE Perintah WRITE berfungsi memindahkan atau menampilkan data dari daftar variabel kemedia output komputer (monitor, printer, atau file ke disk), yang ditunjukan oleh nomor unit yang dipakai. Bentuk umum dari perintah ini adalah :

WRITE(nu[,fs][,ERR=nl][,REC=nr])daftar_variabel Keterangan : Cara penulisan sama dengan perintah READ. nu => Nomor Unit Nomor atau unit specifier dapat disebut dengan istilah Logical Unit Number (LUN), yang merupakan spesifikasi dari alat output yang digunakan. Spesifikasi dari pengenal alat ini terdiri dari tanda asterik (*) atau angka 0 menunjukan alat input yang dipakai adalah media layar monitor komputer dan angka dari -32768 sampai dengan 32767 selain nol (0) menunjukan alat input yang dipakai adalah file eksternal seperti printer atau file pada Disk (akan dijelaskan pada BAB berikutnya). fs => format specification Menunjukan format specification data yang ditampilkan seperti tipe data, letak, dan panjang digit yang ada (edit description). Dalam format specification dapat dibuat dalam 3 bentuk, yaitu : a. Format specificaion dapat berupa nomor label yang merupakan nomor label perintah

FORMAT yang memuat daftar edit descriptor dari data yang dimasukan. b. Daftar edit descriptior diapit diantara tanda petik satu (') dan tanda kurung "()". Untuk Edit

descriptor konstanta karakter harus diapit oleh tanda petik satu (') 2 (dua) kali. c. Daftar edit discriptor disimpan dalam bentuk sebuah variabel karakter. Untuk Edit descriptor

konstanta karakter harus diapit oleh tanda petik satu (') 2 (dua) kali. nr => nomor record Hanya digunakan untuk membaca data dari file di disk secara langsung (direct accses),

Page 14: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 14

dimana nr dalam bilangan atau variabel bilangan bulat (integer) yang merupakan penunjuk nomor record yang di tulis (diisi). nl => nomor label Digunakan hanya untuk membaca data dari file di disk. Nomor label ini menunjukan apabila terjadi kesalahan dalam penyimpanan data dari file di disk maka proses akan pindah ke nomor label yang dituju.daftar_variabel Merupakan daftar variabel yang ditampilkan. Jika variabel yang ditampilkan lebih dari 1 (satu) maka diantara variabel tersebut diberi tanda pemisah koma (,). Contoh perintah READ : - Format specification dalam bentuk nomor a. Contoh 1. * menunjukan perintah menampilkan ke layar monitpr 55 adalah nomor label untuk perintah FORMAT WRITE(*,55) Nilai Nilai adalah nama variabel yang akan ditampilkan nilainya 55 FORMAT(I3)

3 menunjukan panjang digit nilai I adalah Edit descriptor untuk variabel Nilai (integer) 55 adalah nomor label perintah FORMAT.

Contoh 2.

WRITE(*,5) X,J,Y 5 FORMAT(F5.2,I4,F7.3) Catatan: Garis-garis dengan tanda panah diatas hanya merupakan keterangan dari pasangan antara variabel dengan edit descriptor yang digunakan. Contoh 3. A=456.67 WRITE(*,10) A 10 FORMAT (5x,'Nilai dari variabel A =',F7.2) hasilnya: Nilai dari variabel A = 456.67 dari contoh 3 diatas dapat dirubah menjadi (hasilnya sama) : A=456.67 WRITE(*,10) 'Nilai dari variabel A =',A 10 FORMAT(5X,A,F7.3) - Format specification dalam bentuk nomor b. Contoh 1. WRITE(*,'(I3)') Nilai Contoh 2.

WRITE(*,'(F5.2,I4,F7.3)') X,J,Y Contoh 3. A=456.67 WRITE(*,'(5x,''Nilai dari variabel A ='',F7.2)')A

Page 15: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 15

hasilnya: Nilai dari variabel A = 456.67 dari contoh 3 diatas dapat dirubah menjadi (hasilnya sama) : A=456.67 WRITE(*,'(5X,A,F7.3)')'Nilai dari variabel A =',A - Format specification dalam bentuk c. Contoh 1.

CHARACTER FS*4

FS='(I3)' WRITE(*,FS) Nilai Contoh 2. CHARACTER TAMPIL*14 TAMPIL = '(F5.2,I4,F7.3)'

WRITE(*,TAMPIL) X,J,Y Contoh 3. CHARACTER Tampil*37 A=456.67 Tampil='(5x,''Nilai dari variabel A ='',F7.2)' WRITE(*,tampil) A hasilnya: Nilai dari variabel A = 456.67 dari contoh 3 diatas dapat dirubah menjadi (hasilnya sama) : CHARACTER Tampil*11 A=456.67 Tampil='(5x,A,F7.2)' WRITE(*,Tampil) 'Nilai dari variabel A =',A Contoh Program Lengkap. (layout)

Nilai Akhir Matakuliah Fortran ====================== Nomor BP : xxxxxxxx Nama Mahasiswa : xxxxxxxxxxxxxxxxxxxxx Nilai Tugas : 999 Nilai Quiz : 999 Nilai Ujian Mid : 999 Nilai Ujian Akhir : 999 Nilai Akhir : 999.99

Proses :

- Nomor BP, Nama, Nilai Tugas, Nilai Quiz, Nilai ujian Mid, Nilai Ujian Akhir di input dari Keyboard.

- Nilai Akhir = 10% x Nilai Tugas + 15% x Nilai Quiz + 35% x Nilai Ujian Mid + 40% x Nilai Ujian Akhir Jawaban :

Page 16: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 16

- Menentukan variabel untuk masing-masing data -

Name Type Width Decimal Description BP

Nama NT NQ NM NU NA

Character Character

Integer Integer Integer Integer Real

8 15 3 3 3 3 6

- - - - - - 2

Nomor BP Nama Mahasiswa Nilai Tugas Nilai Quiz Nilai Ujian Mid Nilai Uj.Akhir Nilai Akhir

- Menentukan operasi aritmetik NA=0.1*NT+0.15*NQ+0.35*NM+0.4*NU - Tampilkan NA Program : $DEBUG Character BP*8, NAMA*15 Real NA c Menghapus layar Write(*,5) 5 Format(24(/)) c Buat judul Write(*,10) 10 Format(13X,'Nilai Akhir Matakuliah Fortran') Write(*,15) 15 Format(13X,'======================') c Memasukan data dari keyboard Write(*,20) 20 Format(13X,'Nomor BP :',\) Read(*,25)BP 25 Format(A8) Write(*,30) 30 Format(13X,'Nama mahasiswa :',\) Read(*,35)Nama 35 Format(A15) Write(*,40) 40 Format(13X,'Nilai Tugas :',\) Read(*,45)NT 45 Format(I3) Write(*,50) 50 Format(13X,'Nilai Quiz :',\) Read(*,55)NQ 55 Format(I3) Write(*,60) 60 Format(13X,'Nilai Ujian Mid :',\) Read(*,65)NM 65 Format(I3) Write(*,70) 70 Format(13X,'Nilai Ujian Akhir :',\) Read(*,75)NT 75 Format(I3) c Proses mencari nilai akhir NA=0.1*NT+0.15*NQ+0.35*NM+0.4*NU c Menampilkan Nilai Akhir Write(*,80)NA 80 Format(13X,'Nilai Akhir :',F6.2) c Akhir Program END

Page 17: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 17

Program diatas dapat disederhanakan dengan hasil yang sama. $DEBUG Character BP*8, NAMA*15 Real NA c Menghapus layar Write(*,5) 5 Format(24(/)) c Buat judul Write(*,'(13X,''Nilai Akhir Matakuliah Fortran'')') Write(*,'(13X,''=============================='')') c Memasukan data dari keyboard Write(*,'(13X,''Nomor BP :'',\)') Read(*,'(A8)')BP Write(*,'(13X,''Nama mahasiswa :'',\)') Read(*,'(A15)')Nama Write(*,'(13X,''Nilai Tugas :'',\)') Read(*,'(I3)')NT Write(*,'(13X,''Nilai Quiz :'',\)') Read(*,'(I3)')NQ Write(*,'(13X,''Nilai Ujian Mid :'',\)') Read(*,'(I3)')NM Write(*,'(13X,''Nilai Ujian Akhir :'',\)') Read(*,'(I3)')NT c Proses mencari nilai akhir NA=0.1*NT+0.15*NQ+0.35*NM+0.4*NU c Menampilkan Nilai Akhir Write(*,'(13X,''Nilai Akhir :'',F6.2) NA c Akhir Program END Program diatas juga dapat disederhanakan dengan hasil yang sama. $DEBUG Character BP*8, NAMA*15 Real NA c Menghapus layar Write(*,’(24(/)’) c Buat judul Write(*,'(13X,A)')'Nilai Akhir Matakuliah Fortran' Write(*,'(13X,A)')'==============================' c Memasukan data dari keyboard Write(*,'(13X,A,\)')'Nomor BP :' Read(*,'(A8)')BP Write(*,'(13X,A,\)')'Nama mahasiswa :' Read(*,'(A15)')Nama Write(*,'(13X,A,\)')'Nilai Tugas :' Read(*,'(I3)')NT Write(*,'(13X,A,\)')'Nilai Quiz :' Read(*,'(I3)')NQ Write(*,'(13X,A,\)')'Nilai Ujian Mid :' Read(*,'(I3)')NM Write(*,'(13X,A,\)')'Nilai Ujian Akhir :' Read(*,'(I3)')NU c Proses mencari nilai akhir NA=0.1*NT+0.15*NQ+0.35*NM+0.4*NU c Menampilkan Nilai Akhir Write(*,'(13X,A,F6.2)')'Nilai Akhir :',NA END

Page 18: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 18

BAB III PERINTAH KONTROL

Perintah kontrol adalah perintah yang mengatur atau mengontrol pengolahan data yang dilaksanakan dalam sebuah program. Perintah kontrol juga berfungsi mengendalikan logika pengolahan data dalam program. 3.1. Perintah END Perintah END digunakan untuk mengontrol akhir proses sebuah program (akhir program). Umumnya perintah ini terletak diakhir sebuah program, dan idealnya sebuah program memiliki satu buah perintah END. Bentuk umum dari perintah ini adalah :

END Pada perintah END ini tidak boleh diikuti oleh argumen lain. 3.2. Perintah STOP Perintah STOP berfungsi menghentikan atau mengakhiri pengerjaan program. Perintah ini bleh berada pada baris berapa saja dalam program, tetapi setiap pengerjaan program bertemu dengan perintah ini, maka proses akan berhenti dan didalam sebuah program perintah ini tidak harus ada (boleh tidak ada). Bentuk umumdari perintah ini adalah :

STOP [konstanta] Perintah ini boleh diikuti oleh konstanta numerik (angka) yang panjangnya tidak boleh lebih dari 5 digit (99999) atau konstanta karakter (komentar). Jika STOP tidak diikuti oleh konstanta, maka pada saat pengerjaan program bertemu dengan perintah ini akan keluar pesan : Stop - Program terminated. Tetapi jika diikuti dengan konstanta maka pada saat pengerjaan perintah ini akan tampil (keluar) konstanta yang mengikuti perintah tersebut. Contoh : STOP 5 STOP STOP 'Program berhenti' 3.3. Perintah PAUSE Perintah ini berfungsi menghentikan pengerjaan program selama sampai ditekan tombol RETURN pada keyboard.Bentuk umum dari perintah ini adalah :

PAUSE [konstanta] Perintah ini boleh diikuti oleh konstanta numerik (angka) yang panjangnya tidak boleh lebih dari 5 digit (99999) atau konstanta karakter (komentar). Jika PAUSE tidak diikuti oleh konstanta, maka pada saat pengerjaan program bertemu dengan perintah ini akan keluar pesan : Please press <return> to continue.

Page 19: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 19

Tetapi jika diikuti dengan konstanta maka pada saat pengerjaan perintah ini akan tampil (keluar) konstanta yang mengikuti perintah tersebut. Contoh : PAUSE PAUSE 6 PAUSE 'Tekan Enter Untuk Lanjut !' Contoh : Write(*,'(15X,''Program Rumus Phitagoras'')') Write(*,'(15X,''========================'')') Write(*,'(15X,''Panjang sisi vertikal :'',\)') Read(*,'(F5.2)') A Write(*,'(15X,''Panjang sisi horizontal :'',\)') Read(*,'(F5.2)') B C=(A**2+B**2)**0.5 Pause 'Tekan Enter untuk lanjut ...!' Write(*,'(15X,''Panjang sisi Diagonal :'',F5.2)')C Stop 'Program Selesai....' End Hasil : Program Rumus Phitagoras =================== Panjang sisi vertikal :4.0 <= diinput dari Panjang sisi horizontal :3.0 <= keyboard Tekan Enter unntuk lanjut ...! <- tekan enter Panjang sis Diagnal : 5.0 Program Selesai....

Page 20: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 20

BAB IV PERINTAH PERCABANGAN

Perintah bercabang adalah perintah yang melakukan penyeleksiaan pengerjaan program sehingga terjadi perloncatan atau percabangan proses pengolahaan data. 4.1. Perintah GOTO Perintah GOTO melakukan perloncatan pengerjaan program ke bagian-bagian program tertentu. Perintah GOTO terdiri atas: - GOTO tak bersyarat (unconditional GOTO) - GOTO bersyarat (conditional GOTO). 4.1.1. GOTO Tak Bersyarat Perintah GOTO tak bersyarat digunakan untuk mengontrol proses pengerjaan program kecabang proses yang dituju berdasarkan nomor label perintah. Bentuk umum perintah ini adalah :

GOTO nl nl adalah nomor label yang dituju oleh perintah GOTO yang akan dikerjakan. Nomor label yang dituju tersebut adalah nomor label perintah lainnya yang ditulis antara kolom 1 sampai kolom 5. Contoh : $DEBUG Write(*,'(5X,''Proses percabangan perintah GOTO'')') GOTO 10 Write(*,'(5X,''Ini Tidak dikerjakan ..!'')') 10 Write(*,'(5X,''Ini Baru Dikerjakan....!'')') End Hasil : Proses percabangan perintah GOTO Ini Baru Dikerjakan....! 4.1.2. Perintah GOTO Bersyarat Perintah GOTO bersyarat digunakan untuk mengontrol loncatan pengerjaan proses program ke suatu nomor label perintah yang memakai nomor label yang dituju. Bentuk umum perintah ini adalah :

GOTO (nl_1[,nl_2][,nl_3]...[,nl_n]) variabel Keterangan : - nl_1,nl_2,nl3,...,nl_n adalah nomor label yang dituju. - variabel adalah variabel percabangan dengan tipe data bilangan bulat (integer). Jika variabel bernilai 1 maka proses akan pindah ke nl_1, dan bernilai 2 ke nr_2, dan seterusnya. Contoh :

Page 21: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 21

$DEBUG Integer Pilih Real Kel,Luas 5 Write(*,'(20X,''Menu Program Segitiga Siku-siku'')') Write(*,'(20X,''==============================='')') Write(*,'(/,20X,''Input Nilai Tinggi :'',\)') Read(*,'(F5.2)')Tinggi Write(*,'(20X,''Input Nilai Lebar :'',\)') Read(*,'(F5.2)')Panjang Write(*,'(20X,''1. Mencari Luas'')') Write(*,'(20X,''2. Mencari Keliling'')') Write(*,'(20X,''3. Selesai'')') Write(*,'(20X,''Pilih [1-3] :'',\)') Read(*,'(I1)') Pilih GOTO (10,100,1000) Pilih Goto 5 10 Luas = Panjang * Tinggi / 2 Write(*,'(/,20X,''Luas Segitiga :'',F6.2)')Luas Pause 'Tekan Enter untuk lanjut ...!' Goto 5 100 Kel = Panjang + Tinggi+(Panjang**2+Tinggi**2)**0.5 Write(*,'(/,20X,''Keliling Segitiga :'',F6.2)')Kel Pause 'Tekan Enter untuk lanjut ...!' Goto 5 1000 Stop 'Selesai' END 4.2. Perintah IF Perintah IF adalah perintah yang digunakan untuk percabangan proses berdasarkan kondisi (syarat) tertentu. Percabangan pengerjaan berdasarkan kondisi yang terpenuhi (benar). Perintah IF terbagi atas 3 kelompok, yaitu : - Logikal IF - Aritematika IF - Blok IF. 4.2.1. Logikal IF Perintah logikal IF digunakan untuk menyeleksi suatu ekspresi logika yang dapat bernilai benar (TRUE) atau alah (False). Jika ekspersi bernilai benar maka pernyataan sebelah IF akan dilaksanakan. Bentuk umum dari perintah ini adalah :

IF(ekspresi) pernyataan Keterangan : - Ekspresi. Ekspresi adalah ungkapan logika atau ungkapan operasi perbandingan. Semua ekspresi yang ada dalam perintah percabagan (IF) semuanya sama, yaitu ekspresi terdiri atas 3 element pokok, yaitu : - Variabel yang dibandingkan - Operator pembanding

Page 22: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 22

- Variabel atau nilai pembanding. Bentuk umum Ekspresi adalah ;

<variabel> <operator> <variabel/nilai>

Antara variabel yang dibandingkan dengan variabel atau nilai pembanding harus mempunyai tipe data yang sama. Operator pembanding dapat berupa tunggal (membandingkan satu variabel) dan jamak (membandingkan lebih dari satu variabel / operator logika gabungan dari operator tunggal), yang dapat dilihat pada tabel berikut : Tabel 4-1. Opearator Tunggal.

Operator Tanda Keterangan .LT. .LE. .GT. .GE. .EQ. .NE.

< <= >

>= =

<>

Kecil dari Kecil sama dengan Besar dari Besar sama dengan Sama dengan Tidak sama dengan

Tabel 4-2. Operator Jamak.

Operator Keterangan .NOT. .AND. .OR.

Tidak sama dengan Dan Atau

- pernyataan. Pernyataan merupakan proses yang dikerjakan apabila kondisi ekspresi bernilai benar (terpenuhi). Pernyataan berupa perintah dan argument yang mengikuti perintah tersebut. Pada pernyataan ini tidak boleh memakai perintah yang memakai ekspresi (misalnya IF). Operator jamak digunakan untuk menggabungkan 2 (dua) atau lebih operator tunggal. Contoh. $DEBUG Integer Pilih Real Kel,Luas 5 Write(*,'(20X,''Menu Program Segitiga Siku-siku'')') Write(*,'(20X,''==============================='')') Write(*,'(/,20X,''Input Nilai Tinggi :'',\)') Read(*,'(F5.2)')Tinggi Write(*,'(20X,''Input Nilai Lebar :'',\)') Read(*,'(F5.2)')Panjang Write(*,'(20X,''1. Mencari Luas'')') Write(*,'(20X,''2. Mencari Keliling'')') Write(*,'(20X,''3. Selesai'')') Write(*,'(20X,''Pilih [1-3] :'',\)') Read(*,'(I1)') Pilih IF (Pil.EQ.1) Goto 10 IF (Pil.EQ.2) Goto 100

Page 23: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 23

IF (Pil.EQ.3) Goto 1000 IF (Pil.LT.1.OR.Pil.GT.3) Goto 5 10 Luas = Panjang * Tinggi / 2 Write(*,'(/,20X,''Luas Segitiga :'',F6.2)')Luas Pause 'Tekan Enter untuk lanjut ...!' Goto 5 100 Kel = Panjang + Tinggi+(Panjang**2+Tinggi**2)**0.5 Write(*,'(/,20X,''Keliling Segitiga :'',F6.2)')Kel Pause 'Tekan Enter untuk lanjut ...!' Goto 5 1000 Stop 'Selesai' END 4.2.2. Aritematika IF Perintah aritematika IF digunakan untuk meyeleksi nilai dari variabel kondisi dari pernyataan aritematika, apakah bernilai minus (-), nol (0), atau plus (+). Bentuk umum dari aritematika IF adalah :

IF (variabel) nl_1,nl_2,nl_3 Keterangan :

- variabel yang dipakai sebagai kondisi adalah variabel yang bertipe bilangan bulat (Integer). - nl_1,nl_2,nl_3 adalah nomor label yang akan dituju oleh dalam pemindahan proses

berdasarkan nilai dari variabel. Banyak nomor label dalam IF ini hanya 3 (tiga) buah dan tidak boleh lebih. Jika nilai variabel kurang dari nol atau minus (-) maka proses akan pindah ke nl_1, jika nilai variabel sama dengan nol (0) maka proses akan pindah ke nl_2, dan jika nilai variabel besar dari nol atau positif (+) maka proses akan pindah ke nl_3. Contoh : $DEBUG Integer Bil Write(*,'(15X,''Input Sebuah Bilangan ='',\)') Read(*,'(I3)') Bil IF (Bil) 10,20,30 10 Write (*,'(15X,''Ini bilangan Negatif...!'')') Goto 40 20 Write (*,'(15X,''Ini bilangan Kosong (Nol)..!'')') Goto 40 30 Write (*,'(15X,''Ini bilangan Positif...!'')') Goto 40

40 End 4.2.3. Blok IF Blok IF diawali dengan perintah IF dan diakhiri oleh ENDIF. Pernyataan yang dilaksanakan oleh Blok IF adalah pernyataan yang terdapat antara IF dengan ENDIF, dan tidak semua pernyataan itu dilaksanakan, karena ada IF yang bertingkat. Blok IF ini terbagi atas 3 jenis, yaitu : - IF-THEN-ENDIF - IF-THEN-ELSE-ENDIF - IF-THEN-ELSEIF-THEN-ELSEIF...ENDIF. 4.2.3.1. IF-THEN-ENDIF Perintah IF-THEN-ENDIF hanya mempunyai 1 (satu) blok pernyataan yang

Page 24: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 24

terletak antara THEN sampai ENDIF. Pengerjaan Blok pernyataan ini, jika kondisi pada IF terpenuhi (benar). Bentuk umumnya adalah :

IF (ekspresi) THEN blok_pernyataan ENDIF Keterangan : - Ekspresi pada IF ini sama dengan ekspresi pada IF logika. - Blok_pernyataan adalah baris-baris pernyataan (perintah dan argument) yang terletak

diantara THEN sampai ENDIF. Dalam blok boleh terdiri dari 1 (satu) pernyataan atau lebih. Contoh :

Predikat Nilai Fortran Mahasiswa ========================= Nomor BP : xxxxxxxxx Nama : xxxxxxxxxxxxxxxx Nilai Akhir : 999.99 Nilai Bobot : x Nilai Mutu : 9 Keterangan : xxxxxxxxxx

Program : $DEBUG Character Bp*8, Nama*15, Bobot*1, Ket*10 Real Nilai Write(*,'(14X,A)')'Predikat Nilai Fortran Mahasiswa' Write(*,'(14X,A)')'================================' Write(*,'(14X,A,\)')'Nomor BP :' Read(*,'(A8)')Bp Write(*,'(14X,A,\)')'Nama :' Read(*,'(A15)')Nama Write(*,'(14X,A,\)')'Nilai Akhir :' Read(*,'(F6.2)')Nilai IF(Nilai.GE.0.0) THEN Bobot = 'E' Mutu = 0 Ket = 'Gagal' ENDIF IF(Nilai.GE.40.0) THEN Bobot = 'D' Mutu = 1 Ket = 'Kurang' ENDIF IF(Nilai.GE.55.0) THEN Bobot = 'C' Mutu = 2 Ket = 'Cukup' ENDIF IF(Nilai.GE.65.0) THEN Bobot = 'B' Mutu = 3 Ket = 'Memuaskan' ENDIF IF(Nilai.GE.80.0) THEN Bobot = 'A' Mutu = 4

Page 25: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 25

Ket = 'Terpuji' ENDIF Write(*,'(14X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(14X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(14X,A,A10)')'Keterangan :',Ket End 4.2.3.2. IF-THEN-ELSE-ENDIF Perintah IF-THEN-ELSE-ENDIF mempunyai 2 (dua) blok pernyataan, yang pertama terletak antara THEN sampai ELSE dan yang kedua terletak antara ELSE sampai ENDIF. Dari kedua blok pernyataan ini yang dilaksanakan hanya satu blok pernyataan. Jika kondisi ekspresi terpenuhi maka yang dikerjakan adalah blok yang pertama, tetapi kalau tidak yang dikerjakan blok yang kedua. Bentuk umumnya adalah :

IF (ekspresi) THEN blok_1 ELSE blok_2 ENDIF Contoh :

Predikat Nilai Ujian Profesional Programing ================================ Nomor BP : xxxxxxxxx Nama : xxxxxxxxxxxxxxxx Nilai Program Entri : 999.99 Nilai Program Transaksi : 999.99 Nilai Program Informasi : 999.99 Keterangan : xxxxxxxxxx [ Sukses / Ulang Lagi ]

Program : $DEBUG Character Bp*8, Nama*15, Ket*5 Real Info Write(*,'(14X,A)') - 'Predikat Nilai Ujian Profesional Programing' Write(*,'(14X,A)') - '================================' Write(*,'(14X,A,\)')'Nomor BP :' Read(*,'(A8)')Bp Write(*,'(14X,A,\)')'Nama :' Read(*,'(A15)')Nama Write(*,'(14X,A,\)')'Nilai Program Entry :' Read(*,'(F6.2)')Entri Write(*,'(14X,A,\)')'Nilai Program Transaksi :' Read(*,'(F6.2)')Trans Write(*,'(14X,A,\)')'Nilai Program Informasi :' Read(*,'(F6.2)')Info Total = Entri + Trans + Info IF(Total.GE.55.0) THEN Ket = 'Lulus' Write(*,'(14X,A,)')'Sukses' ELSE Ket = 'Gagal'

Page 26: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 26

Write(*,'(14X,A)')'Ulang Lagi' ENDIF Write(*,'(14X,A,A10)')'Keterangan :',Ket End 4.2.3.3. IF-THEN-ELSEIF-THEN-ELSEIF-...-ENDIF Perintah IF-THEN-ELSEIF-THEN-ELSEIF-...-ENDIF adalah perintah percabangan bertingkat, dimana memiliki lebih dari 2 (dua) blok pernyataan. Pada perintah ini sama dengan perintah yang berfungsi untuk melakukan penyeleksian. Bentuk umum perintah ini adalah :

IF (ekspresi_1) THEN blok_pernyataan_1 ELSEIF (ekspresi_2) THEN blok_pernyataan_2] : [ELSEIF (ekspresi_n) THEN blok_pernyataan_n] [ELSE blok_pernyataan_n+1] ENDIF

Setiap ekspresi memiliki satu blok pernyataan yang dikerjakan. Apabila kondisi ekspresi tersebut terpenuhi maka pengerjaan program melaksanakan blok pernyataan setelah THEN-nya. Pada perintah ini hanya satu blok yang dieksekusi oleh program berdasarkan kondisi yang terpenuhi. Akhir dari perintah ini diakhiri dengan satu ENDIF. Contoh diambil dari contoh program perintah IF-THEN-ENDIF yang dirubah kedalam IF-THEN-ELSEIF-THEN-...-ENDIF. $DEBUG Character Bp*8, Nama*15, Bobot*1, Ket*10 Real Nilai Write(*,'(14X,A)')'Predikat Nilai Fortran Mahasiswa' Write(*,'(14X,A)')'========================' Write(*,'(14X,A,\)')'Nomor BP :' Read(*,'(A8)')Bp Write(*,'(14X,A,\)')'Nama :' Read(*,'(A15)')Nama Write(*,'(14X,A,\)')'Nilai Akhir :' Read(*,'(F6.2)')Nilai IF(Nilai.LT.40.0) THEN Bobot = 'E' Mutu = 0 Ket = 'Gagal' ELSEIF(Nilai.LT.55.0) THEN Bobot = 'D' Mutu = 1 Ket = 'Kurang' ELSEIF(Nilai.LT.65.0) THEN Bobot = 'C' Mutu = 2 Ket = 'Cukup' ELSEIF(Nilai.LT.80.0) THEN Bobot = 'B' Mutu = 3 Ket = 'Memuaskan' ELSE Bobot = 'A' Mutu = 4

Page 27: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 27

Ket = 'Terpuji' ENDIF Write(*,'(14X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(14X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(14X,A,A10)')'Keterangan :',Ket End

Page 28: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 28

BAB V PERINTAH PERULANGAN

Perulangan proses (looping) adalah pengerjaan eksekusi program terhadap proses yang sama secara berulang (berkali-kali). Proses perulangan didalam logika pengerjaan program terbagi atas 3 bagian, yaitu : - Perulangan kwantitatif - Perulangan selama kondisi benar - perulangan selama kondisi salah. 5.1. Perulangan Kwantitatif Perulangan pengerjaan program secara kwantitatif adalah perulangan dimana sudah diketahui berapa kali proses program terjadi sebelum program dieksekusi oleh komputer (melihat dari bentuk atau listing program), perulangan ini disebut dengan istilah LOOP FOR-NEXT. Didalam Bahasa Pemrograman Fortran perintah untuk perulangan ini adalah DO-CONTINUE. Bentuk umumnya penulisan perintah ini adalah :

DO nl variabel=awal,akhir,kenaikan : : <blok pernyataan> : nl CONTINUE

Setiap perintah DO diikuti oleh CONTINUE dan diantaranya merupakan blok pernyataan (proses) yang dikerjakan berulang selama nilai variabel diantara awal sampai dengan akhir. Keterangan : nl => nomor label, dimana nomor label pada DO harus sama dengan nomor label pada

CONTINUE, yang merupakan pasangannya. variabel => adalah variabel kondisi, dimana variabel ini harus bertipe bilangan bulat

(integer). awal,akhir,dan kenaikan merupakan variabel atau nilai pertipe data bilangan bulat, awal adalah nilai kondisi awal dan akhir adalah nilai kondisi akhir, sedangkan kenaikan adalah tingkat perubahan nilai dari variabel kondisi. Jika nilai awal lebih tinggi dari nilai akhir maka kenaikan harus minus (-), dan sebaliknya jika nilai awal lebih kecil dari nilai akhir maka kenaikannya plus (+), kalau kenaikannya tidak dibuat maka kenaikan nilai variabel kondisi dinyatakan satu per satu. Contoh :

DO 5 I=1,5,2 WRITE(*,'(15X,''FORTRAN'')') 5 CONTINUE Hasil Program ini adalah mencetak kata-kata FORTRAN sebanyak 3 (tiga) kali. FORTRAN FORTRAN FORTRAN Contoh lain menjumlahkan nilai dari 1 sampai dengan 20.

Page 29: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 29

Program : $DEBUG Write(*,'(5X,''Mencetak jumlah bilangan dari 1-10'')') Jumlah=0 DO 15 J=1,10 Jumlah = jumlah + J 15 CONTINUE Write(*,'(5X,''Jumlah = '',I3)') Jumlah END Hasil: Mencetak jumlah bilangan dari 1-10 Jumlah = 55 Didalam perulangan DO-CONTINUE juga dapat dibuat perulanga DO-CONTINUE lagi (perulangan DO-CONTINUE berlapis), tetapi dalam strukturnya perulang DO awal harus berpasangan dengan CONTINUE terluar (akhir). Contoh strukturnya adalah sebagai berikut : Struktur yang benar Struktur yang salah DO 5 ..... DO 10 .... : : : : DO 10 .... DO 15 .... : : : : DO 15 .... 10 CONTINUE : : : : 15 CONTINUE 15 CONTINUE : : DO 20 .... : : 20 CONTINUE : : 10 CONTINUE : : 5 CONTINUE 5.2. Perulangan Selama Kondisi Benar Perintah perulangan ini merupakan perulangan blok pernyataan yang sama, dimana blok pernyataan tersebut diawali dengan ekspresi. Sebelum blok pernyataan dieksekusi, ekspresi harus terpenuhi terlebih dahulu. Bentuk umum dari perintah ini adalah :

nl1 IF (ekspresi) THEN : <blok pernyataan> : GOTO nl1 ENDIF

Page 30: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 30

Untuk perintah perulangan selama kondisi benar (While-DO) dibentuk dari gabungan perintah IF-THEN-ENDIF dengan perintah GOTO. Sebelum memasuki perintah IF, variabel untuk ekspresi harus diberi nilai dengan memenuhi kondisi dari ekspresi tersebut, dan didalam blok pernyataan harus dibuat perintah untuk memberi nilai baru terhadap variabel ekspresi tersebut, apakah melalui perintah memasukan data dari keyboard atau pemberian nilai (assignment) dengan operasi aritematika sama dengan (=). Contoh program diambil dari kasus pada BAB IV : Contoh 1. $DEBUG Integer Pilih Real Kel,Luas Pilih = 0 30 IF(Pilih.LT.3) THEN Write(*,'(20X,''Menu Program Segitiga Siku-siku'')') Write(*,'(20X,''==============================='')') Write(*,'(/,20X,''Input Nilai Tinggi :'',\)') Read(*,'(F5.2)')Tinggi Write(*,'(20X,''Input Nilai Lebar :'',\)') Read(*,'(F5.2)')Lebar Write(*,'(20X,''1. Mencari Luas'')') Write(*,'(20X,''2. Mencari Keliling'')') Write(*,'(20X,''3. Selesai'')') Write(*,'(20X,''Pilih [1-3] :'',\)') Read (*,'(I1)')Pilih IF(Pilih.EQ.1) THEN Luas = Panjang * Lebar / 2 Write(*,'(/,20X,''Luas Segitiga :'',F6.2)')Luas Pause 'Tekan Enter untuk lanjut ...!' ENDIF IF(Pilih.EQ.2) THEN Kel = Panjang + Lebar + (Panjang**2+Lebar**2)**0.5 Write(*,'(/,20X,''Keliling Segitiga :'',F6.2)')Kel Pause 'Tekan Enter untuk lanjut ...!' ENDIF GOTO 30 ENDIF Stop 'Selesai' END Contoh 2.

Predikat Nilai Fortran Mahasiswa ======================== Nomor BP : xxxxxxxxx Nama : xxxxxxxxxxxxxxxx Nilai Akhir : 999.99 Nilai Bobot : x Nilai Mutu : 9 Keterangan : xxxxxxxxxx Masih Ada Data [Y/T] : X

$DEBUG Character Bp*8, Nama*15, Bobot*1, Ket*10, Mad*1 Real Nilai Mad='Y' 5 IF(Mad.Eq.'Y'.OR.Mad.EQ.'y') THEN Write(*,'(24(/))')

Page 31: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 31

Write(*,'(14X,A)')'Predikat Nilai Fortran Mahasiswa' Write(*,'(14X,A)')'================================' Write(*,'(14X,A,\)')'Nomor BP :' Read(*,'(A8)')Bp Write(*,'(14X,A,\)')'Nama :' Read(*,'(A15)')Nama Write(*,'(14X,A,\)')'Nilai Akhir :' Read(*,'(F6.2)')Nilai IF(Nilai.LT.40.0) THEN Bobot = 'E' Mutu = 0 Ket = 'Gagal' ELSEIF(Nilai.LT.55.0) THEN Bobot = 'D' Mutu = 1 Ket = 'Kurang' ELSEIF(Nilai.LT.65.0) THEN Bobot = 'C' Mutu = 2 Ket = 'Cukup' ELSEIF(Nilai.LT.80.0) THEN Bobot = 'B' Mutu = 3 Ket = 'Memuaskan' ELSE Bobot = 'A' Mutu = 4 Ket = 'Terpuji' ENDIF Write(*,'(14X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(14X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(14X,A,A10)')'Keterangan :',Ket Write(*,'(/,14X,A,\)')'Masih Ada Data [Y/T] :' Read(*,'(A1)')Mad GOTO 5 Endif End 5.3. Perulangan Selama Kondisi Salah Perintah perulangan ini merupakan perulangan blok pernyataan yang sama, dimana blok pernyataan dikerjakan terlebih dahulu dan diakhiri dengan ekspresi (baru ditanya kondisi dari ekspresi). Jika kondisi tidak terpenuhi blok pernyataan dikerjakan kembali, tetapi kalau terpenuhi pengerjaan program dilanjutkan ke perintah berikutnya. Bentuk umum dari perintah ini adalah :

nl1 : : <blok pernyataan> : IF (ekspresi) GOTO nl2 GOTO nl1 nl2 :

Untuk perintah perulangan selama kondisi salah (Repeat-Until) dibentuk dari gabungan perintah Logikal IF dengan perintah GOTO. Diawal perulangan (nomor label awal perulangan) tidak diperlukan pemberian nilai terhadap variabel ekspresi. Sebelum memasuki perintah IF, variabel untuk ekspresi harus diberi nilai terlebih dahulu, apakah melalui

Page 32: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 32

perintah memasukan data dari keyboard atau pemberian nilai (assignment) dengan operasi aritematika sama dengan (=). Contoh program, merubah perulangan selama kondisi benar (While-DO) menjadi selama kondisi salah (Repeat-Until). Contoh 1. $DEBUG Integer Pilih Real Kel,Luas 30 Write(*,'(20X,''Menu Program Segitiga Siku-siku'')') Write(*,'(20X,''==============================='')') Write(*,'(/,20X,''Input Nilai Tinggi :'',\)') Read(*,'(F5.2)')Tinggi Write(*,'(20X,''Input Nilai Lebar :'',\)') Read(*,'(F5.2)')Lebar Write(*,'(20X,''1. Mencari Luas'')') Write(*,'(20X,''2. Mencari Keliling'')') Write(*,'(20X,''3. Selesai'')') Write(*,'(20X,''Pilih [1-3] :'',\)') Read(*,'(I1)')Pilih <- pemberian nilai baru kondisi IF(Pilih.EQ.1) THEN Luas = Panjang * Lebar / 2 Write(*,'(/,20X,''Luas Segitiga :'',F6.2)')Luas Pause 'Tekan Enter untuk lanjut ...!' ENDIF IF(Pilih.EQ.2) THEN Kel = Panjang + Lebar + (Panjang**2+Lebar**2)**0.5 Write(*,'(/,20X,''Keliling Segitiga :'',F6.2)')Kel Pause 'Tekan Enter untuk lanjut ...!' ENDIF IF(Pilih.GE.3) GOTO 40 GOTO 30 40 Stop 'Selesai' END Contoh 2. $DEBUG Character Bp*8, Nama*15, Bobot*1, Ket*10, Mad*1 Real Nilai 5 Write(*,'(24(/))') Write(*,'(14X,A)')'Predikat Nilai Fortran Mahasiswa' Write(*,'(14X,A)')'================================' Write(*,'(14X,A,\)')'Nomor BP :' Read(*,'(A8)')Bp Write(*,'(14X,A,\)')'Nama :' Read(*,'(A15)')Nama Write(*,'(14X,A,\)')'Nilai Akhir :' Read(*,'(F6.2)')Nilai IF(Nilai.LT.40.0) THEN Bobot = 'E' Mutu = 0 Ket = 'Gagal' ELSEIF(Nilai.LT.55.0) THEN Bobot = 'D' Mutu = 1 Ket = 'Kurang'

Page 33: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 33

ELSEIF(Nilai.LT.65.0) THEN Bobot = 'C' Mutu = 2 Ket = 'Cukup' ELSEIF(Nilai.LT.80.0) THEN Bobot = 'B' Mutu = 3 Ket = 'Memuaskan' ELSE Bobot = 'A' Mutu = 4 Ket = 'Terpuji' ENDIF Write(*,'(14X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(14X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(14X,A,A10)')'Keterangan :',Ket Write(*,'(/,14X,A,\)')'Masih Ada Data [Y/T] :' Read(*,'(A1)')Mad IF(Mad.EQ.'T'.OR.Mad.EQ.'t') GOTO 10 GOTO 5 10 End

Page 34: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 34

BAB VI F U N G S I

Funsi merupakan sub program untuk pengerjaan tertentu, dimana nama dari fungsi juga sebagai variabel. Fungsi didalam bahasa Fortran terbagi atas 3 (tiga) bagian, yaitu : - Fungsi perintah (Statment Function) - Fungsi eksternal (External Function) - Fungsi intrinsic (Instrinsic Function). 6.1. Fungsi Perintah (Statement Function) Fungsi perintah merupakan sebuah fungsi yang didefenisikan sebagai perintah tunggal. Fungsi perintah harus diletakkan sebelum perintah pengerjaan dan fungsi perintah ini tidak termasuk kedalam perintah pengerjaan, karena tidak dieksekusi untuk menghasilkan sesuatu. Fungsi perintah dieksekusi oleh perintah pengerjaan lainnya seperti Write dan yang dieksekusi oleh program bukan fungsinya tetapi adalah perintahnya. Bentuk umum dari fungsi ini adalah :

nama_fungsi([var_1]...[,var_n]) = operasi_aritematik Keterangan : - nama_fungsi adalah nama dari fungsi perintah.

- ([var_1]...[,var_n]) merupakan variabel yang menjadi param eter input yang akan diproses oleh fungsi dan nama dari variabel parameter pengerjaan dengan pemanggil boleh sama atau tidak dengan syarat tipe data harus sama. - operasi_aritematik sama dengan operasi aritematik pada bab sebelumnya. Contoh 1 membuat fungsi perintah untuk rumus luas dan keliling segitiga siku-siku, yaitu : Luas = Panjang * Tinngi / 2 Kel = Panjang + Tinggi + (Panjang**2+Tinggi**2)**0.5 Program $DEBUG Integer Pilih Real Kel,Luas Luas(Panjang,Tinggi) = Panjang * Tinggi / 2 Kel(panjang,Tinggi)=Panjang+Tinggi+(Panjang**2+Tingi**2)**0.5 5 Write(*,'(20X,''Menu Program Segitiga Siku-siku'')') Write(*,'(20X,''==============================='')') Write(*,'(/,20X,''Input Nilai Tinggi :'',\)') Read(*,'(F5.2)')Tinggi Write(*,'(20X,''Input Nilai Lebar :'',\)') Read(*,'(F5.2)')Panjang Write(*,'(20X,''1. Mencari Luas'')') Write(*,'(20X,''2. Mencari Keliling'')') Write(*,'(20X,''3. Selesai'')') Write(*,'(20X,''Pilih [1-3] :'',\)') Read(*,'(I1)') Pilih GOTO (10,100,1000) Pilih Goto 5 10 Write(*,'(/,20X,''Luas Segitiga :'',F6.2)')Luas(panjang,Tinggi) Pause 'Tekan Enter untuk lanjut ...!'

Page 35: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 35

Goto 5 100 Write(*,'(/,20X,''Keliling Segitiga :'',F6.2)')Kel(Panjang,Tinggi) Pause 'Tekan Enter untuk lanjut ...!' Goto 5 1000 Stop 'Selesai' END Contoh 2.

Nilai Akhir Matakuliah Fortran ====================== Nomor BP : xxxxxxxx Nama Mahasiswa : xxxxxxxxxxxxxxxxxxxxx Nilai Tugas : 999 Nilai Quiz : 999 Nilai Ujian Mid : 999 Nilai Ujian Akhir : 999 Nilai Akhir : 999.99 Nilai Bobot : x Nilai Mutu : 9 Keterangan : xxxxxxxxxx Masih Ada Data [Y/T] : x

Yang dibuat fungsi perintahnya adalah untuk mencari nilai akhir. $DEBUG Character Bp*8, Nama*15, Bobot*1, Ket*10, mad*1 Real NA NA(n1,n2,n3,n4)=0.1*N1+0.15*N2+0.35*N3+0.4*N4 mad='Y' 15 IF(Mad.Eq.'Y'.or.mad.Eq.'y') THEN c Menghapus layar Write(*,5) 5 Format(24(/)) c Buat judul Write(*,'(13X,A)')'Nilai Akhir Matakuliah Fortran' Write(*,'(13X,A)')'==============================' c Memasukan data dari keyboard Write(*,'(13X,A,\)')'Nomor BP :' Read(*,'(A8)')BP Write(*,'(13X,A,\)')'Nama mahasiswa :' Read(*,'(A15)')Nama Write(*,'(13X,A,\)')'Nilai Tugas :' Read(*,'(I3)')NT Write(*,'(13X,A,\)')'Nilai Quiz :' Read(*,'(I3)')NQ Write(*,'(13X,A,\)')'Nilai Ujian Mid :' Read(*,'(I3)')NM Write(*,'(13X,A,\)')'Nilai Ujian Akhir :' Read(*,'(I3)')NU c Proses mencari nilai akhir c Menampilkan Nilai Akhir Write(*,'(13X,A,F6.2)')'Nilai Akhir :',NA(NT,NQ,NM,NU) IF(NA(NT,NQ,NM,NU).LT.40.0) THEN Bobot = 'E' Mutu = 0 Ket = 'Gagal'

Page 36: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 36

ELSEIF(NA(NT,NQ,NM,NU).LT.55.0) THEN Bobot = 'D' Mutu = 1 Ket = 'Kurang' ELSEIF(NA(NT,NQ,NM,NU).LT.65.0) THEN Bobot = 'C' Mutu = 2 Ket = 'Cukup' ELSEIF(NA(NT,NQ,NM,NU).LT.80.0) THEN Bobot = 'B' Mutu = 3 Ket = 'Memuaskan' ELSE Bobot = 'A' Mutu = 4 Ket = 'Terpuji' ENDIF Write(*,'(13X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(13X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(13X,A,A10)')'Keterangan :',Ket Write(*,'(13X,A,\)')'Masih Ada Data [Y/T] : ' Read(*,'(A1)')mad Goto 13 ENDIF End 6.2. Fungsi Eksternal (External Function) Fungsi eksternal merupakan sebuah fungsi yang didefenisikan sebagai nama dari blok pernyataan. Fungsi eksternal diletakkan setelah perintah pengerjaan atau diakhir (diluar) program induk dan fungsi eksternal ini termasuk kedalam perintah pengerjaan, karena dieksekusi untuk menghasilkan sesuatu nilai. Fungsi eksternal akan dieksekusi oleh perintah pengerjaan lainnya seperti Write, IF, dan sebagainya, dan yang dieksekusi oleh program tidak hanya perintah pengerjaan tetapi juga fungsi itu sendiri. Bentuk umum dari fungsi ini adalah :

[tipe_data] FUNCTION nama_fungsi([var_1]...[,var_n]) : : <blok pernyataan> : END

Keterangan : - [tipe_data] adalah identifikasi tipe data secara eksplisit

- nama_fungsi adalah nama dari fungsi eksternal, tetapi tidak dapat berupa CHARACTER. - ([var_1]...[,var_n]) merupakan variabel yang menjadi param eter input yang akan diproses oleh

fungsi, nama variabel parameter Fungsi dengan parameteter pemanggil harus berbeda tetapi tipe data harus sama.

- <blok pernyataan>, merupakan kumpulan perintah untuk menda pat kan nilai dari untuk nama fungsi tersebut. Semua pernyataan (perintah dan argument) dapat dilakukan disini. Contoh 1 membuat fungsi perintah untuk rumus luas dan keliling segitiga siku-siku, yaitu :

Page 37: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 37

Luas = Panjang * Tinggi / 2 Kel = Panjang + Tinggi + (Panjang**2+Tinggi**2)**0.5 Program $DEBUG Integer Pilih 5 Write(*,'(20X,''Menu Program Segitiga Siku-siku'')') Write(*,'(20X,''==============================='')') Write(*,'(/,20X,''Input Nilai Tinggi :'',\)') Read(*,'(F5.2)')Tinggi Write(*,'(20X,''Input Nilai Lebar :'',\)') Read(*,'(F5.2)')Panjang Write(*,'(20X,''1. Mencari Luas'')') Write(*,'(20X,''2. Mencari Keliling'')') Write(*,'(20X,''3. Selesai'')') Write(*,'(20X,''Pilih [1-3] :'',\)') Read(*,'(I1)') Pilih GOTO (10,100,1000) Pilih Goto 5 10 Write(*,'(/,20X,''Luas Segitiga :'',F6.2)')Luas(panjang,Tinggi) Pause 'Tekan Enter untuk lanjut ...!' Goto 5 100 Write(*,'(/,20X,''Keliling Segitiga :'',F6.2)Kel(Panjang,Tinggi) Pause 'Tekan Enter untuk lanjut ...!' Goto 5 1000 Stop 'Selesai' END c fungsi eksternal untuk menghitung luas REAL FUNCTION Luas(P,T) Luas = P * T / 2 END c fungsi eksternal untuk menghitung keliling REAL FUNCTION Kel(pan,Ting) Kel=Pan+Ting+(Pan**2+Ting**2)**0.5 END Contoh 2, masalahnya sama dengan contoh dua pada fungsi perintah (Statment Function). Yang dibuat fungsi eksternalnya adalah untuk mencari nilai akhir, yaitu : $DEBUG Character Bp*8, Nama*15, Bobot*1, Ket*10, mad*1 mad='Y' 15 IF(Mad.Eq.'Y'.or.mad.Eq.'y') THEN c Menghapus layar Write(*,5) 5 Format(24(/)) c Buat judul Write(*,'(13X,A)')'Nilai Akhir Matakuliah Fortran' Write(*,'(13X,A)')'==============================' c Memasukan data dari keyboard Write(*,'(13X,A,\)')'Nomor BP :' Read(*,'(A8)')BP Write(*,'(13X,A,\)')'Nama mahasiswa :' Read(*,'(A15)')Nama Write(*,'(13X,A,\)')'Nilai Tugas :' Read(*,'(I3)')NT Write(*,'(13X,A,\)')'Nilai Quiz :' Read(*,'(I3)')NQ

Page 38: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 38

Write(*,'(13X,A,\)')'Nilai Ujian Mid :' Read(*,'(I3)')NM Write(*,'(13X,A,\)')'Nilai Ujian Akhir :' Read(*,'(I3)')NU c Proses mencari nilai akhir c Menampilkan Nilai Akhir Write(*,'(13X,A,F6.2)')'Nilai Akhir :',NA(NT,NQ,NM,NU) IF(NA(NT,NQ,NM,NU).LT.40.0) THEN Bobot = 'E' Mutu = 0 Ket = 'Gagal' ELSEIF(NA(NT,NQ,NM,NU).LT.55.0) THEN Bobot = 'D' Mutu = 1 Ket = 'Kurang' ELSEIF(NA(NT,NQ,NM,NU).LT.65.0) THEN Bobot = 'C' Mutu = 2 Ket = 'Cukup' ELSEIF(NA(NT,NQ,NM,NU).LT.80.0) THEN Bobot = 'B' Mutu = 3 Ket = 'Memuaskan' ELSE Bobot = 'A' Mutu = 4 Ket = 'Terpuji' ENDIF Write(*,'(13X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(13X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(13X,A,A10)')'Keterangan :',Ket Write(*,'(13X,A,\)')'Masih Ada Data [Y/T] : ' Read(*,'(A1)')mad Goto 13 ENDIF End REAL FUNCTION NA(n1,n2,n3,n4) NA=0.1*N1+0.15*N2+0.35*N3+0.4*N4 END 6.3. Fungsi Intrinsik (Intrinsic Function) Fungsi intrinsik merupakan fungsi pustaka yang telah terdeklarasi pada Library Compiler Fortran. Fungsi ini disebut juga dengan istilah fungsi standar (Standard Function), dimana fungsi ini tidak perlu dideklarasikan dan didefinisikan pada program Fortran. Programmer tinggal memakai saja bila diperlukan. 6.3.1. Fungsi Konversi Tipe Data Pada fungsi ini memiliki satu variabel parameter masukan (input) yang diproses oleh fungsi tersebut.

Tabel 6-1. Fungsi Konversi Tipe Data. Nama Fungsi Tipe Data

Parameter Tipe Data Hasil

Keterangan

INT(X) Real*4 Integer Integer

Merubah bilangan desimal ke bilangan bulat

IFIX(X) Real*4 Integer Merubah bilangan real ke pecahan IDINT(X) Real*8 Integer Merubah bilangan real ketetapan ganda

ke bil. Bulat

Page 39: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 39

REAL(X) Real*4 Integer

Real Merubah bilangan ke bilangan pecahan

FLOAT(X) Integer Real merubah bil.bulat ke bil.pecahan CHAR(X) Integer Character Merubah bilangan ke karakter ICHAR(X) Character Integer Merubah karakter ke bilangan bulat SNGL(X) Real*8 Real*4 Merubah bilangan pecahan ganda ke

tunggal DBLE(X) Integer

Real*4 Real*8

Real*8 Merubah nilai bilangan ke bilangan pecahan ke tetapan ganda

Contoh. $DEBUG Write(*,'(5X,''Masukan bilangan bulat (I) ='',\)') Read(*,'(I2)') I Write(*,'(5X,''Masukan bilangan pecahan (A) ='',\)') Read(*,'(F5.2)') A Write(*,'(5X,''Nilai INT(A) ='',I5)')INT(A) Write(*,'(5X,''Nilai IFIX(A) ='',I5)')IFIX(A) Write(*,'(5X,''Nilai IDINT(A) ='',I5)')IDINT(A) Write(*,'(5X,''Nilai SNGL(A) ='',F7.2)')SNGL(A) Write(*,'(5X,''Nilai ICHAR(I) ='',A5)')ICHAR(I) Write(*,'(5X,''Nilai REAL(I) ='',F7.2)')Real(I) END 6.3.2. Fungsi Pembulatan Pada fungsi ini memiliki satu variabel parameter masukan (input) yang diproses oleh fungsi tersebut.

Tabel 6-2. Fungsi Pembulatan.

Nama Fungsi

Tipe Data Parameter

Tipe Data Hasil

Keterangan

AINT(X) Real*4 Real*4 Menghilangkan nilai pecahan (desimal) DINT(X) Real*8 Real*8 Menghilangkan nilai desimal (pecahan) ANINT(X) Real*4 Real*4 Membulatkan ke nilai terdekat DNINT(X) Real*8 Real*8 Membulatkan ke nilai terdekat NINT(X) Real*4 Integer Membulatkan ke nilai terdekat IDNINT(X)

Real*8 Integer Membulatkan ke nilai terdekat

Catatan : yang dibulatkan khusus nilai desimal atau pecahannya saja menjadi nilai bilangan bulat Contoh : $DEBUG Real*8 A A=123456789.87 B=1234.567 Write(*,'(5X,''Nilai AINT(B) ='',F8.2)')AINT(B) Write(*,'(5X,''Nilai ANINT(B) ='',F8.2)')ANINT(B) Write(*,'(5X,''Nilai NINT(B) ='',I8)')NINT(B) Write(*,'(5X,''Nilai DINT(A) ='',F12.2)')DINT(A) Write(*,'(5X,''Nilai DNINT(A) ='',F12.2)')DNINT(A) Write(*,'(5X,''Nilai IDNINT(A) ='',I12)')IDNINT(A) END

Page 40: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 40

Hasil : Nilai AINT(B) = 1234.00 Nilai ANINT(B) = 1235.00 Nilai NINT(B) = 1235.00 Nilai DINT(A) = 123456789.00 Nilai DNINT(A) = 123456790.00 Nilai IDNINT(A) = 123456790.00 6.3.3. Fungsi Absolut Pada fungsi ini berfungsi untuk memutlakan nilai bilangan (menghilangkan tanda minus).

Tabel 6-3. Fungsi Absolut. Nama Fungsi

Tipe Data Parameter

Tipe data Hasil

Keterangan

IABS(X) Integer Integer Memutlakkan bilangan bulat ABS(X) Real*4 Real*4 Memutlakkan bilangan bulat DABS(X) Real*8 Real*8 Memutlakkan bilangan Real ganda

Contoh. $DEBUG I=1234 J=2000 Write(*,'(5X,''Selisi I = '',I5,\)')I Write(*,'(5X,''dengan J = '',I5,\)')J K=IABS(i-j) Write(*,'(5X,''sama dengan = '',I5)')K END Hasil : Selisih I = 1234 dengan J = 2000 sama dengan = 8766 6.3.4. Fungsi Sisa Pembagian Fungsi sisa pembagian merupakan nilai sisa dari operasi pembagian bilangan.

Tabel 6-4. Fungsi Sisa Pembagian. Nama Fungsi Tipe Data

Parameter Tipe Data Hasil

Keterangan

MOD(I,J) Integer Integer Sisa pembagian bilan bulat AMOD(X,Y) Real*4 Real*4 Sisa pembagian bilan Real tunggal DMOD(X,Y) Real*8 Real*8 Sisa pembagian bilan Real ganda

Contoh : $DEBUG I=10 J=4 K=MOD(I,J) Write(*,'(5X,I3,''bagi'',I3,''sisa sama dengan '',I3)')I,J,K END

Page 41: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 41

6.3.5. Fungsi Pengiriman Tanda Fungsi pengiriman tanda adalah merubah tanda (+ atau -) kedalam nilai variabel pemberian nilai dari yang memberi nilai. Variabel pemberi tanda diletakkan setelah koma dan yang mendapat tanda sebelum koma.

Tabel 6-5. Fungsi Pengiriman Tanda.

Nama Fungsi Tipe Data Parameter

Tipe Data Hasil

Keterangan

ISIGN(I,J) Integer Integer Pengiriman untuk Bil. Bulat SIGN(X,Y) Real*4 Real*4 Pengiriman tanda untuk bil.real tung DSIGN(X,Y) Real*8 Real*8 Pengiriman tanda untuk bil.real ganda

Contoh : $DEBUG I=-10 J=4 K=ISIGN(I,J) Write(*,'(5X,''Nilai I'',I3,''menjadi '',I3)')I,K Write(*,'(5X,''karena J='',I3,'' positif'')')J END Hasil: Nilai I -10 menjadi 10 karena J= 4 positif 6.3.6. Fungsi Perbedaan Nilai Bilangan Fungsi perbedaan tanda merupakan fungsi untuk mencari selisih nilai dari 2 (dua) buah nilai bilangan atau variabel, jika selisihnya positif maka nilai dari fungsi ini sesuai dengan bilangan nilai selisihnya, tetapi jika nilai selisihnya negatif maka nilai dari fungsi sama dengan 0 (nol).

Tabel 6-6. Fungsi Perbedaan Nilai Bilangan.

Nama Fungsi Tipe Data Parameter

Tipe Data Hasil

Keterangan

IDIM(I,J) Integer Integer Untuk data bilangan bulat (integer) DIM(X,Y) Real*4 Real*4 Untuk data real tunggal DDIM(X,Y) Real*8 Real*8 Untuk data bilangan real ganda

Contoh : $DEBUG I=4 J=-10 K=IDIM(I,J) Write(*,'(5X,''Selisih I='',I3,''dengan J='',I3)')I,J Write(*,'(5X,''adalah K='',I3)')K END Hasil : Selisih I= 4 dengan J=-10 adalah K= 14

Page 42: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 42

6.3.7. Fungsi Mencari Nilai Terbesar Fungsi ini membandingkan nilai dari variabel parameter yang ada dan mencari mana nilai yang tertinggi (terbesar). Variabel parameter (yang dibandingkan) bisa banyak.

Tabel 6-7. Fungsi Mencari Nilai Terbesar. Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan MAX0(i,j,…) Integer Integer Untuk Data Bilangan bulat AMAX1(x,y,…) Real*4 Real*4 Untuk data bilangan pecahan

ketetaoan tunggal AMAX0(i,j,…). Integer Real*4 Untuk data bilangan bulat ke

pecahan MAX1(x,y,..) Real*4 Integer Untuk data bilangan pecahan ke

bilangan bulat DMAX1(x,y,…) Real*8 Real*8 Untuk data bilangan real ganda Contoh : $DEBUG I=4 J=9 K=7 L=-10 M=2 N=6 Ma=Max0(I,J,K,L,M,N) Write(*,'(5X,''Nilai Tertinggi adalah ='',I3)')ma END Hasil : Nilai Tertinggi adalah = 9 6.3.8. Fungsi Mencari Nilai Terkecil Fungsi ini membandingkan nilai dari variabel parameter yang ada dan mencari mana nilai yang terkecil (terendah). Variabel parameter (yang dibandingkan) bisa banyak.

Tabel 6-8. Fungsi Mencari Nilai Terkecil.

Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan MIN0(i,j,…) Integer Integer Untuk Data Bilangan bulat AMIN1(x,y,…) Real*4 Real*4 Untuk data bilangan pecahan

ketetaoan tunggal AMIN0(i,j,…). Integer Real*4 Untuk data bilangan bulat ke

pecahan MIN1(x,y,..) Real*4 Integer Untuk data bilangan pecahan ke

bilangan bulat DMIN1(x,y,…) Real*8 Real*8 Untuk data bilangan real ganda Contoh : $DEBUG I=4 J=9 K=7 L=-10

Page 43: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 43

M=2 N=6 Mi=Min0(I,J,K,L,M,N) Write(*,'(5X,''Nilai Terendah adalah ='',I3)')mi END Hasil : Nilai Terendah adalah = -10 6.3.9. Fungsi Perkalian Dua Variabel Bilangan Real Fungsi ini mengalikan (*) dua buah bilangan real, yang nilai dari hasil perkalian tersebut disimpan didalam nama fungsi.

Tabel 6-9. Fungsi Perkalian Dua Variabel Bilangan Real Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan DPROD(x,y) Real*4 Real*8 Untuk data bilangan pecahan

tunggal ke ganda Contoh : $DEBUG X1=1234.00 Y1=5678.00 Z1=DPROD(X1,Y1) Write(*,'(5X,F8.2,'' x '',F8.2,'' = '',F12.2)')X1,Y1,Z1 END Hasil : 1234.00 x 5678.00 = 7006652.00 6.3.10. Fungsi Akar Kuadrat Fungsi ini mengcari akar kuadrat sebuah bilangan pecahan (real).

Tabel 6-10. Fungsi Akar Kuadrat Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan SQRT(x) Real*4 Real*4 Untuk data bilangan pecahan

tunggal DSQRT(x) Real*8 Real*8 Untuk data bilangan pecahan

ganda Contoh : $DEBUG Y1=25.00 Z1=SQRT(Y1) Write(*,'(5X,''Akar dari'',F8.2,'' = '',F8.2)')Y1,Z1 END Hasil : Akar dari 25.00 = 5.00 6.3.11. Fungsi Eksponensial Fungsi ini mencari nilai eksponensial dari bilangan real, dengan rumus eX (e=2,71828).

Page 44: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 44

Tabel 6-11. Fungsi Eksponensial Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan EXP(x) Real*$ Real*4 Untuk data bilangan pecahanl

tunggal DEXP(x) Real*8 Real*8 Untuk data bilangan pecahan

ganda Contoh : $DEBUG Y1=2.00 Z1=EXP(Y1) Write(*,'(5X,''Eksponensial dari'',F8.2,'' = '',F8.5)') Y1,Z1 END Hasil : Eksponensial dari 2.00 = 7.38904 6.3.12. Fungsi Logarithma Fungsi ini mencari nilai logarithma sebuah variabel bilangan.

Tabel 6-12. Fungsi Logarithma Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan ALOG(x) Real*$ Real*4 Loge(X) Untuk data bilangan

pecahanl tunggal DLOG(x) Real*8 Real*8 Loge(X) Untuk data bilangan

pecahan ganda ALOG10(x) Real*$ Real*4 Log10(X) Untuk data bilangan

pecahanl tunggal DLOG10(x) Real*8 Real*8 Log10(X) Untuk data bilangan

pecahan ganda Catatan : Loge adalah Logarithma natural dan Log10 ada lah Logarithma biasa Contoh : $DEBUG Y1=1000.00 Z1=ALOG(Y1) Write(*,'(5X,''Logarithma dari'',F8.2,'' = '',F8.4)') Y1,Z1 END Hasil : Logarithma dari 1000.00 = 3.0000 6.3.13. Fungsi Trigonometri Fungsi ini mencari nilai derjad sebuah sudut, satuan dari nilai sudut hasil fungsi ini adalah derjad radian. Maka variabel atau nilai yang akan difungsikan harus terlebih dahulu dirubah kedalam derjad degree (biasa), dengan rumus : 1 derjad biasa (degree) = phi/180 radian atau sama dengan 1/57,2958 radian.

Tabel 6-13. Fungsi Trigonometri Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan

Page 45: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 45

SIN(x) Real*4 Real*4 Sinus X DSIN(x) Real*8 Real*8 Sinus X COS(x) Real*4 Real*4 Cosinus X DCOS(x) Real*8 Real*8 Cosinus X TAN(x) Real*4 Real*4 Tangen X DTAN(x) Real*8 Real*8 Tangen X ASIN(x) Real*4 Real*4 ArcSinus X DASIN(x) Real*8 Real*8 ArcSinus X ACOS(x) Real*4 Real*4 ArcCosinus X DACOS(x) Real*8 Real*8 ArcCosinus X ATAN(x) Real*4 Real*4 ArcTangen X DATAN(x) Real*8 Real*8 ArcTangen X ATAN2(x,y) Real*4 Real*4 ArcTangen X/Y DATAN2(x,y) Real*8 Real*8 ArcTangen X/Y SINH(x) Real*4 Real*4 Sinus X hiperbolik DSINH(x) Real*8 Real*8 Sinus X hiperbolik COSH(x) Real*4 Real*4 Cosinus X hiperbolik DCOSH(x) Real*8 Real*8 Cosinus X hiperbolik TANH(x) Real*4 Real*4 Tangen X hiperbolik DTANH(x) Real*8 Real*8 Tangen X hiperbolik Contoh : $DEBUG Y1=60.00 Z1=COS(Y1/57.2958) Write(*,'(5X,''Nilai Cosinus dari '',F8.2,'' = '',F8.4)') Y1,Z1 END Hasil : Nilai Cosinus dari 60.00 = .5000 6.3.14. Fungsi Logika Karakter Fungsi ini membandingkan dua buah data karakter, dan nilai fungsi ini merupakan hasil dari perbandingan tersebut dalam bentuk tipe data logika (.T. untuk benar dan .F. untuk salah). Cara perbandingan yang dilakukan adalah membandingkan nilai numerik kode ASCII dari nilai data tersebut, mulai dari huruf pertama sampai akhir.

Tabel 6-14. Fungsi Logika Karakter

Nama Fungsi Tipe Data Parameter Tipe Data Hasil Keterangan LGE(h1,h2) Character Logical Besar atau sama dengan (>=) LGT(h1,h2) Character Logical Besar atau sama dengan (>) LLE(h1,h2) Character Logical Besar atau sama dengan (<=) LLT(h1,h2) Character Logical Besar atau sama dengan (<) Contoh : $DEBUG CHARACTER*8 Anak1, Anak2 Anak1='Riandy' Anak2='Arrianda' Write(*,'(5X,''Besar dari : '',L1)')LGT(Anak1,Anak2) Write(*,'(5X,''Besar sama dengan : '',L1)') LGE(Anak1,Anak2) Write(*,'(5X,''Kecil sama dengan : '',L1)') LLE(Anak1,Anak2)

Page 46: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 46

Write(*,'(5X,''Kecil dari : '',L1)')LTT(Anak1,Anak2) END Hasil : Besar dari : .T. Besar sama dengan : .T. Kecil sama dengan : .F. Kecil dari : .F.

Page 47: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 47

BAB VII PROGRAM INDUK DAN PROSEDUR

Suatu program yang lengkap dapat dibagi-bagi berdasarkan sub pengerjaan tertentu (dipecah-pecah), dimana dari kesuluruhan pecahan ini saling mendukung dan saling keterkaitan dalam mencapai suatu tujuan. Pecahan-pecahan ini terdiri dari 1 (satu) sub induk program (main) dan beberapa bagian program anak yang dinamakan dengan prosedur. 7.1. Perintah PROGRAM Sub induk program utama (main) dapat diberi nama identitasnya dengan memakai perintah PROGRAM dan juga boleh tidak dibuat. Bentuk umumnya adalah :

PROGRAM Nama_program Nama_program adalah nama identitas sebuah program, dimana nama ini boleh bebas selai dari pada perintah atau kata-kata yang sudah terdefinisi didalam Bahasa Fortran. Cara pemberian nama program ini sama dengan pemberian nama variabel sebuah data. Jika nama program tidak dibuat maka Bahasa Fortran menganggap nama dari program tersebut adalah MAIN. Contoh : PROGRAM Nilai PROGRAM Latihan 7.2. Perintah SUBROUTINE Dan CALL Prosedur adalah kumpulan pernyataan yang merupakan subprogam (subrutin bagian) yang terpisah dari program utama (induk). Biasanya prosedur ini tidak selalu atau sering dikerjakan dalam eksekusi program, hanya pada saat-saat dibutuhkan saja. Didalam prosedur, kumpulan pernyataan mendukung suatu tujuan tertentu yang merupakan sub atau bagian tujuan dari program secara keseluruhan. Procedur didalam program Fortran diletakkan dibawah program induk, yang dipanggil dengan memakai perintah CALL. Dalam pembuatan prosedur digunakan perintah SUBROUTINE dan diakhiri dengan END atau RETURN, dengan bentuk umum penulisannya sebagai berikut : SUBROUTINE nama_prosedur [(para_1[,para_2]...[,para_n])] : : END Keterangan: - nama_prosedur adalah nama dari rutin bagian, yang cara pemberian namanya sama

dengan pemberian nama variabel. - [(para_1[,para_2]...[,para_n])] adalah nama variabel parameter yang digunakan sebagai

data masukan untuk prose dur (input) atau data hasil keluaran dari prosedur (output) yang akan diproses atau dieksekusi didalam prose dur. Variabel parameter ini boleh ada dan boleh tidak sesuai dengan kebutuhan program, jika ada maka perintah CALL untuk memanggil prosedur tersebut juga harus mema kai variabel parameter sesuai dengan jumlahnya. Nama variabel parameter pada SUBROUTINE dengan CALL boleh sama boleh tidak, dengan syarat tipe variabel yang bersesuaian

Page 48: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 48

(urutan) harus sama. Bentuk umum pemanggilan prosedur adalah : CALL nama_prosedur [(para_1[,para_2]...[,para_n])] : : END Didalam prosedur juga dapat memanggil prosedur lainnya, dengan syarat prosedur yang dipanggil tersebut harus terletak dibawah rutin bagian pemanggil. Juga didalam prosedur dapat dilakukan deklarasi atau pemesanan variabel secara eksplisit. Contoh : $DEBUG Character Bp*8, Nama*15, mad*1 mad='Y' 15 IF(Mad.Eq.'Y'.or.mad.Eq.'y') THEN c Menghapus layar Write(*,5) 5 Format(24(/)) c Buat judul Write(*,'(13X,A)')'Nilai Akhir Matakuliah Fortran' Write(*,'(13X,A)')'==============================' c Memasukan data dari keyboard Read(*,'(A8)')BP Write(*,'(13X,A,\)')'Nama mahasiswa :' Read(*,'(A15)')Nama CALL Isi(NT,NQ,NM,NU) Akhir=0.1*NT+0.15*NQ+0.35*NM+0.4*NU CALL Tampil(Akhir) Write(*,'(13X,A,\)')'Masih Ada Data [Y/T] : ' Read(*,'(A1)')mad Goto 13 ENDIF End c Prosedur atau sub rutinnya disebelah halam berikutnya SUBROUTINE Isi (NT,NQ,NM,NU) Write(*,'(13X,A,\)')'Nilai Tugas :' Read(*,'(I3)')NT Write(*,'(13X,A,\)')'Nilai Quiz :' Read(*,'(I3)')NQ Write(*,'(13X,A,\)')'Nilai Ujian Mid :' Read(*,'(I3)')NM Write(*,'(13X,A,\)')'Nilai Ujian Akhir :' Read(*,'(I3)')NU END SUBROUTINE Tampil(A) Character Bobot*1, Ket*10 Write(*,'(13X,A,F6.2)')'Nilai Akhir :',A IF(A.LT.40.0) THEN Mutu = 0 Bobot = 'E' Ket = 'Gagal' ELSEIF(A.LT.55.0) THEN Mutu = 1 Bobot = 'D'

Page 49: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 49

Ket = 'Kurang' ELSEIF(A.LT.65.0) THEN Mutu = 2 Bobot = 'C' Ket = 'Cukup' ELSEIF(A.LT.80.0) THEN Mutu = 3 Bobot = 'B' Ket = 'Memuaskan' ELSE Mutu = 4 Bobot = 'A' Ket = 'Terpuji' ENDIF Write(*,'(13X,A,I1)')'Nilai Mutu :',Mutu Write(*,'(13X,A,A1)')'Nilai Bobot :',Bobot Write(*,'(13X,A,A10)')'Keterangan :',Ket RETURN

Page 50: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 50

BAB VIII A R R A Y

Array adalah variabel tempat penampungan jajaran nilai data yang sejenis (tipe, panjang). Nilai-nilai data tersebut disimpan dengan memakai satu nama variabel dan setiap nilai varibel tersebut dibedakan dengan indek jajaran nama variabelnya. Nilai indek merupakan bilangan bulat yang dapat bernilai positif dan juga negatif (+ dan -). Perintah Fortran untuk memesan variabel array digunakan perintah DIMENSION, yang bentuk umum penulisannya adalah sebagai berikut :

DIMENSION Var_array(dim_1[,dim_2]...[,dim_7]) Keterangan : - Var_array : merupakan nama variabel array, cara pemberian nama array sama dengan cara

pemberian nama variabel. Untuk tipe data dari variabel tersebut dapat dilakukan secara implisit atau secara eksplisit sebelum deklarasi array.

- dim_1[,dim_2]...[[,dim_7] : merupakan jumlah indek jajaran data yang dapat ditampung oleh jajaran array. Dalam 1 variabel array dapat berdimensi 1

(satu) sampai dengan 7 (tujuh) dan ukuran maksimum pemakaian memory hanya 64 kilo byte (65536 byte).

Dalam satu perintah DIMENSION dapat dilakukan lebih dari satu variabel array dengan cara menampahkan tanda koma (,) didepan nama variabel berikutnya. Contoh : Character nama*15, bobot*1 Real nilai Dimension nama(45),bobot(45), nilai(45,9), J(-3) Pembacaan dan menampilkan data array dapat dilakukan dengan cara penerapan perulangan dari perintah DO didalam READ atau WRITE (Implied do list). Contoh : $Debug Dimension Nilai(5) Write(*,'(5X,''Masukan nilai bilang integer 5 kali'')') Read(*,'(5(5X,I2))') (Nilai(I), I=1,5) Write(*,'(5X,''Data Yang Dimasukan adalh'')') Write(*,'(5(5X,I2))') (Nilai(I), I=1,5) End Kasus : Sekolah Tinggi Manajemen Informatika & Komputer (STMIK) Yayasan Perguruan Tinggi Komputer (YPTK) Padang

KARTU HASIL STUDI =================

Nobp / Nama : xxxxxxxx / xxxxxxxxxxxxxxx Semester : III No Kode Nama Mata Kuliah SKS Nilai Mutu x SKS Bobot Mutu 99 : :

Xxxx : :

Xxxxxxxxxxxxxxxxxxxx : :

9 : :

X : :

9 : :

999 : :

Jumlah 99 999

Page 51: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 51

Indeks Prestasi : 9.99 SKS Yad : 99 Program: $DEBUG c Deklarasi data Character nobp*8, nama*15, kode*4, kuliah*15,bobot*1 Integer Sks,Syad real ip Dimension kode(7), kuliah(7), bobot(7), Sks(7) c Tahap isi data Write(*,'(24(/))') Write(*,'(10x,''Entri Data Mahasiswa'')') Write(*,'(10x,''===================='')') Write(*,'(10x,''Nomor BP :'',\)') Read(*,'(A8)')nobp Write(*,'(10x,''Nama Mahasiswa :'',\)') Read(*,'(A15)')nama DO 10 n=1,7 Write(*,'(10x,''Matakuliah ke-:'',I1)')n Write(*,'(10x,''Kode Matakuliah :'',\)') Read(*,'(A15)')kode(n) Write(*,'(10x,''Nama Matakuliah :'',\)') Read(*,'(A15)')nama(n) Write(*,'(10x,''S k s :'',\)') Read(*,'(A15)')Sks(n) Write(*,'(10x,''Nilai [A,B,C,D,E] :'',\)') Read(*,'(A15)')bobot(n) 10 Continue c Tahap informasi Write(*,'(24(/))') Write(*,'(1X,A)')'Sekolah Tinggi Manajemen Informatika & Komputer (STMIK)' Write(*,'(1X,A)') 'Yayasan Perguruan Tinggi Komputer (YPTK) Padang' Write(*,'(1X,A,A8,A,A15,A)')'Nobp / Nama :',nobp,' / ','Semester = III'

Write(*,'(1X,A)')’------------------------------------------------------------------------------ ---------' Write(*,'(1X,A)')'¦ No ¦ Kode ¦ Nama Mata Kuliah ¦ SKS | N i l a i ¦ ¦'

Write(*,'(1X,A)')'¦ ¦ ¦ ¦ |---------------- - ¦ MutuxSks ¦' Write(*,'(1X,A)')'¦ ¦ ¦ ¦ ¦ Bobot ¦ Mutu ¦ ¦' Write(*,'(1X,A)')’------------------------------------------------------------------------------------ ---¦’ Jsks=0 Jms=0 DO 20 n=1,7 If(bobot(n).eq.'A') Then mutu=4 Elseif(bobot(n).eq.'B') Then mutu=3 Elseif(bobot(n).eq.'C') Then mutu=2 Elseif(bobot(n).eq.'D') Then mutu=1 Else mutu=0 Endif Ms=Mutu*Sks(n) Jsks=Jsks+Sks(n) Jms=Jms+ms

Page 52: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 52

Write(*,'(1X,A,\)')'¦ ' Write(*,'(I2,\)')n Write(*,'(A,\)')'¦ ' Write(*,'(A4,\)')Kode(n) Write(*,'(A,\)')' ¦ ' Write(*,'(A15,\)')kuliah(n) Write(*,'(A,\)')' ¦ ' Write(*,'(I1,\)')sks(n) Write(*,'(A,\)')' ¦ ' Write(*,'(A1,\)')bobot(n) Write(*,'(A,\)')' ¦ ' Write(*,'(I1,\)')mutu Write(*,'(A,\)')' ¦ ' Write(*,'(I2,\)')ms Write(*,'(A)')' ¦' 20 Continue Write(*,'(1x,A)') ’------------------------------------------------------------------------------------ ----' Write(*,'(1X,A,I2,A,I3,A)')'¦ Jumlah ¦ ',Jsks,' ¦ ¦ -,Jsm,' ¦' Write(*,'(1X,A)') ’----------------------------------------------------------------------------------- -----' Ip=Jsm/Jsks If(Ip.GE.0.00) Syad=12 If(Ip.GE.2.00) Syad=15 If(Ip.GE.2.50) Syad=18 If(Ip.GE.2.75) Syad=21 If(Ip.GE.3.25) Syad=24 Write(*,'(1X,A,F4.2)')'Indeks Prestasi : ',Ip Write(*,'(1X,A,I2)')'SKS Yad : ',Syad End

Page 53: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 53

BAB IX F I L E

File adalah tempat penampungan berkas data. Didalam program Fortran File ini digunakan untuk pengenal nomor alat unit untuk menampung data. Nomor alat unit ini berupa bilangan integer dari 1 (satu) sampai dengan 32767. Perintah-perintah yang berhubungan dengan file ini terdiri dari OPEN, CLOSE, WRITE, READ, ENDFILE, BACKSPACE, dan REWIND. Dan yang paling menentukan dalam file ini adalah perintah OPEN. Perintah OPEN digunakan untuk membuka file atau mengaktifkan file. Bentuk umum perintah ini adalah : OPEN(nu[,FILE='nfile'][,STATUS='status'][,ACCESS='akses'][,FORM='format'] [,RECL=panjang]) Keterangan : - nu adalah nomor unit antara 1 sampai dengan 32767. - nfile adlah nama file yang akan diberikan. Nama file ter-

diri atas 2 bagian yaitu PRN untuk mencetak ke printer dan nama bebas yang diberikan oleh programmer. Nama bebas panjangnya maksimal 8 digit dan tidak boleh ada spasi kosong.

- stautus terdiri atas 2 (dua)bagian yaitu :

NEW, yaitu digunakan untuk file yang belum pernah dibuka atau jika status sama dengan NEW maka data yang lama hilang (over write). OLD, (default) yaitu digunakan untuk file yang telah pernah digunakan dan fungsinya menambah data ke dalam file.

- akses adalah metoda pengaksesan yang dilakukan. Akses ini terbagi 2 bagian, yaitu :

SEQUENTIAL (default), yaitu metoda pengaksesan secara urut.

DIRECT, yaitu metoda pengaksesan secara acak atau random. - format adalah bentuk format record, yang terdiri dari FORMATTED untuk file sequential

(urut), UNFORMATTED untuk file direct (acak) dan BINERY untuk data yang disimapan dalam bentuk bilang bit (binary digit).

- panjang adalah panjang digit dalam satu record, yang digunakan pada file yang berakses deirect

(acak). 9.1. Mencetak Ke Printer Untuk membuat laporan yang dicetak ke printer digunakan perintah Open dengan nama filenya adalah 'PRN' dan perintah Write. Contoh : OPEN(1,FILE='PRN') Pada setiap pencetakan pada perintah Write, nomur unit yang digunakan harus sama dengan nomor unit pada OPEN. Dan huruf pertama dalam argument yang dicetak dapat menentukan hasil cetakan, seperti : - Angka 1 (satu), menyebabkan pencetakan akan mencetak pada halaman baru.

Page 54: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 54

Contoh :

OPEN(1,File='PRN') Write(1,'(''1Teori Pemrograman Terstruktur'')') Write(1,'(''1Bahasa Fortran'')')

Hasilnya : Maka "Teori Pemrograman Terstruktur" dan "Bahasa Fortran" akan dicetak masing-masing pada satu halaman. - Tanda + (tambah), menyebabkab terjadinya tumpang tindih pencetakan (over write). Contoh :

OPEN(1,File='PRN') Write(1,'(''1Teori Pemrograman Terstruktur'')')

Write(1,'(''+Bahasa Fortran'')') Hasilnya : Maka "Teori Pemrograman Terstruktur" dan "Bahasa Fortran" akan dicetak pada baris dan kolom yang sama atau kata-kata "Bahasa Fortran" akan menindih kata-kata "Teori Pemrogra". Disamping cara diatas juga dapat diatur bentuk huruf pencetakan, yaitu dengan mengkonversikan nilai karakter ke angka.

Tabel 9-1. Angka pengatur pencetakan.

Angka Efek ke pencetakan pada printer 14 15 18 20

77083 11547 17691 17947 21275 21531

huruf menjadi besar huruf menjadi kecil huruf menjadi normal dari huruh kecil huruf menjadi normal dari huruf besar garis bawah aktif garis bawah pasif huruf tebal aktif huruf tebal pasif huruf naik keatas (pangkat) aktif huruf naik keatas (pangkat) pasif

Contoh : $Debug Character*3 a,b,a1,b1 Open(2,File='PRN') a=14 b=20 Write(2,'(1x,A3,''Huruf Besar'',a3)')a,b a=15 b=18 Write(2,'(1x,A3,''Huruf Kecil'',a3)')a,b a=77083 b=11547 Write(2,'(1x,A3,''Garis Bawah'',a3)')a,b a=17691 b=17947 Write(2,'(1x,A3,''Huruf Tebal'',a3)')a,b a=21275 b=21531 Write(2,'(1x,A3,''Naik 1/2 space'',a3)')a,b

Page 55: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 55

a=14 b=20 a1=77083 b1=11547 Write(2,'(1x,2(A3),''HurufBesardigarisbawah'',2(a3))') a1,1,b1,b End Hasil : Huruf Besar Huruf Kecil Garis Bawah Huruf Tebal Naik 1/2 space HurufBesardigarisbawah Contoh kasus : $DEBUG c Deklarasi data Character nobp*8, nama*15, kode*4, kuliah*15,bobot*1 Integer Sks,Syad real ip Open(2,File='PRN') Dimension kode(7), kuliah(7), bobot(7), Sks(7) c Tahap isi data Write(*,'(24(/))') Write(*,'(10x,''Entri Data Mahasiswa'')') Write(*,'(10x,''================'')') Write(*,'(10x,''Nomor BP :'',\)') Read(*,'(A8)')nobp Write(*,'(10x,''Nama Mahasiswa :'',\)') Read(*,'(A15)')nama DO 10 n=1,7 Write(*,'(10x,''Matakuliah ke-:'',I1)')n Write(*,'(10x,''Kode Matakuliah :'',\)') Read(*,'(A15)')kode(n) Write(*,'(10x,''Nama Matakuliah :'',\)') Read(*,'(A15)')nama(n) Write(*,'(10x,''S k s :'',\)') Read(*,'(A15)')Sks(n) Write(*,'(10x,''Nilai [A,B,C,D,E] :'',\)') Read(*,'(A15)')bobot(n) 10 Continue c Tahap informasi Pause 'Hidupkan Printer ...! Siap tekan Enter..!' Write(2,'(A)') ‘Sekolah Tinggi Manajemen Informatika & Komputer (STMIK)' Write(2,'(1X,A)')'Yayasan Perguruan Tinggi Komputer (YPTK) Padang' Write(2,'(1X,A,A8,A,A15,A)')'Nobp / Nama :',nobp,' / ',nama,'Semester = III' Write(*,'(1X,A)')’------------------------------------------------------------------------------------ ----' Write(*,'(1X,A)')'¦ No ¦ Kode ¦ Nama Mata Kuliah ¦ SKS | N i l -a i ¦ ¦' Write(*,'(1X,A)')'¦ ¦ ¦ ¦ |---------------- - ¦ MutuxSks ¦' Write(*,'(1X,A)')'¦ ¦ ¦ ¦ ¦ Bobot ¦ Mutu ¦ ¦' Write(*,'(1X,A)')’------------------------------------------------------------------------------------ ---¦’ Jsks=0

Page 56: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 56

Jms=0 DO 20 n=1,7 If(bobot(n).eq.'A') Then mutu=4 Elseif(bobot(n).eq.'B') Then mutu=3 Elseif(bobot(n).eq.'C') Then mutu=2 Elseif(bobot(n).eq.'D') Then mutu=1 Else mutu=0 Endif Ms=Mutu*Sks(n) Jsks=Jsks+Sks(n) Jms=Jms+ms Write(2,'(1X,A,\)')'¦ ' Write(2,'(I2,\)')n Write(2,'(A,\)')'¦ ' Write(2,'(A4,\)')Kode(n) Write(2,'(A,\)')' ¦ ' Write(2,'(A15,\)')kuliah(n) Write(2,'(A,\)')' ¦ ' Write(2,'(I1,\)')sks(n) Write(2,'(A,\)')' ¦ ' Write(2,'(A1,\)')bobot(n) Write(2,'(A,\)')' ¦ ' Write(2,'(I1,\)')mutu Write(2,'(A,\)')' ¦ ' Write(2,'(I2,\)')ms Write(2,'(A)')' ¦' 20 Continue Write(*,'(1x,A)') ’------------------------------------------------------------------------------------ ----' Write(*,'(1X,A,I2,A,I3,A)')'¦ Jumlah ¦ ',Jsks,' ¦ ¦ -,Jsm,' ¦' Write(*,'(1X,A)') ’----------------------------------------------------------------------------------- -----' Ip=Jsm/Jsks If(Ip.GE.0.00) Syad=12 If(Ip.GE.2.00) Syad=15 If(Ip.GE.2.50) Syad=18 If(Ip.GE.2.75) Syad=21 If(Ip.GE.3.25) Syad=24 Write(2,'(1X,A,F4.2)')'Indeks Prestasi : ',Ip Write(2,'(1X,A,I2)')'SKS Yad : ',Syad End 9.2. Menyimpan Data Ke Disk (FILE) File adalah kumpulan dari record, record kumpulan dari field, field kumpulan dari byte dan byte kumpulan dari bit. Semuanya tersebut tersusun secara logis dan terstruktur. Penyimpanan data pada disk dilakukan dengan penyimpanan (tersusun) secara phisik (phisical record). Didalam penyimpanan data pada disk, yang perlu diperhatikan adalah bagaimana penympanan logika record tersebut, yaitu menentukan nama-nama dari field yang membentuk sebuah file serta panjang dari setiap record yang menyusunnya. Panjang record secara phisik pada disk dapat ditampung sebesar 128 byte. Penyimpanan data ke disk ini disebut juga dengan file eksternal (memory luar

Page 57: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 57

Komputer),yang cara pengaksesannya dapat dilakukan 2 (dua) cara, yaitu secara Sequential (urut) dan Direct (langsung). Perintah-perintah yang digunakan selain WRITE (menyimpan ke disk), READ (membacadari disk), dan OPEN yang telah dijelaskan terdahulu, juga perintah-perintah sebagai berikut : a. Perintah CLOSE. Perintah Close digunakan untuk menutup file yang telah dibuka (OPEN). File yang telah ditutup biasanya file yang tidak diakses lagi. Perintah ini boleh tidak digunakan dalam pengelolaan file, karena setiap selesai pengerjaan program (Perintah END) secara otomatis semua file akan ditutup kembali. Bentuk umum dari perintah ini adalah :

CLOSE(nu[,STAUS='satatus']) Keterangan : - nu adalah nomor unit, sesuai dengan yang ada pada perintah OPEN. - status adalah konstanta karakter sebagai penunjuk status dari file yang ditutup. Status dapat berupa : 'KEEP', yaitu (default) file ditutup dan disimpan. 'DELETE', yaitu file ditutup dan dihapus dari disk. Contoh : CLOSE(1) CLOSE(2,status='KEEP') CLOSE(1,status='Delete') b. ENDFILE. Perintah Endfile digunakan untuk menentukan bahwa record berikutnya adalah akhir dari file. Setelah perintah ENDFILE data-data (record) yang akan disimpan selanjutnya tidak terekam ke disk. Printah ini jarang digunakan dalam pengelolaan File, karena hampir sama dengan perintah END (akhir program). Bentuk umum dari perintah ini adalah :

ENDFILE(nu) Keterangan : -nu adalah nomor unit pengenal dari file. Contoh : ENDFILE(2) c. BACKSPACE. Perintah Backspace digunakan pada file akses urut (sequential). Perintah ini digunakan untuk memindahkan record yang aktif ke satu record sebelumnya. Bentuk umum perintah ini adalah :

BACKSPACE nu

Page 58: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 58

Keterangan : -nu adalah nomor unit pengenal dari file. Contoh : BACKSPACE 1 d. REWIND. Perintah REWIND digunakan pada file akses urut (sequential). Perintah ini digunakan untuk memindahkan record yang aktif ke record pertama (top). Bentuk umum perintah ini adalah :

REWIND nu Keterangan : -nu adalah nomor unit pengenal dari file. Contoh : REWIND 1 9.2.1. File Akses Urut Cara kerja yang khusus pada file akses urut adalah data disimapan dan dibaca mulai dari record pertama urut sampai dengan record terakhir. Untuk program pengolahan data file urut terdiri dari : - membuat file - memodifikasi record (Edit,Delete) - menambah record - menampilkan record. Untuk kasus dalam pengolahan data file urut ini diambil pengolahan Data Nilai Ujian Profesional Programing yang telah dibahas pada bab sebelumnya, yaitu :

Predikat Nilai Ujian Profesional Programing ===============================

Nomor BP : xxxxxxxxx Nama : xxxxxxxxxxxxxxxx Nilai Program Entri : 999.99 Nilai Program Transaksi : 999.99 Nilai Program Informasi : 999.99 Keterangan : xxxxxxxxxx

Proses : - Nilai akhir = 10%*Nilai Program Entri + 35%*Nilai Program Transaksi + 55%*Nilai Program Informasi. - Jika Nilai Akhir >= 55 maka Keterangan=Lulus, kalau tidak Keterangan=Gagal Data-data yang disimpan adalah :

Page 59: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 59

- Nomor BP - Nama - Nilai Program Entri - Nilai Program Transaksi - Nilai Program Informasi Struktur Record Field Name Type Width Decimal Description Nobp Nama Entri Tran Info

Character Character Real Real Real

8 15 6 6 6

- - 2 2 2

Nomor BP Nama Mahasiswa Nilai Program Entri Nilai Program Transaksi Nilai Program Informasi

9.2.1.1. Membuat File Urut Baru Untuk membuat fle urut, file dibuka dengan staus='NEW' dan setelah diisi simpan. Program : $Debug c Program membuat file urut c Pesan Variabel secara eksplisit untuk field dalam record Character nama*15, nobp*8, Mad*1, Dbs*1 Real Info c Buka file OPEN(1,FILE='Ujian.Doc',Status='NEW') c memasukan data dari keyboard mad='Y' 5 IF(mad.Eq.'Y'.or.mad.eq.'y') Then c Hapus Layar Write(*,'(24(/))') c Isi data baru dari keyboard ke dalam field record Write(*,'(15x,''Input Data Ujian'')') Write(*,'(15x,''================'')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')nobp Write(*,'(5x,''Nama Mahasiswa : '',\)') Read(*,'(a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',\)') Read(*,'(F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',\)') Read(*,'(F6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',\)') Read(*,'(F6.2)')Info Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(A1)')dbs c Jika data sudah benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data Write(1,'(a5,a15,f6.2,f6.2,f6.2)')nobp,nama,entri, tran,info Endif c Kalau tida salah dilewati saja dan isi massih ada data atau c tidak Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika tidak ada data lagi keluar dari pengisian data

Page 60: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 60

Goto 5 Endif c Tutup file data Close(1) End 9.2.1.2. Menambah Data File Urut Untuk menambah data, harus dilakukan logika pengolah sebagai berikut : - File dibuka memakai perintah OPEN dengan status='OLD'. - Membaca seluruh data yang ada secara urut sampai habis memakai perintah READ. - Pada akhir record harus memakai perintah BACKSPACE, supaya data dapat ditambah. - Kemudian data baru dapat diisi dan disimpan. Program : $Debug c Program menambah data pada file urut c Pesan variabel field secara eksplisit Character nama*15, nobp*8, Mad*1, Dbs*1 Real Info c Buka file OPEN(1,FILE='Ujian.Doc') c Membaca record keseluruhan sampai habis untuk mencariakhir c file 10 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=20)nobp,nama,entri,tran,info goto 10 c Mundur satu record 20 Backspace 1 c memasukan data dari keyboard mad='Y' 5 IF(mad.Eq.'Y'.or.mad.eq.'y') Then c Hapus Layar Write(*,'(24(/))') c Isi nilai variabel field Write(*,'(15x,''Input Data Ujian'')') Write(*,'(15x,''================'')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')nobp Write(*,'(5x,''Nama Mahasiswa : '',\)') Read(*,'(a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',\)') Read(*,'(F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',\)') Read(*,'(F6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',\)') Read(*,'(F6.2)')Info c Isi variabel semu untuk menyatakan data sudah benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data sudah benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data Write(1,'(a5,a15,f6.2,f6.2,f6.2)')nobp,nama,entri, -tran,info c Kalau salah lompati Endif c Isi variabel semu untuk masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad

Page 61: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 61

c Jika masih ada data ulangi proses pengisian Goto 5 Endif c Jiak tidak ada data lagi tutup file Close(1) End 9.2.1.3. Menampilkan Data Tertentu Pada File Urut Untuk menampilkan data tertentu, harus dilakukan logika pengolah sebagai berikut : - File dibuka memakai perintah OPEN dengan status='OLD'. - Buat variabel bebas sesuai dengan tipe data kunci yang akan di cari, lalu isi varibel tersebut dengan nilai sesuai dengan nilai yang akan dicari. - Baca data dari awal sampai akhir dan tanyakan nilai yang dicari tersebut apa sama atau tidak, jika ya tampilkan, kalau sampai sudah habis data juga tidak ada yang sama, berarti data tersebut tidak ada. Program Pencarian berdasarkan Nomor Bp : $Debug c Program menampilkan record tertentu c Pesan variabel field data Character nama*15, nobp*8, Mad*1, bpc*8 Real Info c Buka file 5 OPEN(1,FILE='Ujian.Doc') c Hapus Layar Write(*,'(24(/))') c masukan nomor BP yang dicari Write(*,'(5x,a,\)')'Nomor BP cari :' Read(*,'(A8)')bpc c Membaca record keseluruhan sampai habis 10 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=20)nobp,nama,entri,tran,info c Seleksi pada data di file apa adda nobp yang sama dengan ya c ng dicari If(nobp.eq.bpc) then c Jika bertemu tampilkan isi record Write(*,'(24(/))') Write(*,'(15x,''Data Yang Dicari'')') Write(*,'(15x,''================'')') Write(*,'(5x,''Nomor BP : '',a8)')nobp Write(*,'(5x,''Nama Mahasiswa : '',a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',f6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',f6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',f6.2)')infor goto 15 Else c Jika tidak bertemu ulang membaca data samapi record trakhir goto 10 Endif c Jika tidak ada nobp yang sama tampilkan data tidak ada 20 Write(*,'(5x,''Data Tidak Ada Pada FIle...!'')') Pause 'Tekan Enter Untuk Lanjut....!' c Masukan nilai masih ada data ? 15 Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika tidak ada lagi pergi keakhir program

Page 62: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 62

IF(mad.eq.'T'.or.mad.eq.'t') Goto 25 c Jika masih ada data pindahkan pointer ke record pertama Rewind 1 Goto 5 25 Close(1) End 9.2.1.4. Mengoreksi Data File Urut Untuk mengoreksi data pada file dapat dilakukan logika pengolah sebagai berikut : - File dibuka memakai perintah OPEN dengan status='OLD'. - Membuka file kedua sebagai file menampung data sementara. - Buat variabel bebas sesuai dengan tipe data untuk semua data yang akan menampung data

baru, dan isikan nilai variabel kode tertentu sebagai kunci pencarian. - Baca data dari awal sampai akhir dan tanyakan nilai yang dicari tersebut apa sama atau

tidak, jika ketemu lakukan : - tampilkan nilai data tersebut - isi nilai baru kedalam veriabel sementara - simpan data sisa kedalam file sementara - ulangi baca file data dari awal sampai ketemu kunci data koreksi - simpan data yang tersimpan pada varibel sementara ke file data - pindahkan (simapan ulang) file sementara ke file data, karena pada penyimpanan data

variabel bebas ke file data data berikutnya hilang. Program : $Debug c Program mengoreksi data tertentu c Pesan variabel bebas Character nama*15,nobp*8,vnama*15,vnobp*8,vMad*1,dbs*1 Real Info c Buka file data dan file sementara 5 OPEN(1,FILE='Ujian.Doc') Open(2) c Hapus Layar Write(*,'(24(/))') c masukan nomor BP yang dicari Write(*,'(5x,a,\)')'Nomor BP cari :' Read(*,'(A8)')vnobp c Cari record pada file data sesuai kunci 10 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=20)nobp,nama,entri,tran,info c Jika bertemu (sama) If(nobp.eq.vnobp) then c Tampilkan data tersebut dan isi nilai data baru 25 Write(*,'(24(/))') Write(*,'(15x,''Input Data Ujian'')') Write(*,'(15x,''================'')') Write(*,'(5x,''Nomor BP :'',F6.2,''=>'',\)') nobp Read(*,'(a8)')vnobp Write(*,'(5x,''Nama Mahasiswa :'',f6.2,'=>,\)') nama Read(*,'(a15)')vnama Write(*,'(5x,''NIlai Prog. Entri :'',f6.2,''=>'',\)') entri Read(*,'(F6.2)')vEntri Write(*,'(5x,''Nilai Prog. Tran. :'',f6.2,''=>'',\)') tran Read(*,'(F6.2)')vTran Write(*,'(5x,''Nilai Prog. Info. :'',f6.2,''=>'',\) info Read(*,'(F6.2)')vInfo

Page 63: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 63

c Masukan nilai untuk kondisi sudah benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika salah If(dbs.eq.'T'.or.dbs.eq.'t') Then c Ulangi proses pengisian data Goto 25 Else c Jika benar pindahkan sisa data lain ke file sementara 30 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=35)nobp,nama, entri,tran,info Write(2,'(a5,a15,f6.2,f6.2,f6.2)')nobp,nama,entri,tran,info goto 30 c Pergi ke record pertama 35 Rewind 1 c Baca isi File data 40 Read(1,'(A8,a15,f6.2,f6.2,f6.2)')nobp,nama,entri, tran,info c Jika ketemu (sama) If(nobp.eq.vnobp) then c Pindahkan posisi record ke satu record sebelumnya Backspace 1 c Simpan data yang telah dikoreksi tadi (data berikutnya akan c hilang) Write(1,'(a5,a15,f6.2,f6.2,f6.2)')vnobp,vnama,ventri,vtran,vinfo c Pindah ke record pertama pada file sementara Rewind 2 c Pindahkan isi record file sementara ke file data seluruhnya 50 Read(2,'(A8,a15,f6.2,f6.2,f6.2)',End=45)nobp,nama,entri,tran,info Write(1,'(a5,a15,f6.2,f6.2,f6.2)')nobp,nama,ventri,vtran,vinfo Goto 50 Else goto 40 Endif Endif Else Goto 10 Endif c Jika tidak bertemu beri pesan data tidak ada..? 20 Pause 'Data Tidak Ada ...!' c Masukan nilai masih ada data yang diperbaiki atau tidak ? 45 Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data tutup semua file dan ulang proses dari c awal if(mad.eq.'Y'.or.mad.eq.'y') Then Close(1) Close(2) Goto 5 Endif c Kalau tidak ada lagi tutup semua file dan selesai program Close(1) Close(2) End 9.2.1.5. Menghapus Data File Urut Untuk menghapus data pada file, logika yang digunakan sama dengan logika pada koreksi data, hanya data record yang dikoreksi atau data record yang dicari tidak disimapan pada file.

Page 64: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 64

Program : $Debug c Program menghapus data file urut c Pesan variabel memory Character nama*15, nobp*8,vnobp*8, vMad*1,dbs*1 Real Info c Buka file data dan file sementara 5 OPEN(1,FILE='Ujian.Doc') Open(2) c Hapus Layar Write(*,'(24(/))') c masukan nomor BP yang dicari Write(*,'(5x,a,\)')'Nomor BP cari :' Read(*,'(A8)')vnobp c Cari record pada file data sesuai kunci 10 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=20)nobp,nama,entri,tran,info c Jika bertemu nobp yang dicari If(nobp.eq.vnobp) then c Tampilkan isi record data Write(*,'(24(/))') Write(*,'(15x,''Input Data Ujian'')') Write(*,'(15x,''============'')') Write(*,'(5x,''Nomor BP :'',F6.2,''=>'',\)')nobp Write(*,'(5x,''Nama Mahasiswa :'',f6.2,'=>,\)') nama Write(*,'(5x,''NIlai Prog. Entri :'',f6.2,''=>'',\)')Entri Write(*,'(5x,''Nilai Prog. Tran. :'',f6.2,''=>'',\)') Tran Write(*,'(5x,''Nilai Prog. Info. :'',f6.2,''=>'',\)') Info Write(*,'(/,5x,''Data Jadi Dihapus [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Masukan veriabel bebas untuk data jadi dihapus atau tidak If(dbs.eq.'Y'.or.dbs.eq.'y') Then c Jika jadi dihapus, pindahkan sisa record berikunya ke file c sementara 30 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=35)nobp,nama,entri,tran,info Write(2,'(a5,a15,f6.2,f6.2,f6.2)')nobp,nama,entri, tran,info goto 30 c Pindah ke record pertama 35 Rewind 1 c Baca file data dari pertama sampai record yang dicari 40 Read(1,'(A8,a15,f6.2,f6.2,f6.2)')nobp,nama,entri,tran,info c Apakah sudah betemu If(nobp.eq.vnobp) then c Jika bertemu pindah satu record sebelumnya dan hapus data c selanjutnya Backspace 1 Rewind 2 c Lompati record yang dicari, dan pindahkan data file semen- c tara ke file data 50 Read(2,'(A8,a15,f6.2,f6.2,f6.2)',End=45)nobp,nama,entri,tran,info Write(1,'(a5,a15,f6.2,f6.2,f6.2)')nobp,nama,ventri,vtran,vinfo Goto 50 Else goto 40 Endif Else goto 45 Endif Else

Page 65: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 65

Goto 10 Endif c Jika data tidak bertemu, tampilkan pesan data tidak ada 20 Pause 'Data Tidak Ada ...!' c Masih ada data atau tidak 45 Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad if(mad.eq.'Y'.or.mad.eq.'y') Then c Jika masih ada ulang proses dari awal Close(1) Close(2) Goto 5 Endif c Jika tidak tutup semua file dan akhir program Close(1) Close(2) End 9.2.1.6. Menampilakan Seluruh Data File Urut Untuk menampilkan seluruh data pada file dapat dilakukan logika pemrosesan sebagai berikut : a. Buka file dengan perintah OPEN, status ='OLD' b. Buat judul laporan c. Baca file data d. Lakukan proses pencarian nilai untuk semua variabel data yang ditampilkan e. Tampilakan nilai-nilai dari variabel data tersebut f. Ulangi dari c. samapi data habis g. Jika data habis, tutup daftar laporan h. Tutup file. Bentuk Layout Laporan :

Daftar Nilai Ujian Profesional Programing ==============================

No N O B P Nama Mahasiswa Nilai Akhir Keterangan 99

99999999 Xxxxxxxxxxxxxxxxxxxxx 999.99 xxxxxxxxxxxxxx

Jumlah Lulus = 999 Orang Jumlah Gagal = 999 Orang Program : c Pesan variabel sementara $Debug Character nama*15, nobp*8, Ket*5 Real Info,na c Buka file OPEN(1,FILE='Ujian.Doc') c Set variabel total dan jumlah dengan nol Jl=0 Jg=0 nom=0 c Hapus Layar dan buat judul 5 Write(*,'(24(/))')

Page 66: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 66

c Tampilkan judul laporan Write(*,'(10x,a)')'Daftar Nilai Ujian Profesional Programming' Write(*,'(10x,a)')'================================' Write(*,'(1x,a)')'------------------------------------------------------------------------------' Write(*,'(1x,a)')'¦No.¦ N O B P ¦ Nama Mahasiswa ¦ Nilai Akhir ¦ Keterangan ¦' Write(*,'(1x,a)')'------------------------------------------------------------------------------‘ nb=5 c Membaca record keseluruhan sampai habis 10 Read(1,'(A8,a15,f6.2,f6.2,f6.2)',End=20)nobp,nama,entri,tran,info c Lakukan proses data na=0.1*entri+0.35*tran+0.55*info If (na.ge.55.0) then Ket='Lulus' jl=jl+1 Else Ket='Gagal' jg=jg+1 Endif nom=nom+1 nb=nb+1 c Tampilkan semua nilai yang telah diproses Write(*,'(1x,a,i2,a,a8,a,a15,a,f6.2,a,a5,a)')'¦ ',nom,'¦ ',nobp,' ¦ ',nama,' ¦ ',na,' ¦ ',ket,' -¦' If(nb.eq.20) Then c Jika nomor baris sudah mencapai 20, berhenti sejenak dan c ulangi menampilkan data berikutnya Write(*,'(1x,a)')'------------------------------------------------------------------------------‘ Pause 'Tekan Enter untuk lanjut......!' goto 5 Else goto 10 Endif c Jika sudah habis dibaca semua record buat garis penutup 20 Write(*,'(1x,a)')'------------------------------------------------------------------------------‘ c Tampilkan jumlah dan total Write(*,'(1x,a,I3,a)')'¦ Jumlah Lulus = ',jl,' Orang ¦' Write(*,'(1x,a,i3,a)')'¦ Jumlah Gagal = ',jg,' Orang ¦' Write(*,'(1x,a)')'------------------------------------------------------------------------------‘ c Tutup File close(1) End 9.2.1. File Akses Acak File akses Direct (langsung) merupakan metoda pengaksesan data yang dapat merekam (menyimpan) dan mengambil (membaca) secara langsung dari medie penyimpanan. Dalam menggunakan metode ini akan lebih cepat dalam pemrosesan data. Pada metode langsung ini setiap data menggunakan 2 (dua) buah file, satu buah file untuk menyimpan data dan satu buah file lagi untuk menyimpan kunci atau penomoran record dari file data tersebut. Contoh program yang diambil dalam materi ini sama dengan metoda akses urut, hanya merobah dalam bentuk akses urut ke acak. 9.2.1.1. Membuat File Acak Baru Logika yang digunakan sama dengan membuat file baru pada metoda akses urut, hanya file yang dibuka 2 (dua) buah sekaligus.

Page 67: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 67

Program : $Debug c Program membuat file acak c Pesan variabel memori Character nama*15, nobp*8, Mad*1, Dbs*1 Real Info c Buka file OPEN(1,FILE='Ujian.Doc',Status='NEW',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Status='NEW',Access='DIRECT', Recl=5) c Set nomor record = 0, karena belum ada data nr=0 c memasukan data dari keyboard sampai kondisi data habis mad='Y' 5 IF(mad.Eq.'Y'.or.mad.eq.'y') Then c Hapus Layar Write(*,'(24(/))') c Isikan nilai data dari keyboard Write(*,'(15x,''Input Data Ujian'')') Write(*,'(15x,''================'')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')nobp Write(*,'(5x,''Nama Mahasiswa : '',\)') Read(*,'(a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',\)') Read(*,'(F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',\)') Read(*,'(F6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',\)') Read(*,'(F6.2)')Info c Masukan nilai kondisi data benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data nr=nr+1 Write(1,Rec=nr)nobp,nama,entri,tran,info Endif c Masukan nilai untuk kondis masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika iya ulangi pengisian Goto 5 Endif c kalau tidak ada lagi simpan file kunci Write(2,Rec=1)nr c Tutup kedua file data Close(1) Close(2) End 9.2.2.2. Menambah Data File Acak Logika yang digunakan juga sama dengan menambah data pada metoda akses urut. Program : $Debug c Program menambah data file urut

Page 68: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 68

c Pesan variabel memory Character nama*15, nobp*8, Mad*1, Dbs*1 Real Info c Buka file OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c Ambil nomor record terakhir pada file kunci Read(2,Rec=1)nr c Set masih ada data dengan benar mad='Y' c Jika masih ada data 5 IF(mad.Eq.'Y'.or.mad.eq.'y') Then c Hapus Layar Write(*,'(24(/))') c Isikan data baru dari keyboard Write(*,'(15x,''Tambah Data Ujian'')') Write(*,'(15x,''=============='')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')nobp Write(*,'(5x,''Nama Mahasiswa : '',\)') Read(*,'(a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',\)') Read(*,'(F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',\)') Read(*,'(F6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',\)') Read(*,'(F6.2)')Info c Isi variabel untuk kondisi benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika kondisi benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data nr=nr+1 Write(1,Rec=nr)nobp,nama,entri,tran,info c Jika tidak lompati penyimpanan data Endif c Isi nilai kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Ulangi proses ke awal program Goto 5 Endif c Jika tidak ada data lagi, simpan data file kunci Write(2,Rec=1)nr c Tutup file Close(1) Close(2) End 9.2.2.3. Menampilkan Data Tertentu Pada File Acak Program : $Debug c Pesan variabel memory Character nama*15, nobp*8, Mad*1, vnobp*8 Real Info c Buka file

Page 69: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 69

OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c Ambil nomor record pada file kunci Read(2,Rec=1)nr c Masukan nilai variabel data yang dicari mad='Y' 5 Write(*,'(24(/))') Write(*,'(15x,''Data Yang Akan Ditampilkan'')') Write(*,'(15x,''====================='')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')vnobp Do 10 I=1,nr c Baca file data sampai habis Read(1,Rec=i)nobp,nama,entri,tran,info c Apakah data bertemu (nomor bp cari sama dengan nobp data If(nobp.eq.vnobp) then c Tampilkan nilai record tersebut Write(*,'(5x,''Nama Mahasiswa : '',a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',f6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',f6.2)')Info goto 15 Endif 10 Continue c Jika tidak bertemu, tampilkan pesan data tidak ada Pause 'Data Tidak Ada...!' c Isi nilai variabel kondisi masih ada data 15 Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data ulang proses dari awal If(mad.eq.'y'.or.mad.'Y') Goto 5 c Jika idak ada tutup file Close(1) Close(2) End 9.2.2.4. Mengoreksi Data File Acak Program : $Debug c Pesan variabel memory Character nama*15, nobp*8, Mad*1, vnobp*8, dbs*1 Real Info c Buka file OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c Ambil nomor record pada file kunci Read(2,Rec=1)nr c memasukan kunci data yang akan dikoreksi mad='Y' 5 Write(*,'(24(/))') Write(*,'(15x,''Data Yang Akan Dikoreksi'')') Write(*,'(15x,''==================='')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')vnobp Do 10 I=1,nr c Baca data dari record pertama sampai record terakhir Read(1,Rec=i)nobp,nama,entri,tran,info

Page 70: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 70

If(nobp.eq.vnobp) then c Jika bertemu tampilkan record tersebut Write(*,'(5x,''Nama Mahasiswa : '',a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',f6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',f6.2)')Info c Isi data baru 15 Write(*,'(/,10X,''Data Koreksinya'')') Write(*,'(10X,''============='')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')nobp Write(*,'(5x,''Nama Mahasiswa : '',\)') Read(*,'(a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',\)') Read(*,'(F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',\)') Read(*,'(F6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',\)') Read(*,'(F6.2)')Info c Isi untuk kondisi data sudah benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika benar IF(dbs.eq.'T'.or.dbs.eq.'t') goto 15 c Simpan data baru tersebut, jika tidak ulangi isi data baru Write(1,Rec=I)nobp,nama,Entri,Tran,Info Goto 25 Endif 10 Continue c Jika data tidak bertemu, beri pesan Pause 'Data Tidak Ada...!' c Isi nilai variabel kondisi masih ada data 25 Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data ulangi proses dari awal If(mad.eq.'y'.or.mad.'Y') Goto 5 c Jika tidak ada lagi tutup file Close(1) Close(2) End 9.2.2.5. Menghapus Data File Acak Dalam menghapus data pada file acak secara pisik data tidak dihapus, hanya nilai dari data record tersebut diisi denga blank (kosong). Untuk menghindari banyaknya record kosong pada file data, maka dilakukan peremajaan file, yang programnya pada Sub Bab berikutnya. Program : $Debug c Pesan variabel memory Character nama*15, nobp*8, Mad*1, vnobp*8, dbs*1, kosong*8 Real Info c Buka file data OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c Ambil nomor record pada file kunci Read(2,Rec=1)nr

Page 71: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 71

c Pesan variabel kosong (blank) kosong=' ' c memasukan kode data yang akan dicari mad='Y' 5 Write(*,'(24(/))') Write(*,'(15x,''Data Yang Akan Dihapus'')') Write(*,'(15x,''==================='')') Write(*,'(5x,''Nomor BP : '',\)') Read(*,'(a8)')vnobp Do 10 I=1,nr c Baca data sampai record terakhir Read(1,Rec=i)nobp,nama,entri,tran,info If(nobp.eq.vnobp) then c Jika data bertemu tampilkan Write(*,'(5x,''Nama Mahasiswa : '',a15)')nama Write(*,'(5x,''NIlai Prog. Entri : '',F6.2)')Entri Write(*,'(5x,''Nilai Prog. Tran. : '',f6.2)')Tran Write(*,'(5x,''Nilai Prog. Info. : '',f6.2)')Info c Masukan nilai untuk kondisi jadi dihapus atau tidak Write(*,'(/,5x,''Data JadiDihapus [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika jadi dihapus IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c simpan record kosong Write(1,Rec=I) kosong Endif c Kalau tidak lewati menyimpan record kosong Goto 25 Endif 10 Continue c Jika data tidak ada. tampilkan pesan data tidak ada Pause 'Data Tidak Ada...!' c Isi nilai variabel kondisi masih ada data 25 Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data ulangi proses dari awal If(mad.eq.'y'.or.mad.'Y') Goto 5 c Jika tidak ada tutup file Close(1) Close(2) End 9.2.2.6. Menampilakan Seluruh Data File Acak Untuk menampilkan seluruh data pada file dapat logika pemrosesan sama dengan file menampilkan seluruh data file urut. Program : $Debug c Pesan variabel memory Character nama*15, nobp*8, Ket*5 Real Info,na c Buka file OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c Baca file kunci, ambil nilai jumlah record Read(2,Rec=1)nr Jl=0 Jg=0

Page 72: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 72

c Hapus Layar dan buat judul Write(*,'(24(/))') c Buat judul laporan Write(*,'(1x,a)')'Daftar Nilai Ujian Profesional Programing' Write(*,'(1x,a)')'==============================’ Write(*,'(1x,a)')'-----------------------------------------------------------------------------' Write(*,'(1x,a)')'¦No.¦ N O B P ¦ Nama Mahasiswa ¦ Nilai Akhir ¦ Keterangan ¦' Write(*,'(1x,a)')'-----------------------------------------------------------------------------' c Set variabel nomor dan nomor baris nb=5 nom=0 DO 60 I=1,nr c Membaca record keseluruhan sampai habis Read(1,REC=I)nobp,nama,entri,tran,info c mencek apakah record kosong, kalau ya tidak ditampilkan IF(nobp.ne.' ') Then c Jika tidak kosong lakukan proses pencarian nilai data yang c akan ditampilkan na=0.1*entri+0.35*tran+0.55*info If (na.ge.55.0) then Ket='Lulus' jl=jl+1 Else Ket='Gagal' jg=jg+1 Endif nom=nom+1 nb=nb+1 c Tampilkan nilai-nilai data tersebut Write(*,'(1x,a,i2,a,a8,a,a15,a,f6.2,a,a5,a)')'¦ ',nom,'¦ ',nobp,' ¦ ',nama,' ¦ -',na,' - ¦ ',ket,' ¦' c Jika sudah sampai baris 20 If(nb.eq.20) Then c Buat garis penutup laporan

Write(*,'(1x,a)')'---------------------------------------------------------------

- --------------' c Berhenti sejenak untuk melihat laporan data Pause 'Tekan Enter untuk lanjut......!' c Ulangi buat judul laporan Write(*,'(24(/))') Write(*,'(1x,a)')'Daftar Nilai Ujian Profesional Programing' Write(*,'(1x,a)')'==============================’ Write(*,'(1x,a)')'------------------------------------------------------------- ----------------' Write(*,'(1x,a)')'¦No.¦ N O B P ¦ Nama Mahasiswa ¦ Nilai Akhir ¦ - Keterangan ¦' Write(*,'(1x,a)')'------------------------------------------------------------- - --------------' nb=5 Endif Endif 60 Continue c Jika sudah habis data dibaca dan dilaporkan buat gari pe- c nutup 20 Write(*,'(1x,a)')'-----------------------------------------------------------------------------' c Tampilkan nilai jumlah total Write(*,'(1x,a,I3,a)')'¦ Jumlah Lulus = ',jl,' Orang ¦'

Page 73: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 73

Write(*,'(1x,a,i3,a)')'¦ Jumlah Gagal = ',jg,' Orang ¦' Write(*,'(1x,a)')'-----------------------------------------------------------------------------' c Tutup file close(1) close(2) End 9.2.2.7. Peremajaan File Acak Seperti yang telah diuraikan pada sub bab menghapus data pada file acak (9.2.2.5), bahwa data tidak dihapus secara phisik sehingga memnyebabkan pemborosan dalam pemakaian memory, karena data yang tidak diperlukan (record kosong) masih memakai memory media penyimpanan data. Untuk menghilangkan data record kosong tersebut perlu dilakukan peremajaan file,yaitu dengan logika sebagai berikut : - Buka file data dan file kunci - Cek record kosong, jika kosong lompati penyimpanan data satu record. - Ulangi proses sampai data habis dibaca. Program : $Debug c Pesan vaiabel memory Character nama*15, nobp*8, vnobp*8, vnama*15, kosong*8 Real Info c Buka file OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c Ambil nomor record pada file kunci Read(2,Rec=1)nr Kosong=' ' c Beri pesan tunggu lagi proses Write (*,'(15X,''Tunggu Lagi Prose....!'')') DO 5 I=1,nr c Baca data dari record pertama sampai habis Read(1,Rec=i)nobp,nama,entri,tran,info c Jika data kosong buang If(nobp.eq.kosong) Then Do 10 J=I+1,nr c Lompati data kosong dan baca sampai bertemu data tidak c kosong Read(1,Rec=j)nobp,nama,entri,tran,info If(nobp.ne.kosong) Then c Pindahkan ke data varaiabel sementara vnobp=nobp vnama=nama ventri=Entri vtran=tran vinfo=info c Lakukan perpindahan tempat, varibel tidak kosong menempati c data yang kodong dan variabel kosong menempati record ber- c ikutnya Write(1,Rec=J) kosong Write(1,Rec=i)vnobp,vnama,ventri,vtran,vinfo goto 5 Endif 10 Continue Goto 15 Endif

Page 74: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 74

c Ulangi sampai tidak ada lagi data kosong 5 Continue nr=I-1 c Kurangi jumlah record yang terisi dengan 1 (1 adalah set c pertama jumlah record ditambahkan dengan 1 record kosong c Simpan jumlah record tersebut pada file kunci 15 Write(2,Rec=1)nr c Tutup file Close (1) Close (2) End Selain cara logika program seperti diatas, peremajaan file data juga dapat dilakukan dengan membuat file duplikat dari data tersebut dengan membuang data-data yang kosong atau menyimpan data yang pelum pernah dihapus saja. Contoh progam dapat dilihat seperti berikut : Program : $Debug c Pesan variabel memori Character nama*15, nobp*8 Real Info c Buka file OPEN(1,FILE='Ujian.Doc',Access='DIRECT',Recl=41) OPEN(2,FILE='Ujian.Key',Access='DIRECT',Recl=5) c buka file duplicat OPEN(3,FILE='Dupli.Doc',Status='New',Access='DIRECT',Recl=41) OPEN(4,FILE='Dupli.Key',Status='New',Access='DIRECT',Recl=5) nr1=0 c Ambil nomor record pada file kunci Read(2,Rec=1)nr Write (*,'(15X,''Tunggu Lagi Prose....!'')') DO 5 I=1,nr c Baca semua record Read(1,Rec=i)nobp,nama,entri,tran,info If(nobp.ne.' ') Then c Jika data tidak kosong pindahkan ke record berikutnya c nomor record yang baru tambah dengan 1 nr1=nr1+1 c simpan data tersebut Write(3,Rec=nr1)nobp,nama,entri,tran,info Endif 10 Continue c Jika sudah habis terbaca simpan nomor record yang tidak c kosong kedalam file kunci 2 Write(4,Rec=1)nr1 c Tutup semua file Close (1) Close (2) Close (3) Close (4) End Seielah program ini dijalankan pada diskette data dihapus file (del) nilai.doc dan nilai.key, setelah itu ditukar nama file (ren) Dupli.Doc menjadi Nilai.Doc dan Dupli.Kay menjadi Nilai.Key.

Page 75: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 75

9.3. Aplikasi Program 2 File Data Pada aplikasi 2 (dua) buah file data ini diambil kasus tentang laporan transaksi barang pada sebuah toko yang bergerak dalam jual beli barang. Keuntungan diambil dari discount yang diberikan oleh distributor. Bentuk Layout : LAPORAN TRANSAKSI ================== Kode Barang : 99999 Satuan : xxxxxxxxx Nama Barang : xxxxxxx Harga : 99999 Stock Akhir : 999 Jumlah Total Harga No Tanggal Jual Beli Juyal Beli 99

xx-xx-xx 99999999 99999999 999999999 999999999

Total 99999999999 9999999999 9999999999999 999999999999 Proses : - Jika jen='J' maka tampilkan pada kelompok penjualan dan jen=k, tampilkan pada kelompok

pembelian - Begitu juga dengan total - Transaksi dilakukan berdasarkan data file barang, jika jumlah penjualan besar dari stock

maka penjualan tidak dapat terjadi, kalau kecil transaksi dapat terjadi dan nilai stock berkurang. Jika pembelian nilai stock bertam bah.

- Kode barang berdasarkan nomor record (ketetapan program). Struktur Data : * File Barang Name Type Width Decimal Description Kode Nama Sat Har Stoc

Numeric Character Character Numeric Numeric

5 10 8 5 3

0 - - 0 0

Kode Barang Nama Barang Satuan Harga Barang Stock Barang

* File Transak Name Type Width Decimal Description Tgl Jen Jum

Character Character Numeric

58 1 3

- 0 0

Tanggal Jenis Jumlah

9.3.1. Buat File Barang Program : $Debug c Pesan variabel memory Character nama*10,Sat*8,mad*1,Dbs*1 Integer har,stoc c Buka file barang baru OPEN(1,FILE='Barang.Doc',Status='NEW',Access='DIRECT', Recl=30) OPEN(2,FILE='Barang.Key',Status='NEW',Access='DIRECT',Recl=5)

Page 76: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 76

c Set nomor record = 1 kode=1 c Set variabel kondisi masih ada data dengan benar mad='Y' c Jika masih ada data 5 IF(mad.Eq.'Y'.or.mad.eq.'y') Then c Hapus layar Write(*,'(24(/))') c Isi data nilai record baru dengan kode sudah ditetapkan c sama dengan nomor record Write(*,'(15x,''Input Data Barang'')') Write(*,'(15x,''============='')') Write(*,'(5x,''Kode : '',I5)')Kode Write(*,'(5x,''Nama : '',\)') Read(*,'(a10)')nama Write(*,'(5x,''Satuan : '',\)') Read(*,'(A8)')sat Write(*,'(5x,''Harga Satuan : '',\)') Read(*,'(I5)')Har Write(*,'(5x,''Stock Awal : '',\)') Read(*,'(I3)')Stoc c Isi variabel kondisi data benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data sudah benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data record tersebut Write(1,Rec=kode)nama,sat,har,stoc Endif c Isi variabel kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data nomor recor atau kode ditambah 1 If(mad.eq.Y.or.Mad.eq.'y.') kode=kode+1 Goto 5 Endif c Jika data sudah habis, simpan file kunci Write(2,Rec=1)kode c Tutup file data Close(1) Close(2) End 9.3.2. Tambah Data File Barang Program : $Debug c Pesan variabel memory Character nama*10,Sat*8,mad*1,Dbs*1 Integer har,stoc c Buka file barang baru OPEN(1,FILE='Barang.Doc',Access='DIRECT',Recl=30) OPEN(2,FILE='Barang.Key',Access='DIRECT',Recl=5) c Ambil kode (nomor record terakhir Read(2,Rec=1)kode c Set variabel kondisi masih ada data dengan benar mad='Y' c Jika masih ada data

Page 77: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 77

5 IF(mad.Eq.'Y'.or.mad.eq.'y') Then c Hapus layar Write(*,'(24(/))') c Isi data nilai record baru dengan kode sudah ditetapkan c sama dengan nomor record Write(*,'(15x,''Input Data Barang'')') Write(*,'(15x,''============='')') Write(*,'(5x,''Kode : '',I5)')Kode Write(*,'(5x,''Nama : '',\)') Read(*,'(a10)')nama Write(*,'(5x,''Satuan : '',\)') Read(*,'(A8)')sat Write(*,'(5x,''Harga Satuan : '',\)') Read(*,'(I5)')Har Write(*,'(5x,''Stock Awal : '',\)') Read(*,'(I3)')Stoc c Isi variabel kondisi data benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data sudah benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data record tersebut Write(1,Rec=kode)nama,sat,har,stoc Endif c Isi variabel kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data nomor recor atau kode ditambah 1 If(mad.eq.Y.or.Mad.eq.'y.') kode=kode+1 Goto 5 Endif c Jika data sudah habis, simpan file kunci Write(2,Rec=1)kode c Tutup file data Close(1) Close(2) End 9.3.3. Koreksi Data File Barang Program : $Debug c Pesan variabel memory Character nama*10,Sat*8,mad*1,Dbs*1 Integer har,stoc,vkode c Buka file data OPEN(1,FILE='Barang.Doc',Access='DIRECT',Recl=30) OPEN(2,FILE='Barang.Key',Access='DIRECT',Recl=5) c Ambil nomor record (kode) dari file kunci Read(2,Rec=1) kode mad='Y' c Masukan kode yang di koreksi 5 Write(*,'(24(/))') Write(*,'(15x,''Koreksi Data Barang'')') Write(*,'(15x,''==============='')') Write(*,'(5x,''Kode : '',I5)') Read(*,'(I5)')vKode c Jika kode kecil atau sama dengan nomor record

Page 78: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 78

If(Vkode.le.kode) Then c Baca file data dengan nomor record tersebut Read(1,Rec=vkode)nama,sat,har,stoc c Tampilkan isi record Write(*,'(5x,''Nama : '',a10)')nama Write(*,'(5x,''Satuan : '',a8)')satuan Write(*,'(5x,''Harga Satuan : '',I5)')har Write(*,'(5x,''Stock Awal : '',i3)')stoc c Masukan nilai untuk variabel kondisi koreksi Write(*,'(/,5x,''Data Jadi Dikoreksi [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika jadi dikoreksi IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Isi data baru 10 Write(*,'(24(/))') Write(*,'(15x,''Input Data Koreksi Barang'')') Write(*,'(15x,''==================='')') Write(*,'(5x,''Kode : '',I5)')Kode Write(*,'(5x,''Nama : '',\)') Read(*,'(a10)')nama Write(*,'(5x,''Satuan : '',\)') Read(*,'(A8)')sat Write(*,'(5x,''Harga Satuan : '',\)') Read(*,'(I5)')Har Write(*,'(5x,''Stock Awal : '',\)') Read(*,'(I3)')Stoc c Masukan nilai variabel data sudah benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data sudah benar IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Simpan data record baru Write(1,Rec=kode)nama,sat,har,stoc Else c Kalau salah ulangi pengisian data Goto 10 Endif Endif Else c Jika kode yang dimasukan besar dari kode yang ada, tampil c kan pesan data tidak ada Pause 'Data Tidak Ada.....!' Endif c Masukan nilai variabel kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data, ulangi proses dari awal If(mad.eq.Y.or.Mad.eq.'y.') Goto 5 c Jika tidak ada data lagi tutup file Close(1) Close(2) End 9.3.5. Hapus Data File Barang Program : $Debug c Pesan variabel memory

Page 79: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 79

Character nama*10,Sat*8,mad*1,Dbs*1 Integer har,stoc,vkode c Buka file data OPEN(1,FILE='Barang.Doc',Access='DIRECT',Recl=30) OPEN(2,FILE='Barang.Key',Access='DIRECT',Recl=5) c Ambil nomor record (kode) dari file kunci Read(2,Rec=1) kode mad='Y' c Masukan kode yang di hapus 5 Write(*,'(24(/))') Write(*,'(15x,''Koreksi Data Barang'')') Write(*,'(15x,''==============='')') Write(*,'(5x,''Kode : '',I5)') Read(*,'(I5)')vKode c Jika kode kecil atau sama dengan nomor record If(Vkode.le.kode) Then c Baca file data dengan nomor record tersebut Read(1,Rec=vkode)nama,sat,har,stoc c Tampilkan isi record Write(*,'(5x,''Nama : '',a10)')nama Write(*,'(5x,''Satuan : '',a8)')satuan Write(*,'(5x,''Harga Satuan : '',I5)')har Write(*,'(5x,''Stock Awal : '',i3)')stoc c Masukan nilai untuk variabel kondisi dihapus Write(*,'(/,5x,''Data Jadi Dihapus [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika jadi dihapus IF(dbs.eq.'Y'.or.dbs.eq.'y') Then c Isi data baru c Simpan data record kosong Write(1,Rec=kode) ' ' Endif c Kalua kondisi tidak jadi dihapus lompati penyimpanan c record kosong Else c Jika kode yang dimasukan besar dari kode yang ada, tampil c kan pesan data tidak ada Pause 'Data Tidak Ada.....!' Endif c Masukan nilai variabel kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data, ulangi proses dari awal If(mad.eq.Y.or.Mad.eq.'y.') Goto 5 c Jika tidak ada data lagi tutup file Close(1) Close(2) End 9.3.6. Buat File Transaksi Program : $Debug c Pesan variabel memory Character nama*10,Sat*8,mad*1,Dbs*1,tgl*8,Jen*1 Integer har,stoc c Buka file OPEN(1,FILE='Barang.Doc',Access='DIRECT',Recl=30)

Page 80: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 80

OPEN(2,FILE='Barang.Key',Access='DIRECT',Recl=5) OPEN(3,FILE='Transak.Doc',Status='NEW',Access='DIRECT', Recl=30) OPEN(4,FILE='Transak.Key',Status='NEW',Access='DIRECT', Recl=5) c Set nomor record transaksi = 0 kode1=0 c Baca nomor record fiile barang Read(2,Rec=1)kode mad='Y' c Hapus layar 5 Write(*,'(24(/))') c Masukan kode barang transaksi Write(*,'(15x,''Input Kode Barang Data Transaksi'',\)') Read(*,'(i5)kodec c Jika kode besar dari nomor record file barang (kode) If(kodec.gt.kode) Then c Tampilkan pesan data barang tidak ada Write(*,'(/,10x,''Data Barang Tidak Ada....1'')') Pause 'Tekan Enter untuk lanjut ....!' Else c Jika kecil atau sama dengan kode yang dimasukan, baca c data barang Read(1,Rec=kodec)nama,sat,har,stoc 10 Write(*,'(24(/))') c Tampilkan data barang Write(*,'(15x,''Input Data Transaksi'')') Write(*,'(15x,''==============='')') Write(*,'(5x,''Kode Barang : '',I5)')kodec Write(*,'(5x,''Nama : '',a10)')nama Write(*,'(5x,''Satuan : '',a8)')sat Write(*,'(5x,''Harga Satuan : '',i5)')har Write(*,'(5x,''Stock Awal : '',I3)')stoc c Isi data transaksi Write(*,'(5x,''Tanggal [dd-mm-yy] :'',\)') Read(*,'(a8)')tgl Write(*,'(5x,''Satuan [J=jual,B=beli]] : '',\)') Read(*,'(A1)')sat Write(*,'(5x,''Jumlah (satuan) : '',\)') Read(*,'(I3)')jum c Isi variabel kondisi benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data salah ulangi pengisian, kalau tidak IF(dbs.eq.'T'.or.dbs.eq.'t') Goto 10 c Cek jenis taransaksi (jual atau beli) If(sat.eq.'J'.or.sat.eq.'j') Then c Jika jenis transaksi jual, cek jumlah stock barang, apakah c kecil dari jumlah transaksi If(jum.gt.stoc) then c Jika iya transaksi tidak bisa jalan Pause 'Transaksi TIDAK bisa dilaksanakan ...!' Else c Jika jumlah jual lebih kecil atau sama dengan stock, jumlah c Stock dikurangi dengan jumlah transaksi Stoc=stock-jum c Simpan kembali data barang Write(1,Rec=kodec)nama,sat,har,stoc c Nomor record transaksi ditambah dengan sat kode1=kode1+1 c Simpan data transaksi

Page 81: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 81

Write(3,Rec=kode1)kodec,tgl,jen,jum Endif Else c Jika jenis transaksi beli, stoc ditambah dengan jumlah Stoc=stock+jum c Simpan kembali data barang Write(1,Rec=kodec)nama,sat,har,stoc c Nomor record transaksi tambah dengan satu kode1=kode1+1 c Simpan data transaksi Write(3,Rec=kode1)kodec,tgl,jen,jum Endif Endif c Isi variabel kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data ulangi proses dari awal If(mad.eq.Y.or.Mad.eq.'y.') Goto 5 c Jika tidak, simapan nomor recor file transaksi Write(4,Rec=1)kode1 c Tutup semua file Close(1) Close(2) Close(3) Close(4) End 9.3.7. Tambah Data File Transaksi Program : $Debug c Pesan variabel memory Character nama*10,Sat*8,mad*1,Dbs*1,tgl*8,Jen*1 Integer har,stoc c Buka file OPEN(1,FILE='Barang.Doc',Access='DIRECT',Recl=30) OPEN(2,FILE='Barang.Key',Access='DIRECT',Recl=5) OPEN(3,FILE='Transak.Doc',Access='DIRECT',Recl=30) OPEN(4,FILE='Transak.Key',Access='DIRECT',Recl=5) cAmbil nomor record file kunci transaksi Read(4,Rec=1)kode1 c Baca nomor record fiile barang Read(2,Rec=1)kode mad='Y' c Hapus layar 5 Write(*,'(24(/))') c Masukan kode barang transaksi Write(*,'(15x,''Input Kode Barang Data Transaksi'',\)') Read(*,'(i5)kodec c Jika kode besar dari nomor record file barang (kode) If(kodec.gt.kode) Then c Tampilkan pesan data barang tidak ada Write(*,'(/,10x,''Data Barang Tidak Ada....1'')') Pause 'Tekan Enter untuk lanjut ....!' Else c Jika kecil atau sama dengan kode yang dimasukan, baca c data barang Read(1,Rec=kodec)nama,sat,har,stoc

Page 82: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 82

10 Write(*,'(24(/))') c Tampilkan data barang Write(*,'(15x,''Input Data Transaksi'')') Write(*,'(15x,''==============='')') Write(*,'(5x,''Kode Barang : '',I5)')kodec Write(*,'(5x,''Nama : '',a10)')nama Write(*,'(5x,''Satuan : '',a8)')sat Write(*,'(5x,''Harga Satuan : '',i5)')har Write(*,'(5x,''Stock Awal : '',I3)')stoc c Isi data transaksi Write(*,'(5x,''Tanggal [dd-mm-yy] :'',\)') Read(*,'(a8)')tgl Write(*,'(5x,''Satuan [J=jual,B=beli]] : '',\)') Read(*,'(A1)')sat Write(*,'(5x,''Jumlah (satuan) : '',\)') Read(*,'(I3)')jum c Isi variabel kondisi benar Write(*,'(/,5x,''Data Sudah Benar [Y/T] : '',\)') Read(*,'(F6.2)')dbs c Jika data salah ulangi pengisian, kalau tidak IF(dbs.eq.'T'.or.dbs.eq.'t') Goto 10 c Cek jenis taransaksi (jual atau beli) If(sat.eq.'J'.or.sat.eq.'j') Then c Jika jenis transaksi jual, cek jumlah stock barang, apakah c kecil dari jumlah transaksi If(jum.gt.stoc) then c Jika iya transaksi tidak bisa jalan Pause 'Transaksi TIDAK bisa dilaksanakan ...!' Else c Jika jumlah jual lebih kecil atau sama dengan stock, jumlah c Stock dikurangi dengan jumlah transaksi Stoc=stock-jum c Simpan kembali data barang Write(1,Rec=kodec)nama,sat,har,stoc c Nomor record transaksi ditambah dengan sat kode1=kode1+1 c Simpan data transaksi Write(3,Rec=kode1)kodec,tgl,jen,jum Endif Else c Jika jenis transaksi beli, stoc ditambah dengan jumlah Stoc=stock+jum c Simpan kembali data barang Write(1,Rec=kodec)nama,sat,har,stoc c Nomor record transaksi tambah dengan satu kode1=kode1+1 c Simpan data transaksi Write(3,Rec=kode1)kodec,tgl,jen,jum Endif Endif c Isi variabel kondisi masih ada data Write(*,'(/,5x,''Masih Ada Data [Y/T] : '',\)') Read(*,'(F6.2)')mad c Jika masih ada data ulangi proses dari awal If(mad.eq.Y.or.Mad.eq.'y.') Goto 5 c Jika tidak, simapan nomor recor file transaksi Write(4,Rec=1)kode1 c Tutup semua file Close(1)

Page 83: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 83

Close(2) Close(3) Close(4) c Akhir program End 9.3.8. Laporan Data Transaksi Program : $Debug c Set variabel memory Character nama*10,Sat*8,mad*1,Dbs*1,tgl*8,Jen*1 Integer har,stoc,tjj,tjb,ttj,ttb c Buka file OPEN(1,FILE='Barang.Doc',Access='DIRECT',Recl=30) OPEN(2,FILE='Barang.Key',Access='DIRECT',Recl=5) OPEN(3,FILE='Transak.Doc',Access='DIRECT',Recl=30) OPEN(4,FILE='Transak.Key',Access='DIRECT',Recl=5) c Ambil nilai nomor record file barang & transaksi (kode) Read(4,Rec=1)kode1 Read(2,Rec=1)kode c Lakukan proses perulangan sampai data barang habis dibaca Do 5 I=1,kode c Baca file barang Read(1,Rec=I)nama,sat,har,stoc c Buat judul laporan Write(*,'(24(/))') Write(*,'(15x,''LAPORAN TRANSAKSI'')') Write(*,'(15x,''==================='')') c Tampilkan data barang Write(*,'(1x,A,I5,13X,A,A10)')'Kode Barang : ',kode,'Nama : ',nama Write(*,'(1x,A,A8,7x,A,i5)')'Satuan : ',sat,'Harga Satuan : ',har Write(*,'(1x,''Stock Awal : '',I3)')stoc Wirte(*,'(1x,a)') '------------------------------------------------------------------------------' Write(*,'(1x,a)') '¦ ¦ ¦ Jumlah ¦ Total Harga ¦' Write(*,'(1x,A)')'¦ No. ¦ Tanggal -----------------------------------------------------¦' Write(*,'(1x,a)') '¦ ¦ ¦ Jual ¦ Beli ¦ Jual ¦ Beli ¦' Wirte(*,'(1x,a)') '------------------------------------------------------------------------------' c Set semua variabel jumlah dan total sama dengan nol Nom=0 tjj=0 tjb=0 ttj=0 ttb=0 c Lakukan pengulangan membaca file transaksi sampai habis Do 10 J=1,kode1 c Baca file transaksi Read(3,Rec=J)kodec,tgl,jen,jum c Cek apakah kode barang sama dengan kode transaksi If(kodec.eq.kode) Then c Jika kode sama, lakukan proses pengisian nilai variabel c yang akan dilaporkan nom=nom+1 If(jen.eq.'J'.or.jen.eq.'j') then jh=jum*har tjj=tjj+jum ttj=ttj+jh c jika jenis = jual tampilkan pada kelompok jual

Page 84: Bahasa Pemrograman Fortran

Teori Pemrograman Terstruktur Bahasa Fortran

JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 84

Write(*,'(1x,a,I2,a,a8,a,i3,a,I8,a)')'¦ ',nom,' ¦ ',tgl,' ¦ ',jum,' ¦ - ¦ ',jh,' | |’ Else jh=jum*har tjb=tjb+jum ttb=ttb+jh c jika jenis = beli tampilkan pada kelompok jual Write(*,'(1x,a,I2,a,a8,a,i3,a,I8,a)')'¦ ',nom,' ¦ ',tgl,' ¦ ¦',jum,' ¦ ¦ - ',jh,' ¦' Endif 10 Continue c Jika sudah habis data transaksi dibaca, tampilkan total Wirte(*,'(1x,a)') '------------------------------------------------------------------------------' Write(*,'(1x,a,i4,a,i4,a,i9,a,i9,a)')'¦ Total ¦',tjj,' ¦'',tjb,' ¦',ttj,' ¦',ttb,' ¦' Wirte(*,'(1x,a)') '------------------------------------------------------------------------------' c Diam sejenak untuk per kode barang Pause 'Tekan Enter Untuk Lanjut ....!' c Lanjutkan baca data barang berikutnya 5 Continue c Tutup file data Close(1) Close(2) Close(3) Close(4) c Tutup program End