LISTING
PROGRAM :
Sekan.for
$
title: Sekan
c
Contoh program Sekan
REAL X0,X1,X2,T
INTEGER ORDO, ITER
DIMENSION KOEF(20)
WRITE (*,’(24(/))’)
WRITE (*,’(30X,A)’) ‘Input Persamaan’
WRITE (*,*)
WRITE (*,’(a,\)’) ‘Orde/Derajat : ’
READ (*,’(I2)’) ORDO
WRITE (*,*)
DO 10 I=ORDO+1, 1, -1
WRITE (*,’(A,I2,A,\)’) ‘Koefisien
X^’,I-1,‘ = ’
READ (*,’(I3)’) KOEF(I)
10 CONTINUE
WRITE (*,*)
WRITE (*,*) ‘Persamaan yang diinput : ’
WRITE (*,*)
CALL OUTPUT (ORDO,KOEF)
PAUSE
WRITE (*,’(24(/))’)
WRITE (*,’(20X,A)’) ‘Pencarian Akar Menggunakan
Metode Sekan’
WRITE (*,’(20X,A)’)
‘==========================’
WRITE (*,*)
CALL OUTPUT(ORDE,KOEF)
WRITE (*,*)
WRITE (*,’(A,\)’) ‘X0(Batas Bawah) = ’
READ (*,*) X0
WRITE (*,’(A,\)’) ‘X1(Batas Atas) = ’
READ (*,*) X1
WRITE (*,’(A,\)’) ‘Toleransi Kesalahan =
’
READ (*,*) T
WRITE (*,*)
X2 = X1 –
(FNG(ORDO,KOEF,X1)*(X1-X0))/(FNG(ORDO,KOEF,X1)-FNG(ORDO,KOEF,X0))
ITER = 1
WRITE (*,*)
WRITE(*,'(2(A,3X),7(A,6X),A,3X,A)')'³','
ITERASI','³','X0','³','X1','³','X2','³','F(X2)','³’
WRITE (*,*)
WHILE (( ABS((X1-X2)/X1) .GT. T) .AND.(
FNG(ORDO,KOEF,X2) .NE. 0 )) DO
WRITE(*,'(A,5X,I3,6X,A,4(1X,F12.7,1X,A))')
'³',ITER,'³',X0,'³',X1,'³',X2,'³',FNG(ORDO,KOEF,X2),'³'
X0 = X1
X1 = X2
X2 = X1 -
(FNG(ORDO,KOEF,X1)*(X1-X0))/(FNG(ORDO,KOEF,X1)-FNG(ORDO,KOEF,X0))
ITER = ITER + 1
PAUSE
ENDWHILE
WRITE(*,'(A,5X,I3,6X,A,4(1X,F12.7,1X,A))')
'³',ITER,'³',X0,'³',X1,'³',X2,'³',FNG(ORDO,KOEF,X2),'³'
WRITE (*,*)
WRITE (*,*)
WRITE (*,*) 'SOLUSINYA = ',X2
END
SUBROUTINE OUTPUT (ORDO,KOEF)
DIMENSION KOEF(20)
INTEGER ORDO
WRITE (*,'(A,\)') 'F(X) = '
DO 20 I = ORDO + 1, 1, -1
IF (I .GT. 2) THEN
IF (KOEF(I) .EQ. (-1)) THEN
WRITE (*,'(A,I2,\)') '- X^',I – 1
ELSEIF ((KOEF(I) .NE. 1) .AND. (KOEF(I)
.NE. 0)) THEN
WRITE (*,'(I3,A,I2,\)') KOEF(I),'X^',I –
1
ELSEIF (KOEF(I) .NE. 0) THEN
WRITE (*,'(A,I2,\)') 'X^',I – 1
ENDIF
IF (KOEF(I-1) .GT. 0) THEN
WRITE (*,'(A,\)') ' + ‘
ENDIF
ELSEIF (I .EQ. 2) THEN
IF (KOEF(I) .EQ. (-1)) THEN
WRITE (*,'(A,\)') '-X ‘
ELSEIF ((KOEF(I) .NE. 1) .AND. (KOEF(I)
.NE. 0)) THEN
WRITE (*,'(I3,A,\)') KOEF(I),' X ‘
ELSEIF (KOEF(I) .NE. 0) THEN
WRITE (*,'(A,\)') ' X ‘
ENDIF
IF (KOEF(I-1) .GT. 0) THEN
WRITE (*,'(A,\)') ' + ‘
ENDIF
ELSEIF (KOEF(I) .NE. 0) THEN
WRITE (*,'(I3)') KOEF(I)
ENDIF
20 CONTINUE
END
REAL FUNCTION FNG(ORDO,KOEF,MX)
INTEGER ORDO
DIMENSION KOEF(20)
REAL MX
FNG = 0
DO
30 I = ORDO + 1, 1, -1
IF (MX .NE. 0) FNG = FNG +
(KOEF(I)*MX**(I-1))
30 CONTINUE
RETURN
READ(*,*)
END
LOGIKA PROGRAM :
$ title: Sekan
c Contoh program
Sekan
REAL X0,X1,X2,T
INTEGER ORDO, ITER
DIMENSION KOEF(20)
WRITE (*,’(24(/))’)
WRITE (*,’(30X,A)’) ‘Input Persamaan’
WRITE (*,’(30X,A)’) ‘===============’
WRITE (*,*)
WRITE (*,’(a,\)’) ‘Orde/Derajat : ’
READ (*,’(I2)’) ORDO
WRITE (*,*)
Blok
program ini digunakan untuk memberitahu judul dari program ini adalah Sekan.
Dan terdapat suatu komentar yaitu Contoh program Sekan. Dimana dideklarasikan
suatu variabel X0, X1, X2 dan T bertipe data REAL, ORDO dan ITER bertipe data
integer dan KOEF suatu array berdimensi satu dan banyaknya array adalah 20.
Kemudain mencetak satu baris kosong, selanjutnya mencetak kata Input Persamaan
dan tanda ===== setelah itu mencetak satu baris kosong. Kemudian mencetak kata
Orde/Derajat : dimana user diminta untuk menginput suatu orde dan hasil inputan
tersebut disimpan dalam variabel ORDO sebagai tipe data integer. Lalu mencetak
satu baris kosong.
DO 10 I=ORDO+1,
1, -1
WRITE (*,’(A,I2,A,\)’) ‘Koefisien
X^’,I-1,‘ = ’
READ (*,’(I3)’) KOEF(I)
10 CONTINUE
WRITE (*,*)
WRITE (*,*) ‘Persamaan yang diinput : ’
WRITE (*,*)
Selanjutnya
menuju ke line number 10 yaitu perintah continue dengan perulangan dimana I
sama dengan nilai dari variabel ordo ditambah 1. Dan akan menampilkan nilai
Koefisien X^ dan nilai I dikurangi 1 = dimana I adalah banyaknya perulangan
dikurangi 1. Kemudian input nilai yang diinginkan dan hasil inputan tersebut
akan disimpan dalam variabel KOEF. Setelah itu mencetak satu baris kosong.
Kemudian mencetak tulisan Persamaan yang diinput : kemudian mencetak satu baris
kosong lagi.
CALL OUTPUT (ORDO,KOEF)
PAUSE
WRITE (*,’(24(/))’)
WRITE (*,’(20X,A)’) ‘Pencarian Akar
Menggunakan Metode Sekan’
WRITE (*,’(20X,A)’) ‘==========================’
WRITE (*,*)
Program
memanggil variabel Orde dan Koef untuk ditampilkan. Lalu program diberhentikan
sementara. Selanjutnya program untuk pencarian akar menggunakan metode sekan. Program
akan mencetak kalimat Pencarin Akar Menggunakan Metode Sekan dan tanda =======
pada layar output setelah itu mencetak satu baris kosong.
CALL OUTPUT(ORDE,KOEF)
WRITE (*,*)
WRITE (*,’(A,\)’) ‘X0(Batas Bawah) = ’
READ (*,*) X0
WRITE (*,’(A,\)’) ‘X1(Batas Atas) = ’
READ (*,*) X1
WRITE (*,’(A,\)’) ‘Toleransi Kesalahan =
’
READ (*,*) T
WRITE (*,*)
Program
memanggil lagi Orde dan Koef untuk ditampilkan dan mencetak satu baris kosong. Setelah
itu program mencetak kata X0 (Batas Bawah) = dimana user diminta untuk
memasukkan batas bawah sebagai X0 dan mencetak kata X1 (Batas Atas) = dimana
user diminta untuk memasukkan batas atas sebagai X1. Kemudian kata Toleransi
Kesalahan = dan hasil inputannya akan disimpan dalam variabel T, setelah itu
mencetak satu baris kosong.
X2=X1–(FNG(ORDO,KOEF,X1)*(X1-X0))/(FNG(ORDO,KOEF,X1)- FNG(ORDO,KOEF,X0))
ITER = 1
WRITE (*,*)
WRITE(*,'(2(A,3X),7(A,6X),A,3X,A)')'³','
ITERASI','³','X0','³','X1','³','X2','³','F(X2)','³’
WRITE (*,*)
WHILE (( ABS((X1-X2)/X1) .GT. T) .AND.(
FNG(ORDO,KOEF,X2) .NE. 0 )) DO
WRITE(*,'(A,5X,I3,6X,A,4(1X,F12.7,1X,A))')
'³',ITER,'³',X0,'³',X1,'³',X2,'³',FNG(ORDO,KOEF,X2),'³'
X0 = X1
X1 = X2
Kemudian
fungsi matematika ini digunakan untuk mencari nilai X2, dimana X2 didapatkan
dengan cara nilai dari X1 dikurangi dengan f(X1) dikali dengan (X1-X0) kemudian
hasilnya dibagi dengan f(X1)-f(X2).
Kemudian dilakukan persamaan nilai bahwa ITER = 1, kemudian mencetak satu baris
kosong. Kemudian menampilkan hasil dari ITERASI dimana nilai dari X0, X1, X2
dan F(X2) akan ditampilkan. Lalu mencetak baris satu kosong. Dan terdapat
kondisi bila nilai dari iterasi pertama dan F(1) tidak sesuai dengan ketetapan
yaitu 0 maka berlanjut ke statement selanjutnya yaitu menyamakan nilai dimana
nilai X0 sama dengan X1 dan X1 sama dengan X2.
X2=X1-(FNG(ORDO,KOEF,X1)*(X1-X0))/(FNG(ORDO,KOEF,X1)- FNG(ORDO,KOEF,X0))
ITER = ITER + 1
PAUSE
ENDWHILE
WRITE(*,'(A,5X,I3,6X,A,4(1X,F12.7,1X,A))') '³',ITER,'³',X0,'³',X1,'³',X2,'³',FNG(ORDO,KOEF,X2),'³'
WRITE (*,*)
WRITE (*,*)
WRITE (*,*) 'SOLUSINYA = ',X2
END
Sama
seperti blok program sebelumnya, blok program ini digunakan untuk melalukan
suatu interasi hingga nilai yang ditentukan tercapai. Dimana nilai X2 didapat
dengan X1 dikurangi dengan f(X1) dikali dengan (X1-X0) kemudian hasilnya dibagi dengan f(X1)-f(X2). Kemudian nilai
iter adalah nilai dari variabel iter sebelumnya ditambah 1. Kemudian program
diberhentikan dan untuk mengakhiri kondisi ini gunakan ENDWHILE. Iterasi akan
terus dilakukan hingga [(X1-X2)/X1]. Kemudian mencetak dua baris kosong dan
SOLUSINYA = nilai ini diambil dari X2 dimana solusi ini akan ditampilkan jika
nilai X2 sudah mencapai nilai batas. Perintah End digunakan untuk mengkahiri
blok program ini.
SUBROUTINE
OUTPUT (ORDO,KOEF)
DIMENSION KOEF(20)
INTEGER ORDO
WRITE (*,'(A,\)') 'F(X) = '
DO 20 I = ORDO + 1, 1, -1
IF (I .GT. 2) THEN
IF (KOEF(I) .EQ. (-1)) THEN
WRITE (*,'(A,I2,\)') '- X^',I – 1
ELSEIF ((KOEF(I) .NE. 1) .AND. (KOEF(I)
.NE. 0)) THEN
WRITE (*,'(I3,A,I2,\)') KOEF(I),'X^',I –
1
ELSEIF (KOEF(I) .NE. 0) THEN
WRITE (*,'(A,I2,\)') 'X^',I – 1
ENDIF
Blok
program ini digunakan untuk memanggil Ordi dan Koef menggunakan subroutine.
Berdimensi 1 dengan variabel KOEF array sebanyak 20 nilai. Mendeklarasikan
variabel ordo sebagai integer. Kemudian mencetak F(X) = . Kemudian menuju ke
line number 20 yaitu CONTINUE dimana akan dilakukan perulangan dengan nilai I
sama dengan nilai dari variabel Ordo doiambah 1. Terdapat suatu kondisi jika
nilai dari variabel I lebih besar dari 2 maka, masuk kembali kedalam suatu
kondisi yaitu bila nilai dari KOEF sama dengan -1 maak akan dicetak X^ dan
nilai dari variabel I dikurang 1. Jika tidak KOEF dari variabel I tidak sama
dengan 1 dan KOEF dari variabel I tidak sama dengan nol maka akan tercetak X^,
I dikurangi 1. Jika tidak juga maka KOEF variabel I tidak sama dengan nol maka
akan tercetak X^ variabel I dikurang 1. Untuk mengakhiri perulangan terdalam
ini gunakan perintah ENDIF.
IF (KOEF(I-1) .GT. 0) THEN
WRITE (*,'(A,\)') ' + ‘
ENDIF
ELSEIF (I .EQ. 2) THEN
IF (KOEF(I) .EQ. (-1)) THEN
WRITE (*,'(A,\)') '-X ‘
ELSEIF ((KOEF(I) .NE. 1) .AND. (KOEF(I)
.NE. 0)) THEN
WRITE (*,'(I3,A,\)') KOEF(I),' X ‘
ELSEIF (KOEF(I) .NE. 0) THEN
WRITE (*,'(A,\)') ' X ‘
ENDIF
Kondisi
ini diberikan jika nila KOEF dari variabel I dikurangi 1 hasilnya lebih besar
dari 2 maka akan mencetak tanda +. Akhiri kondisi ini dengan perintah ENDIF.
Jika tidak maka beralih ke kondisi else dimana jika nilai I sama dengan 2 maka
masuk ke dalam suatu kondisi lagi yaitu jika nilai dari KOEF variabel I sama
dengan -1 maka akan mencetak tanda – jika tidak KOEF(I) tidak sama dengan 1 dan
0 maka akan mencetak nilai dari KOEF(I) dan X. Jika tidak juga maka hanya akan
mencetak X saja. Akhiri kondisi ini dengan perintah ENDIF.
IF (KOEF(I-1)
.GT. 0) THEN
WRITE (*,'(A,\)') ' + ‘
ENDIF
ELSEIF (KOEF(I) .NE. 0) THEN
WRITE (*,'(I3)') KOEF(I)
ENDIF
20 CONTINUE
END
Jika
KOEF niali variabel I dikurangi 1 lebih besar dari 0 maka program mencetak
tanda +. Akhiri kondisi ini dengan ENDIF. Jika KOEF variabel I tidak sama
dengan 0 maka akan mencetak nilai yang terdapat pada KOEF(I). Akhiri dengan
ENDIF. Kemudian terdapat line number 20
dengan perintah COTINUE dan tutup blok program ini dengan perintah END.
REAL FUNCTION FNG(ORDO,KOEF,MX)
INTEGER ORDO
DIMENSION KOEF(20)
REAL MX
FNG = 0
DO 30 I = ORDO + 1, 1, -1
IF (MX .NE. 0) FNG = FNG +
(KOEF(I)*MX**(I-1))
30 CONTINUE
RETURN
READ(*,*)
END
Kemudian
mendeklarasikan fungsi FNG Ordo, Koef dan MX dengan tipe data real. Kemudian
ordo dideklarasikan sebagai integer. Koef bertipe data array dengan 20 nilai
dan berdimensi satu. MX dengan tipe data real. Nilai awal dari FNG adalah 0.
Kemudian menuju ke line number 30 yaitu perintah continue. Perulangan dilakukan
dimana nilai dari variabel I sama dengan ordo ditambah 1. Dan nilai dari FNG
diperoleh dengan persamaan matematika FNG + (KOEF(I)*MX**(I-1) setelah itu
semua nilai akan dikembalikan kenilai awal dengan statement return. Untuk mengakhiri seluruh blok program gunakan
perintah END.
OUTPUT
PROGRAM :
No comments:
Post a Comment