Anda di halaman 1dari 84

Teori Pemrograman Terstruktur Bahasa Fortran

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.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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)

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 :

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


Teori Pemrograman Terstruktur Bahasa Fortran

Tabel 1-1. Operator Aritematika

Operator Keterangan Tingkat


() blok operasi 1
** perpangkata 2
* n 3
/ perkalian 3
+ pembagian 4
- penambahan 4
pengurangan

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 6
Teori Pemrograman Terstruktur Bahasa Fortran

aritmetik. Tetapi operasi dapat dilakukan terhadap sesama variabel kharakter.

Contoh :

Nama = Panggilan

Variabel kaharakter
Variabel kharakter.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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.
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 12
Teori Pemrograman Terstruktur Bahasa Fortran

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),
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 13
Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 :

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


Teori Pemrograman Terstruktur Bahasa Fortran

- Menentukan variabel untuk masing-masing data


-
Name Type Width Decimal Description
BP Character 8 - Nomor BP
Nama Character 15 - Nama Mahasiswa
NT Integer 3 - Nilai Tugas
NQ Integer 3 - Nilai Quiz
NM Integer 3 - Nilai Ujian Mid
NU Integer 3 - Nilai Uj.Akhir
NA Real 6 2 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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 16
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 17
Teori Pemrograman Terstruktur Bahasa Fortran

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.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 :

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


Teori Pemrograman Terstruktur Bahasa Fortran

$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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 21
Teori Pemrograman Terstruktur Bahasa Fortran

- 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. < Kecil dari
.LE. <= Kecil sama dengan
.GT. > Besar dari
.GE. >= Besar sama dengan
.EQ. = Sama dengan
.NE. <> Tidak sama dengan

Tabel 4-2. Operator Jamak.

Operator Keterangan
.NOT. Tidak sama dengan
.AND. Dan
.OR. 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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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


JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 23
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 24
Teori Pemrograman Terstruktur Bahasa Fortran

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'
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 25
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 26
Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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.


JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 28
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 29
Teori Pemrograman Terstruktur Bahasa Fortran

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(/))')
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 30
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 31
Teori Pemrograman Terstruktur Bahasa Fortran

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'
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 32
Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

BAB VI
FUNGSI

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 ...!'
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 34
Teori Pemrograman Terstruktur Bahasa Fortran

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'
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 35
Teori Pemrograman Terstruktur Bahasa Fortran

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 :

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


Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 37
Teori Pemrograman Terstruktur Bahasa Fortran

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 Tipe Data Keterangan
Parameter Hasil
INT(X) Real*4 Integer Merubah bilangan desimal ke bilangan
Integer bulat
IFIX(X) Real*4 Integer Merubah bilangan real ke pecahan
IDINT(X) Real*8 Integer Merubah bilangan real ketetapan ganda
ke bil. Bulat
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 38
Teori Pemrograman Terstruktur Bahasa Fortran

REAL(X) Real*4 Real Merubah bilangan ke bilangan pecahan


Integer
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*8 Merubah nilai bilangan ke bilangan
Real*4 pecahan ke tetapan ganda
Real*8

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 Tipe Data Tipe Data Keterangan


Fungsi Parameter Hasil
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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 Tipe Data Tipe data Keterangan
Fungsi Parameter Hasil
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 Tipe Data Keterangan
Parameter Hasil
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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 FungsiTipe Data Tipe Data Keterangan


Parameter Hasil
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 Tipe Data Keterangan


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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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


JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 44
Teori Pemrograman Terstruktur Bahasa Fortran

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)

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


Teori Pemrograman Terstruktur Bahasa Fortran

Write(*,'(5X,''Kecil dari : '',L1)')LTT(Anak1,Anak2)


END

Hasil :

Besar dari : .T.


Besar sama dengan : .T.
Kecil sama dengan : .F.
Kecil dari : .F.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

(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'
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 48
Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

BAB VIII
ARRAY

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

BAB IX
FILE

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.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 huruf menjadi besar
15 huruf menjadi kecil
18 huruf menjadi normal dari huruh kecil
20 huruf menjadi normal dari huruf besar
77083 garis bawah aktif
11547 garis bawah pasif
17691 huruf tebal aktif
17947 huruf tebal pasif
21275 huruf naik keatas (pangkat) aktif
21531 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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 54
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 55
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 56
Teori Pemrograman Terstruktur Bahasa Fortran

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

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 :

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


Teori Pemrograman Terstruktur Bahasa Fortran

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

Struktur Record

Field Name Type Width Decimal Description


Nobp Character 8 - Nomor BP
Nama Character 15 - Nama Mahasiswa
Entri Real 6 2 Nilai Program Entri
Tran Real 6 2 Nilai Program Transaksi
Info Real 6 2 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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 59
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 60
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 61
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 62
Teori Pemrograman Terstruktur Bahasa Fortran

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.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 64
Teori Pemrograman Terstruktur Bahasa Fortran

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 NOBP 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(/))')
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 65
Teori Pemrograman Terstruktur Bahasa Fortran

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.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 67
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 68
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 69
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 70
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 71
Teori Pemrograman Terstruktur Bahasa Fortran

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 ¦'
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 72
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 73
Teori Pemrograman Terstruktur Bahasa Fortran

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.

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


Teori Pemrograman Terstruktur Bahasa Fortran

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 Numeric 5 0 Kode Barang
Nama Character 10 - Nama Barang
Sat Character 8 - Satuan
Har Numeric 5 0 Harga Barang
Stoc Numeric 3 0 Stock Barang

* File Transak
Name Type Width Decimal Description
Tgl Character 58 - Tanggal
Jen Character 1 0 Jenis
Jum Numeric 3 0 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)

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


Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 76
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 77
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 78
Teori Pemrograman Terstruktur Bahasa Fortran

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)
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 79
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 80
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 81
Teori Pemrograman Terstruktur Bahasa Fortran

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)
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 82
Teori Pemrograman Terstruktur Bahasa Fortran

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
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 83
Teori Pemrograman Terstruktur Bahasa Fortran

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

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