Professional Documents
Culture Documents
BAB I
PENDAHULUAN
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.
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).
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.
Kolom 1
- "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
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 :
|1-----5|6|7-------------------------------------------------------------------------------72|73---------80|
1.3 Metacommand
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 :
b. $INCLUDE
Bentuk umum :
$INCLUDE: 'nama_program.FOR'
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 :
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 :
Contoh:
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 :
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 ;
Contoh :
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 :
Contoh :
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 :
n => panjang digit yang dapat ditampung, maksimal 127 byte. Jika nilai n tidak dibuat maka
panjang digitnya adalah 4 byte.
Contoh :
1.4.2.4. LOGICAL
LOGICAL digunakan untuk memesan variabel logika, yang nilai dari variabel
tersebut hanya .TRUE. dan .FALSE. saja.
Contoh :
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 :
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
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
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
Contoh :
Nama = Panggilan
Variabel kaharakter
Variabel kharakter.
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.
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 :
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.
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).
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).
Edit descriptor ini digunakan untuk tipe data alfanumerik atau karakter. Bentuk
umumnya adalah :
[r]A[w]
Keterangan :
Contoh :
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 :
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).
[w]X
Keterangan :
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).
Edit descriptor ini digunakan untuk menyatakan posisi berikutnya dalam baris
yang sama. Edit Descriptor ini khusus untuk media tampilan (layar monitor).
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).
[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 :
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
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)
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 (,).
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.
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.
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).
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.
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).
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.
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 2.
READ(*,5) X,J,Y
5 FORMAT(F5.2,I4,F7.3)
Contoh 1.
JUFRIADIF NA’AM Universitas Putra Indonesia “YPTK” Halaman : 12
Teori Pemrograman Terstruktur Bahasa Fortran
Contoh 2.
READ(*,'(F5.2,I4,F7.3)') X,J,Y
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
WRITE(nu[,fs][,ERR=nl][,REC=nr])daftar_variabel
Keterangan :
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).
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.
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).
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 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)
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
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
hasilnya:
Nilai dari variabel A = 456.67
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:
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 :
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
$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
$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 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.
END
Pada perintah END ini tidak boleh diikuti oleh argumen lain.
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 :
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'
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 :
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 :
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....
BAB IV
PERINTAH PERCABANGAN
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 :
Keterangan :
Jika variabel bernilai 1 maka proses akan pindah ke nl_1, dan bernilai 2 ke nr_2, dan seterusnya.
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
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
- Logikal IF
- Aritematika IF
- Blok IF.
4.2.1. Logikal IF
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> <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 :
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).
$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
4.2.2. Aritematika IF
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
terletak antara THEN sampai ENDIF. Pengerjaan Blok pernyataan ini, jika kondisi pada IF
terpenuhi (benar).
Keterangan :
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
Contoh :
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
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
BAB V
PERINTAH PERULANGAN
- Perulangan kwantitatif
- Perulangan selama kondisi benar
- perulangan selama kondisi salah.
DO nl variabel=awal,akhir,kenaikan
:
: <blok pernyataan>
:
nl CONTINUE
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
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:
DO 5 ..... DO 10 ....
: :
: :
DO 10 .... DO 15 ....
: :
: :
DO 15 .... 10 CONTINUE
: :
: :
15 CONTINUE 15 CONTINUE
:
:
DO 20 ....
:
:
20 CONTINUE
:
:
10 CONTINUE
:
:
5 CONTINUE
$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
nl1 :
: <blok pernyataan>
:
IF (ekspresi) GOTO nl2
GOTO nl1
nl2 :
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
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 dieksekusi oleh perintah pengerjaan lainnya seperti Write dan
yang dieksekusi oleh program bukan fungsinya tetapi adalah perintahnya.
nama_fungsi([var_1]...[,var_n]) = operasi_aritematik
Keterangan :
Contoh 1 membuat fungsi perintah untuk rumus luas dan keliling segitiga siku-siku, yaitu :
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.
$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
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.
[tipe_data] FUNCTION
nama_fungsi([var_1]...[,var_n])
:
: <blok pernyataan>
:
END
Keterangan :
Contoh 1 membuat fungsi perintah untuk rumus luas dan keliling segitiga siku-siku, yaitu :
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
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.
Pada fungsi ini memiliki satu variabel parameter masukan (input) yang diproses
oleh fungsi tersebut.
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
Pada fungsi ini memiliki satu variabel parameter masukan (input) yang diproses
oleh fungsi tersebut.
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
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
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 :
Fungsi sisa pembagian merupakan nilai sisa dari operasi pembagian bilangan.
Contoh :
$DEBUG
I=10
J=4
K=MOD(I,J)
Write(*,'(5X,I3,''bagi'',I3,''sisa sama dengan '',I3)')I,J,K
END
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.
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:
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).
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 :
Fungsi ini membandingkan nilai dari variabel parameter yang ada dan mencari
mana nilai yang tertinggi (terbesar). Variabel parameter (yang dibandingkan) bisa banyak.
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 :
Fungsi ini membandingkan nilai dari variabel parameter yang ada dan mencari
mana nilai yang terkecil (terendah). Variabel parameter (yang dibandingkan) bisa banyak.
Contoh :
$DEBUG
I=4
J=9
K=7
L=-10
M=2
N=6
Mi=Min0(I,J,K,L,M,N)
Write(*,'(5X,''Nilai Terendah adalah ='',I3)')mi
END
Hasil :
Fungsi ini mengalikan (*) dua buah bilangan real, yang nilai dari hasil perkalian
tersebut disimpan didalam nama fungsi.
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 :
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
Fungsi ini mencari nilai eksponensial dari bilangan real, dengan rumus eX
(e=2,71828).
Contoh :
$DEBUG
Y1=2.00
Z1=EXP(Y1)
Write(*,'(5X,''Eksponensial dari'',F8.2,'' = '',F8.5)') Y1,Z1
END
Hasil :
$DEBUG
Y1=1000.00
Z1=ALOG(Y1)
Write(*,'(5X,''Logarithma dari'',F8.2,'' = '',F8.4)') Y1,Z1
END
Hasil :
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.
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
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).
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)
Hasil :
BAB VII
PROGRAM INDUK DAN PROSEDUR
Sub induk program utama (main) dapat diberi nama identitasnya dengan
memakai perintah PROGRAM dan juga boleh tidak dibuat.
PROGRAM Nama_program
Contoh :
PROGRAM Nilai
PROGRAM Latihan
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
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
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 :
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 :
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
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
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.
OPEN(nu[,FILE='nfile'][,STATUS='status'][,ACCESS='akses'][,FORM='format'] [,RECL=panjang])
Keterangan :
- 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.
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 :
- 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).
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 :
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.
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.
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
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.
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 :
Contoh :
CLOSE(1)
CLOSE(2,status='KEEP')
CLOSE(1,status='Delete')
b. ENDFILE.
Keterangan :
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.
BACKSPACE nu
Keterangan :
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).
REWIND nu
Keterangan :
Contoh :
REWIND 1
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 :
Proses :
- Nomor BP
- Nama
- Nilai Program Entri
- Nilai Program Transaksi
- Nilai Program Informasi
Struktur Record
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
$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
$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
Untuk mengoreksi data pada file dapat dilakukan logika pengolah sebagai berikut
:
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
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.
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
Untuk menampilkan seluruh data pada file dapat dilakukan logika pemrosesan
sebagai berikut :
Program :
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.
Logika yang digunakan sama dengan membuat file baru pada metoda akses
urut, hanya file yang dibuka 2 (dua) buah sekaligus.
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
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
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
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
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
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 :
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
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.
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.
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
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
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)
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
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
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
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
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
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