Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
Setelah menyelesaikan mata kuliah Komputer mahasiswa mampu mengembangkan paket program aplikasi mandiri untuk menyelesaikan masalah keteknikan khususnya Teknik Mesin dengan bahasa FORTRAN
KOMPETENSI DASAR
Mahasiswa dapat membuat program aplikasi yang lebih kompleks yang membutuhkan adanya pengambilan keputusan dalam mengatur aliran logika program.
INDIKATOR
1. Mahasiswa dapat menggunakan stetemen perulangan dalam mengatur aliran logika pemrograman dimana dibutuhkan adanya pengerjaan sebuah statemen yang berulang-ulang (looping and repetition) 2. Mahasiswa dapat menerapkan penyeleksian kondisi pada sebuah statemen yang memiliki beberapa opsi pengerjaan yang berbeda sesuai dengan kondisi yang dihasilkan.
4 42
43
3.1
PERULANGAN
Statemen kontrol atau statemen kendali termasuk executabel statement, yang mengendalikan urutan dari proses statemen-statemen di dalam blok program. Di dalam sebuah program, kadang kala, terdapat suatu eksekusi statemen yang sama yang dilakukan berulang-ulang. Dimana, pengulangan suatu proses adalah hal yang mendasar untuk penulisan progran komputer, dan akan sangat berguna untuk mempunyai sebuah komando mirip makro seperti DO WHILE 1 I N. 3.1.1 CONTINUE Pernyataan CONTINUE digunakan sebagai dummy statement (statemen boneka), yang digunakan untuk terminal statement pada statemen DO atau statemen GOTO 3.1.2 STATEMEN END Fungsi dari statemen END pada program utama adalah untuk mengahiri proses dari program, sedangkan pada unit program mempunyai fungsi seperti RETURN. Statemen END harus terletak diakhir dari program dan tidak boleh digabung dengan statemen lain. Bentuk umum dari statemen ini adalah : END Contoh 3.1 :
C234567890 END selalu di akhir program A= 20.0 WRITE(*,21) A 21 FORMAT(1X,NILAI A = ,F7.2) END
STATEMEN
3.1.3
STATEMEN STOP Statemen ini berfungsi untuk menghentikan proses pengerjaan program. Statemen STOP tidak mesti ada didalam sebuah program. Penempatan statemen ini boleh dimana saja di dalam program. Bentuk umum statemen STOP adalah sebagai berikut : STOP [<n>] Dimana :
44
merupakan suatu konstanta angka yang panjangnya tidak boleh lebih dari lima digit atau suatu string dan sifatnya opsional.
C234567890 A=10.0 B=60.0 WRITE(*,100) A STOP PROSES DIHENTIKAN DENGAN STATEMEN STOP WRITE(*,200) B 100 FORMAT(1X,NILAI A =,F5.1,/) 200 FORMAT(1X,NILAI B =,F5.1) END
3.1.4
STATEMEN PAUSE Tidak seperti statemen STOP yang menghentikan/keluar dari program, statemen PAUSE digunakan untuk menghentikan sementara proses eksekusi program. Pengaruh dari penghentian sementaran program dengan statemen PAUSE akan berakhir atau eksekusi program dilanjutkan apabila ditekan tombol <Enter>. Bentuk umum statemen PAUSE sebagai berikut : PAUSE [<n>] Dimana : <n> Contoh 3.2 :
C234567890 A=10.0 B=60.0 WRITE(*,100) A PAUSE Tekan Tombol RETURN untuk melihat nilai B WRITE(*,200) B 100 FORMAT(1X,NILAI A =,F5.1,/) 200 FORMAT(1X,NILAI B =,F5.1) END
merupakan suatu konstanta angka yang panjangnya tidak boleh lebih dari lima digit atau suatu string dan sifatnya opsional.
45
3.1.5
STATEMEN DO
Pernyataan DO digunakan untuk mengulang suatu statemen atau proses sebanyak N kali. Bentuk umum dari statemen ini adalah sebagai berikut : DO <slabel>[,] <nama variabel> = <exp1>,<exp2>[,<exp3>] Dimana : <slabel> : adalah statemen label dari suatu executabel statement. <nama variabel> : suatu variabel numerik integer <exp1> : nilai numerik bulat sebagai awal perulangan (starting point) <exp2> : nilai numerik bulat akhir perulangan (end point) <exp3> : nilai numerik bulat sebagai peningkatan (interval) perulangan.
Statemen label Variabel numerik integer Awal perulangan Akhir perulangan Peningkatan (increment)
Contoh 3.3 :
Tampak statemen WRITE akan diperoses sebanyak lima kali, yaitu hitungan I = 1 sampai I = 5 dengan interval 1.
46
Untuk pengulangan menurun gunakan nilai awal lebih besar dari nilai akhir dengan interval bertanda minus (-) seperti tampak dalam contoh 3.4 berikut. Contoh 3.4 :
C234567890 DO 5 I=8,1,-2 5 WRITE(*,21) I 21 FORMAT(1X,NILAI I = ,I2) END
Selain hal tersebut di atas, statemen DO juga bisa menggunakan blok program DO-CONTINUE (badan DO-loop diindentasi lebih kedalam untuk memudahkan pembacaan). Bentuk statemen ini sebagai berikut:
DO n I = IN,IE,IC . . . BADAN DO LOOP . . . n CONTINUE
Dimana : IN = nilai awal indeks IE = nilai uji/akhir indexs IC = peningkatan/interval n = statemen label (nomor Pernyataan CONTINUE)
Untuk jelasnya, stateman DO dapat digambarkan dalam bentuk diagram alir seperti tampak dalam gambar 3.1.
47
I IN
DO n I = IN,IE, IC
Badan DO Badan DO
I I + IC Ya belum selesai
I IE
Tidak
SELESAI
belum selesai
n
SELESAI
(a)
(b)
MULAI DO 200 I=1,10 0 BACA ID,S1,S2,S3 SUM S1+S2+S3 AVESUM/3.0 CETAK ID,S1,S2,S3,AV E 20 0 SELESAI
Gambar 3.2 Diagram alir contoh 3.5, menghitung rata-rata 3 (tiga) nilai ujian mahasiswa
48
Contoh 3.6
SUM 0
C PROGRAM PENENTUAN RATA-RATA C C234567890 SUM=0.0 DO 200 I=1,100 READ(*,10)A 10 FORMAT(F10.2) SUM = SUM+A 200 CONTINUE AVE = SUM/100.0 WRITE(*,20)AVE 20 FORMAT(1X,F10.2) STOP END
3.1.6 DO-LOOP
Gambar 3.2 Diagram alir contoh 3.6, Menghitung rata-rata 100 bilangan KELUAR DARI
Terdapat dua cara untuk keluar dari suatu DO-loop : (a) keluar secara normal, (b) keluar tak normal. Pembahasan hal tersebut akan dibahas lebih detail di bawah ini. A. Keluar Normal Program akan keluar dari perulangan secara normal terjadi apabila indeks I melebihi nilai uji IE (seperti ditunjukkan pada diagram alir pada gambar 3.1 (a). Dalam kasus demikian, pengendalian dialihkam ke pernyataan pertama setelah Do-loop. Semua contoh di atas keluar secara normal. B. Keluar Tak Normal Dimungkinkan beralih dari dalam ke luar suatu DO loop, misalnya dengan sebuah penyeleksian kondisi IF di dalam DO loop, walaupun nilai indeks yang sekarang tidak melebihi nilai uji IE. Suatu sifat mendasar dari keluar tidak normal suatu DO loop adalah bahwa pada saat keluar, nilai indeks I yang sekarang dipertahankan, karenanya dapat digunakan dalam perhitungan lebih lanjut atau
49
dalam operasi masukan/keluaran. Kerangka program berikut menggambarkan bilangan indeks K terdefinisi atau tidak. DO 100 K = 1, 100, 2 *** *** IF( X .LT. Y) GO TO 200 *** *** 100 CONTINUE *** *** Nilai Indeks K tidak terdefinisi untuk pernyataan
ini
CONTOH 3.7 :
C234567890 READ (*,8) K 8 FORMAT(I10) KK = K/2 DO 100 I = 2, KK IF (K .EQ.(K/I)*I) GO TO 50 100 CONTINUE WRITE(*,10)K 10 FORMAT(10X,I5,1X,ADALAH 1PRIMA) STOP 50 WRITE(*,20)K,I 20 FORMAT(10X,I5,1X,BUKAN PRIMA 1 10X,I5,1X,ADALAH PEMBAGI) STOP END
50
3.1.7 PENGALIHAN DI DALAM DAN KE SUATU DO-LOOP Seseorang selalu dapat beralih dari suatu titik dalam suatu DO loop ke titik lainnya dalam DO loop yang sama, dan seseorang secara bebas dapat melompat ke luar dari DO loop sembarang. Tetapi tidak mungkin untuk melompat ke tengah-tengah DO loop. Yakni, satu-satunya cara untuk beralih ke pernyataan di dalam suatu DO loop hanyalah melalui pernyataan DO yang sama. Adaikan kita ingin sebuah ruas program FORTRAN menggunakan DO loop yang menghitung jumlah 1+2+3+5+6+7+ 8+9+10 tanpa melalui bilangan 4, bandingkan dua program berikut : (A) ISUM =0 DO 100 I=1,10 IF(I .EQ. 4) I = I + 1 ISUM = ISUM + I 100 CONTINUE ISUM = 0 50 DO 200 I=1,10 IF(I .EQ. 4) GO TO 50 ISUM = ISUM + I 200 CONTINUE
(B)
Progran A tidak benar karena indeks I diubah di dalam DO loop. Yaitu, jika pernyataan IF(I .EQ. 4) I = I + 1 ISUM = ISUM + I tidak berada dalam sebuah DO loop, maka 5 akan ditambahkan pada ISUM jika I mula-mula berisi 4. Tetapi, karena disini beada di tengah-tengah DO loop, pernyataan-pernyataan tersebut tidak diijinkan. Berlawanan dengan hal ini, program B memuat penggunaan DO loop secara benar, tetapi logika program salah. Terdapat suatu ke luar tak normal bilamana I bernilai 4, tetapi pengendalian dialihkan lagi ke pernyataan DO, dan indeks dikembalikan ke nilai awal.Sehingga hasil exsekusi hanya akan menjumlahkan 1+2+3 berulang-ulang. Hasilnya adalah : 1+2+3+1+2+3+ Program B akan menghitung jumlah yang diminta apabila pernyataan IF(I .EQ. 4) GO TO 50 diganti dengan :
51
Contoh 3.8 :
C PROGRAM PENENTUAN C BILANGAN TERBESAR C C234567890 REAL LAR READ (*,10) LAR 10 FORMAT(F10.2) DO 50 I = 1, 99 READ (*,10) X IF(LAR.GE.X)GO TO 50 LAR = X 50 CONTINUE WRITE(*,20)LAR 20 FORMAT(1X,F10.2) STOP END
Gambar 3.4 Diagram alir contoh 3.8, Menentukan Bilangan Terbesar 3.1.8 BERSARANG (NASTED DO) DO-LOOP
Dimungkinkan mempunyai sebuah DO loop (lebih dalam) di dalam rentang DO loop lain (lebih luar). DO loop yang terbentuk disebut DO loop bersarang (nasted do). Aturan yang berlaku pada DO loop bersarang pada dasarnya sama dengan DO loop tunggal. Tetapi berikut adalah hal-hal yagn penting di dalam penggunaan DO loop bersarang: 1. Karena indeks tidak dapat didefinisikan ulang didalam badan DO loop, indeks DO loop yang lebih dalam harus tidak sama dengan indeks DO loop sebelah luar. 2. Do loop yang lebih dalam harus terletak di dalam DO loop yang lebih luar; yatiu tidak boleh jadi tumpang tindih. Gambar 3.5 menggambarkan cara DO loop bersarang dibentuk. 3. Banyaknya Do loop bersarang dibatasi oleh kompailer. Pengalihan pengendalian di dalam DO loop bersarang dapat memperdayakan, tetapi atauran-aturan tetap sama seperti DO loop tunggal. 4. DO loop boleh memiliki pernyataan terakhir yang sama seperti ditunjukkan dalam gambar 3.6.
52
DO 18____________ *** *** DO 20___________ *** *** DO 30___________ *** *** 30 CONTINUE *** *** 20 CONTINUE *** *** 18 CONTINUE Dapat diterima ( DO loop bersarang ) (a)
DO 18____________ *** *** *** DO 20___________ *** *** *** 18 CONTINUE *** *** *** 20 CONTINUE
53
Contoh 3.9 :
C PROGRAM MENGHITUNG NILAI RATA-RATA C TIGA KALI UJIAN 25 MAHASISWA DENGAN C NASTED DO-LOOP C C234567890 WRITE(*,100) 100 FORMAT(1,4X,ID,9X,AVERAGE) DO 80 K = 1,25 READ (*,90) ID 90 FORMAT(I10) SUM=0.0 DO 20 I=1,3 READ(*,10)SCORE 10 FORMAT(F6.2) SUM=SUM+SCORE 20 CONTINUE AVE=SUM/3.0 WRITE(*,30)ID, AVE 30 FORMAT(1X,110,5X, F6.2) 80 CONTINUE END
3.2 3.2.1
Statemen GO TO merupakan statemen loncatan, yaitu digunakan untuk meloncat ke suatu statemen lainnya yang tertentu. Ada dua bentuk statemen ini, yaitu : Statemen GO TO tanpa syarat (unconditional GO TO) Statemen GO TO pengerjaan (assigned GO TO) Statemen GO TO bersyarat/terhitung (computed GO TO) A. STATEMEN GO TO TANPA SYARAT Statemen ini memberiperintah agar program dilanjutkan langsung ke statemen nomor <slabel>. Bentuk umum : GO TO <slabel> Dimana :
54
<slabel> = nomor statemen yang dapat dilaksanakan. variabel <slabel> (integer) adalah salah satu nomor statemen yangterdapat dalam program. Dengan statemen ini program dapat meloncati beberapa baris statemen di atas atau dibawahnya. MULAI Contoh 3.10 :
C PROGRAM MENGHITUNG NILAI C RATA-RATA UNTUK TIAP MAHASISWA C C234567890 100 READ (*,90) ID,S1,S2,S3 90 FORMAT(I5,F10.2,F10.2,F10.2) WRITE(*,90)ID,S1,S2,S3 SUM = S1+S2+S3 AVE = SUM/3.0 WRITE(*,30)AVE 30 FORMAT(1X,RATA-RATA =,F6.2) GO TO 100 END
BACA ID,S1,S2,S3 CETAK ID,S1,S2,S3 SUM S1+S2+S3 Ave SUM/3 CETAK AVE SELESAI
Tanda C ini menunjukkan ditekan tombol CTRL+C (Break) Karena program akan terus berjalan (loop tak terhingga)
B. STATEMEN GO TO PENGERJAAN Statemen ini memberi perintah agar program meloncat ke statemen nomor <slabel> yang ditunjukkan oleh isi dari <name>. Bentuk umumnya : GO TO <name>[[,](<slabel>[,<slabel>])] Dimana :
55
<name> adalah nama variabel integer yang diisi statemen label dengan perintah ASSIGN Jadi salah satu nilai dari <slabel> harus sama dengan nilai dari <name>. Kalau nilai dari <name> tidak ada yang sama dari salah satu <slabel>, maka proses tidak akan melompat ke suatu statemen label apapun, tetapi akan dilanjutkanke statemen berikutnya. CONTOH 3.12 :
C234567890 ASSIGN 15 TO LONCAT GOTO LONCAT,(15) WRITE(*,(1A,A))TIDAK DITAMPILKAN 15 WRITE(*,(1A,A))DITAMPILKAN WRITE(*,(1A,A))INI JUGA DITAMPILKAN END
Nama variabel integer LONCAT berisi nilai statemen label 15 dan statemen GOTO LONCAT,(15) akan membawa proses meloncat ke statemen label 15, karena nilai variabel integer LONCAT sama dengan statemen label tersebut. C. STATEMEN GOTO BERSYARAT Statemen ini digunakan untuk mengontrol loncatan dari nilai ungkapan integer <i>. Bentuk umum : GOTO (<slabel>[,<slabel>])[,]<i> Dimana : <slabel> adalah statemen label dari suatu executabel statemen yang berada pada unit program yang sama dengan statemen GOTO bersyarat tersebut. <i> adalah ungkapan integer Statemen GOTO bersyarat akan menuju ke <slabel> yang pertama bila ungkapan <i> bernilai 1, akan menuju ke <slabel> kedua bila <i> bernilai 2 dan seterusnya.
56
Contoh 3.13
C234567890 CHARACTER*1 BUNYI WRITE(*,(1X,A)) << PILIHAN >> WRITE(*,*) WRITE(*,(1X,A)) 1. Menghitung isi silinder WRITE(*,(1X,A)) 2. Menghitung luas segi tiga WRITE(*,(1X,A)) 3. Menghitung isi kubus WRITE(*.*) WRITE(*,(1X,A)) 4. SELESAI 15 WRITE(*,(//,1X,A,\))PILIH NOMER (1-4)? READ(*,(BN,I1) NOMER Computed GOTO C - 1 C menuju ke label sesuai dengan nomor yang dipilih 1000 - 2 2000 WRITE(*,*) - 3 3000 GOTO(1000,2000,3000,4000) NOMER - 4 4000 BUNYI = 7 WRITE(*,(1X,A,A))SALAH PILIH!!,Ulangi, BUNYI GOTO 15 C C MENGHITUNG ISI SILINDER 1000 WRITE(*,(1X,A,\))JARI-JARI LINGKARAN? READ(*,(BN,F7.2)) R WRITE(*,(1X,A,\))TINGGI SILINDER? READ(*,(BN,F7.2)) T XISI = 3.1419 *R**2*T WRITE(*,(/,1X,A,F7.2))ISI SILINDER =,XISI GOTO 4000 C C MENGHITUNG LUAS SEGI TIGA 2000 WRITE(*,(1X,A,\))PANJANG SISI DASAR? READ(*,(BN,F7.2)) S WRITE(*,(1X,A,\))TINGGI SEGITIGA? READ(*,(BN,F7.2)) T XLUAS = 0.5*S*T WRITE(*,(/,1X,A,F7.2))LUAS SEGITIGA =,XLUAS GOTO 4000 C C MENGHITUNG ISI KUBUS 3000 WRITE(*,(1X,A,\))PANJANG SISI KUBUS? READ(*,(BN,F7.2)) S WRITE(*,(1X,A,\))TINGGI SILINDER? READ(*,(BN,F7.2)) T XISI = S*S*S WRITE(*,(/,1X,A,F7.2))ISI KUBUS =,XISI GOTO 4000
57
Bila dijalankan akan ditampilkan 4 buah pilihan dan anda dapat memilih salah satu dari pilihan tersebut :
<< PILIHAN >>
1. Menghitung isi silinder 2. Menghitung luas segi tiga 3. Menghitung isi kubus 4. SELESAI PILIH NOMER (1-4)?2
Jika misalnya dipilih 2, berarti akan menghitung luas segi tiga, maka akan ditanyakan :
PANJANG SISI DASAR?20.0 TINGGI SEGITIGA?15.0 LUAS SEGITIGA = 150.00
3.2.2
STATEMEN IF
Statemen atur kondisional dan iterasi (pengulangan) merupakan komponen bahasa FORTRAN yang dapat digunakan untuk membuat keputusan. Keputusan diambil setelah meninjau beberapa kondisi tertentu. Untuk keperluan ini dikenal adanya statemen IF. Ada 3 macam statemen IF yaitu : - IF logika (logical IF) - IF aritmatika (arithmetic IF) - IF blok (Block IF) A. IF LOGIKA IF logika digunakan untuk menyeleksi suatu statemen logika atau statemen hubungan (relasi), jika kondisinya benar (TRUE) maka statemen yang mengikutinya akan diperoses. Sebaliknya, jika salah (FALSE) proses akan meloncat ke statemen berikutnya (ungkapan logika yang digunakan .LT.,.LE.,.EQ.,.NE.,.GT.,.GE.). Dua operator logika yang sangat berguna selain .NOT. adalah .OR. (logika atau ) dan .AND. (logika dan).
58
Bentuk umum : IF(<expresi>) <statemen> Dimana : <expresi> ungkapan logika atau ungkapan hubungan yang akan diseleksi. <statemen> executable statement, kecuali statemen DO, blok IF atau statemen IF logika lainnya. Berikut adalah contoh pendeklarasian IF logika yang benar : IF(X .GT. 3 .AND. Y .LE. 2) GOTO 3 IF(A .LE. X .OR. Y .LE. 2) GOTO 5 IF(.NOT. (X .LT. Y .OR. G .GT. GG)) GOTO 3 Contoh 3.15
C PROGRAM MENCARI TAHUN KABISAT C234567890 WRITE(*,(1X,A,\))TAHUN ? READ(*,(BN,I4)) ITAHUN XTAHUN=ITAHUN/4.0 JTAHUN=ITAHUN/4 IF(XTAHUN .EQ. JTAHUN) GOTO 100 Ya WRITE(*,(1X,A,I4,A))TAHUN, 1ITAHUN,BUKAN TAHUN KABISAT GOTO 200 100 WRITE(*,(1X,A,I4,A))TAHUN, 1ITAHUN,ADALAH TAHUN KABISAT TULIS : 200 CONTINUE TAHUN KABISAT END
MULAI BACA ITAHUN HITUNG XTAHUN = ITAHUN/4.0 JTAHUN =ITAHUN/4
CONTINUE
SELESAI
B. IF ARITMATIKA
59
Statemen IF aritmatika digunakan untuk menyeleksi kondisi suatu ungkapan aritmatika apabila bernilai positif, negatif atau nol. Gambar 3.8 menunjukkan diagram alir dari if aritmatika. Bentuk umu IF aritmatika adalah : IF (<expressi>) <slabel>,<slabel>, <slabel> dimana : <expressi> merupakan ekspresi aritmatika (disebelah kanan tanda =) yang akan dievaluasi harganya. <slabel> merupakan nomor statemen yang dituju selanjutnya bila <expressi> lebih kecil, sama dengan atau lebih besar dari nol.
E< 0
FALSE TRUE
I J
ATAU
<0
E
=0
>0
E= 0
FALSE
TRUE
Gambar 3.8 Diagram alir IF Arithmatika Berikut adalah contoh pendeklarasian statemen IF aritmatika yang sahih : IF (A+B) 21, 23, 24 IF(Z-0.001)12, 12, 13 IF(X) 3, 4, 5 IF(K(I,J)-1)20, 40, 30 IF(A*XZ**3-A*B) 2, 3, 4 Contoh 3.16 :
C PROGRAM PREMI C PREMI = 9.75 JIKA BELUM KAWIN C PREMI = 16,25 KAWIN TANPA ANAK NEGATIF C PREMI = 24.50 KAWIN PUNYA ANAK C234567890 REAL NET WRITE(*,50)ID ? 50 READ(*,(BN,I4))ID NET PAY-9.75 PAY = 50000.00 IF(TYPE-2) 10,20,30 10 NET = PAY -9.75 GOTO 75 20 NET = PAY 16.25 GOTO 75 30 NET = PAY 24.50
NET PAY-24.50
60
C. IF BLOK Statemen IF blok dapat terdiri dari statemen IF-THEN, ELSE, ELSEIF dan ENDIF. Bentuk umum : IF(<statemen>) THEN ELSE ELSEIF (<statemen>) THEN ENDIF Berikut contoh pendeklarasian IF-THEN, ELSE, ELSEIF dan ENDIF : A. IF (IREMAIN .EQ. 2) THEN <statemen> ENDIF B. IF(IREMAIN .EQ.2) THEN <statemen> ELSE <statemen> ENDIF C. IF(IREMAIN .EQ. 2) THEN <statemen> ELSEIF (IREMAIN .EQ.3) THEN <statemen> ELSE <statemen> ENDIF Contoh 3.17 :
C234567890 CHARACTE*20 NAMA(5), KET, GARIS*52 REAL*4 NILAI(5) DATA NAMA /ARIEF,BUDI,CANDRA,DEWI,EDI/ DATA NILAI/95.9,57.5,23.5,90.0,65.75/ C CETAK JUDUL TABEL GARIS=---------------------------------------- WRITE(*,(1X,A)) DAFTAR NILAI UJIAN WRITE(*,*) WRITE(*,(1X,A)) GARIS
61
WRITE(*,(1X,A)) NAMA MAHASISWA NILAI WRITE(*,(1X,A)) GARIS DO 15 I=1,5 IF(NILAI(I) .GT. 75.0) THEN KET = LULUS SANGAT BAIK ELSEIF(NILAI(I) .GT. 65.0) THEN KET = LULUS BAIK ELSEIF(NILAI(I) .GT. 55.0) THEN KET = LULUS CUKUP ELSE KET =TIDAK LULUS ENDIF 15 WRITE(*,40) NAMA(I), NILAI(I), KET 40 FORMAT(1X,A20,2X,F6.2,2X,A20) WRITE(*,(1X,A)) GARIS END
MULAI BACA DATA NAMA, NILAI CETAK JUDUL TABEL
KETERANGAN
TIDAK
NILAI(I) > 65.0 ?
YA
TIDAK
NILAI(I) > 55.0 ?
YA
1 5
SELESAI
62
SOAL-SOAL YANG DIPECAHKAN 3.1 Temukan nilai akhir K setelah tiap ruas program FORTRAN berikut dilaksanakan a. K=2 b. K=2 10 DO 20 I=3,8,2 10 DO 20 I=3,8,2 IF (I .EQ.5) GOTO 20 IF (I .EQ.5) GOTO 10 K=K+1 K=K+1 20 CONTINUE 20 CONTINUE K=2*K K=2*K Jawab : a. Pernyataan pertama memberi nilai 2 kepada K. Kemudian DO loop dieksekusi sebagai berikut : (i) Pertama untuk I=3. karena I5, pernyataan K=K+1 dieksekusi, yang menghasilkan : K K+1 = 2+3=5 (ii) Kemudian untuk I=5. Karena I=5,pengendalian dialihkan ke CONTINUE yang mendaur-ulang DO loop (iii) Kemudian untuk I=7. Karena I5, pernyataan K=K+1 dieksekusi, yang menghasilkan : K K+1 = 5+7=12 Nilai I berikutnya melampaui nilai uji, sehingga pengendalian dialihkan ke pernyataan yang menyusul DO loop, yang melipat duakan nilai K. Karenanya nilai K terakhir adalah 24. (iv) b. Pernyataan pertama memberi nilai 2 kepada K. Kemudian DO loop dieksekusi sebagai berikut : (i) Pertama untuk I=3. Karena I5 pernyataan K=K+1 dieksekusi, yang menghasilkan : K K+1 = 2+3=5 (ii) Kemudian untuk I=5. Karena I=5, pengendalian dialihkan ke pernyataan DO Karena pengendalian dialihkan ke pernyataan DO, DO loop mulai dari awal lagi dan menetapkan I=3. Jadi, (i) dan (ii) diulang berkali-kali. Ini memberikan sebuah loop tak terhingga dan tidak terdapat nilai terakhir dari K.
63
3.2 Tuliskan pernyataan-pernyataan berikut dalam FORTRAN : a. Jika X>Y, berhenti b. Jika JK, lanjut ke pernyataan berpengenal 31 c. Jika a2B+C, lanjutkan ke pernyataan berpengenal 41 d. Jika A-BX3, berhenti Jawab : a. IF(X .GT. Y) stop b. IF(J .NE. K) GOTO 31 c. IF(A**2 .LE. B+C) GOTO 41 d. IF(A-B .GE. X**3) STOP
3.3 Andaikan X dan Y telah didefinisikan. Tuliskan sebuah pernyataan FORTRAN atau ruas FORTRAN yang (a) mengalihkan pengendalian ke pernyataan berpengenal 41 jika a2 Y, dan jika tidak demikian mengalohkan pengendalian ke pernyataan berpengenal 42; (b) menetapkan K=0 jika X+Y>100, dan jika tidak menetapkan K=1. Lakukan hal di atas dalam dua cara, sekali dengan sebuah pernyataan IF logika. Jawab : a . (i) perhatikan bahwa a2 Y, jika dan hanya jika a2 Y negatif atau nol IF (X**2-Y) 41, 41, 42 (ii) IF (X**2 .LE. Y) GOTO 41 42 b. (i) Perhatikan bahwa X+Y>100 jika dan hanya jika X+Y-100 positif IF(X+Y-100.0)20, 20, 10 10 K=0 GOTO 30 20 K=1 30 . (ii) IF (X+Y .LE. 100.0) GOTO 20 K=0 GOTO 30 20 K=1 30 . SOAL-SOAL LATIHAN 1. Pada tiap pernyataan DO berikut, temukan kesalahan, jika ada : a. DO 700, LAMB=1,14,l c. DO 900 K=I, J, K b. DO 800 J=7,M**2,2 d. DO 1000 LONG=K234 , K123, K345 2. Temukan nilai K setelah tiap ruas FORTRAN berikut dieksekusi
64
a.
K=3 DO 100 J=3,7,3 K=K+J 100 CONTINUE K=3*K K=3 M=2 DO 300 J=3,7,M K=K+J 300 CONTINUE K=3*K
b.
c.
K=3 M=2 DO 300 J=3,7,M M=M+K 300 CONTINUE K=3*K D. K=3 M=2 DO 400 J=M,7,M K=J+K+M IF(K.GT.9) GOTO 10 400 CONTINUE 10 K=3*K
3. Temukan kesalahan jika ada, pada tiap pernyataan FORTRAN berikut: a. IF(A=B) GOTO 50 e. IF(X.LE.100) GOTO K b. IF(X GT Y) STOP f. IF(A-100)10,20,30 c. IF(B**2-A*C) STOP g. IF(X.GE.Y) GOTO 55 d. IF(X.LT.Y+Z) 10,15, 20 h. IF(INT.LT.AMOUNT STOP 4. Jika J dan K masing-masing berisi 3 dan 5. temukan nilai akhir J setelah masing-masing ruas program dieksekusi : a. c. d. IF(J.GE.K) J=J+2 J=J+2 IF(5*J.EQ.3*K) J=J+2 J=J+2 IF(J-) 10,10,20 10 J=K 20 J=J+2 b. D. IF(J.LT.K-1) GOTO 10 J=J+2 10 J=J+K IF(J.GE.K+1) GOTO 10 J=J+2 10 J=J+K IF(2*J-K)10,10,20 10 J=K 20 J=J+2
PRAKTIKUM 1. Tulislah bebrapa program FORTRAN berikut, jalankan, amati prosesnya dan simpan dengan nama berbeda.
C23456789 PROGRAM LAT3_1A C Program statemen STOP WRITE(*,4) A 4 FORMAT (1X,NILAI A = ,F4.1) C23456789 PROGRAM LAT3_1B C Program statemen PAUSE A=10.0 B=12.0
65
WRITE(*,4) A PAUSE TEKAN <ENTER> UNTUK MELIHAT NILAI B WRITE(*,6) B 4 FORMAT(1X,NILAI A = , F4.1) 6 FORMAT(1X, NILAI B = ,F4.1) STOP END
C23456789 PROGRAM LAT3_1C C Program statemen membuat fungsi C Y(X)= LOG10 (X) DO J=1,20,2 X=FLOAT(J) Y=LOG10(X) WRITE(*,50) X, Y ENDDO 50 FORMAT(1X,NILAI A = , F7.5), - 3X,NILAI LOG10(X) = ,F9.5) END
C23456789 PROGRAM LAT3_1E C Program menghitung jumlah bilangan C dari 1 sampai N DOUBLEPRECISION Y WRITE(*,*) N = ? READ(*,*) IAKHIR Y=0.0 DO 10 N=1, IAKHIR X=FLOAT(N) Y=Y+X WRITE(*,10) N,Y ENDDO 4 FORMAT(1X,JUMLAH BIL. DARI - 1-- , I5, ADALAH, F9.1) STOP END
C23456789 PROGRAM LAT3_1D C Program membuat fungsi C Y(X) = X! DOUBLEPRECISION Y WRITE(*,*) BERAPA FAKTORIAL? READ(*,*) IFAKT Y=1.0 DO N=1, IFAK X=FLOAT(N) Y=Y*X WRITE(*,4) X,Y ENDDO 4 FORMAT(1X,HARGA , I5,!, ADALAH, E27.17) STOP END C23456789 PROGRAM LAT3_1F C Program menghitung nilai dari persamaan C C C CHARACTER*17 IFX1 DOUBLEPRECISION P,V,T PERSAMAAN GAS CO2 R=8.31*1.0E+3 A=366.0 B=0.0429 DO M=1, 25 P=10000.0*FLOAT(M) DO N=1,M V=FLOAT(N) T=(P+A/V**2)*(V-B)/R WRITE(*,10) P, V, T ENDDO ENDDO 10 FORMAT(1X, P= ,F9.1,\,1X,V= ,F9.1,\,1X,T=,F9.1) STOP END
a (v b ) T ( P, V ) = P + 2 V R
C23456789 PROGRAM LAT3_1F C Program mencari bilangan terbesar C REAL LAR WRITE(*,*) N = ? READ(*,10) N 10 FORMAT(I6) WRITE(*,*) LAR = ? READ(*,20) LAR I=1 100 READ(*,20) X 20 FORMAT(F12.2) IF (LAR .GE.X) GOTO 200 LAR=X 200 I=I+1
66
2. Buatlah program untuk menghitung : a. 1/n! b. y(t)=10.0 sin(2ft) exp(-0.9t) n 1 dengan A = 10.0 dan B = 1 c. 1=1 A + iB d. y (t ) = t 2 + t + 1.0 3. Buatlah program untuk menghitung
n
n =1
10
+ n + 1 menggunakan statemen
GOTO dan IF (decision) THEN 4. Hitunglah y = x 4 0.5 x 2 + 7.0 x 8.0 dengan batas -4<x<4 dengan step 0.1