Pages

Thursday, September 27, 2012

Ngoding Polinom di Fortran




LISTING PROGRAM  :    
Polinom.for

      INTEGER HIT,HT,O,X
      INTEGER A(10),POL(10),H,N,PIL
      CHARACTER*20 LAGI,KEY
2     WRITE(*,'(24(/))')
      WRITE(*,'(A)') '      M E N U '
      WRITE(*,'(A)') '=================='
      WRITE(*,'(A)') ' 1. INPUT '
      WRITE(*,'(A)') ' 2. NILAI F(X) '
      WRITE(*,'(A)') ' 3. HASIL BAGI '
      WRITE(*,'(A)') ' 4. EXIT '
      WRITE(*,'(A)') '=================='

      WRITE(*,'(A,\)') ' PILIHAN ? '
      READ(*,'(I3)') PIL
      WRITE(*,*)
      IF(PIL.EQ.1) THEN
      WRITE(*,'(A,\)') 'PANGKAT TERTINGGI : '
      READ(*,'(I2)') N
      WRITE(*,'(A,I2)') 'MASUKKAN KOEFISIEN '
      DO 5 I=1,N+1
      WRITE(*,'(A,I2,A,\)') 'KOEF [ ',I,' ] = '
      READ(*,'(I2)') A(I)
5     CONTINUE
      ENDIF
      IF(PIL.EQ.2) THEN
      WRITE(*,'(/,A,\)') 'F(X) = '
      J=N
      DO 7 I=1,N+1
      WRITE(*,'(I2,A,I2,\)') A(I),' X^',J
      IF(I.NE.N+1) THEN
      WRITE(*,'(\,A)') '+'
      ENDIF
      J=J-1
7     CONTINUE
      WRITE(*,*)
      WRITE(*,'(A,\)') 'NILAI X  = '
      READ(*,'(I2)') X
      O=N
      HT=0
      DO 9 I=1,N+1
      HT = HT + A(I) * ( X ** O )
      O=O-1
9     CONTINUE
      WRITE(*,'(A,I5)') 'HASILNYA = ',HT
      ENDIF
      IF(PIL.EQ.3) THEN
      WRITE(*,'(/,A,\)') 'AKAR    = '
      READ(*,'(I2)') K
      BN=0
      DO 10 I=1,N+1
      POL(I)=A(I)+K*BN
      BN=POL(I)
10    CONTINUE
      WRITE(*,'(A,\)') 'F(X)    = '
      J=N
      DO 12 I=1,N
      WRITE(*,'(I2,A,I2,\)') POL(I),' X^',J-1
      IF(I.NE.N) THEN
      WRITE(*,'(\,A)') '+'
      ELSE
      WRITE(*,'(/,A,I5)') 'SISANYA = ',POL(I+1)
      ENDIF
      J=J-1
12    CONTINUE
      ENDIF
      WRITE(*,*)
      IF((PIL.EQ.1).OR.(PIL.EQ.2).OR.(PIL.EQ.3)) THEN
      WRITE(*,'(A)') 'PRESS ANY KEY TO CONTINUE '
      READ(*,'(A)') KEY
      GOTO 2
      ENDIF
      END


LOGIKA  PROGRAM :

INTEGER HIT,HT,O,X
INTEGER A(10),POL(10),H,N,PIL
CHARACTER*20 LAGI,KEY
Blok diatas digunakan untuk mendeklarasikan suatu variabel yaitu variabel HIT, HT, O, X, H, N, PIL sebagai variabel integer. Kemudian variabel A dan POL merupakan suatu array yang dapat menampung sebanyak 10 nilai. A dan POL bertipe data array. Selanjutnya mendeklarasikan variabel karakter dan array yaitu bertipe data karakter.

2     WRITE(*,'(24(/))')
      WRITE(*,'(A)') '      M E N U '
      WRITE(*,'(A)') '=================='
      WRITE(*,'(A)') ' 1. INPUT '
      WRITE(*,'(A)') ' 2. NILAI F(X) '
      WRITE(*,'(A)') ' 3. HASIL BAGI '
      WRITE(*,'(A)') ' 4. EXIT '
      WRITE(*,'(A)') '=================='
      WRITE(*,'(A,\)') ' PILIHAN ? '
      READ(*,'(I3)') PIL
      WRITE(*,*)
Blok program ini digunakan untuk mencetak/membuat suatu menu pilihan, menginput dan membaca hasil inputan dan disimpan dalam suatu variabel. Pertama-tama programa akan mencetak satu baris kosong, Kemudian membaca nilai dari variabel A yaitu suatu variabel berjenis karakter selanjutnya mencetak kata Menu. Membaca kembali variabel A berjenis karakter kemudian mencetak tanda ===========, mencetak kata 1. INPUT yang nantinya digunakan untuk menginput suatu nilai, kemudian mencetak 2.NILAI F(X) yang nantinya pilihan ini digunakan untuk menginput nilai X. Kemudian mencetak 3.HASIL BAGI user diminta untuk memasukkan nilai bagi untuk nilai yang ada kemudian akan ditampilkan hasil baginya, yang terakhir dalam pilihan menu adalah mencetak kata 4.EXIT yang digunakan untuk keluar dari program polinom. Kemudian mencetak tanda ======= selanjutnya mencetak PILIHAN? Dimana user diminta untuk memasukkan pilihan dari menu yang ada kemudian inputan nilai tersebut dibaca/disimpan dalam variabel PIL dalam bentuk integer. Kemudian program akan mencetak satu baris kosong.

      IF(PIL.EQ.1) THEN
      WRITE(*,'(A,\)') 'PANGKAT TERTINGGI : '
      READ(*,'(I2)') N
      WRITE(*,'(A,I2)') 'MASUKKAN KOEFISIEN '
      DO 5 I=1,N+1
      WRITE(*,'(A,I2,A,\)') 'KOEF [ ',I,' ] = '
      READ(*,'(I2)') A(I)
5     CONTINUE
      ENDIF
Blok program ini merupakan suatu kondisi dimana jika user menginput pilihan 1 maka program akan mengeksekusi blok program ini. Dimana kondisi yang diberikan adalah jika nilai dari variabel PIL sama dengan 1 maka akan mencetak kata PANGKAT TERTINGGI : disini user diminta untuk memberikan pangkat tertinggi dari persamaan yang akan dibuat. Kemudian hasil dari inputan tersebut akan dibaca/disimpan dalam variabel N sebagai integer. Kemudian akan mencetak lagi kata MASUKKAN KOEFISIEN kemudian program akan menuju line number 5 yang berisi perintah CONTINUE yaitu melanjutkan perulangan hingga perulangan selesai. Kondisi perulangan adalah dimana nilai awal dari variabel I adalah 1 dan perulangannya adalah nilai dari variabel N ditambah 1. Setiap perulangan akan mencetak kata KOEF [‘,I,’] = dimana I adalah nilai dari perulangan yang telah dilakukan kemudian user diminta untuk menginput nilai dari koefisien tersebut dan akan disimpan dalam variabel A sebagai integer. Untuk keluar dari kondisi ini digunakan perintah ENDIF.

      IF(PIL.EQ.2) THEN
      WRITE(*,'(/,A,\)') 'F(X) = '
      J=N
      DO 7 I=1,N+1
      WRITE(*,'(I2,A,I2,\)') A(I),' X^',J
      IF(I.NE.N+1) THEN
      WRITE(*,'(\,A)') '+'
      ENDIF
      J=J-1
7     CONTINUE
      WRITE(*,*)
Kondisi selanjutny adalah jika user memilih menu pilihan nomor 2, maka program akan mengeksekusi blok program ini. Dimana konisi yang diberikan adalah  jika nilai dari variabel PIL sama dengan 2 maka program akan mencetak kata F(X) = dimana user diminta untuk menginput nilai dari X. Selanjutnya program akan menyamakan nilai dari variabel J dengan N. Kemudian program akan menuju ke line number 7 dimana merupakan suatu looping/perulangan yaitu CONTINUE nilai awal dari variabel I sama dengan 1 dan perulangan dilakukan sebanya nilai N ditmbah 1 hingga selesai. Program akan mencetak nilai yang terdapat pada variabel A kemudian  mencetak tanda X^ dan nilai dari variabel J. Setelah itu terdapat suatu kondisi lagi dimana kondisi ini adalah jika nilai dari I tidak sama dengan nilai dari variabel N ditambah 1 maka program akan mencetak tanda +. Untuk mengakhiri kondisi ini digunakan perintah ENDIF. Terdapat suatu perhitungan dimana nilai dari variabel J sama dengan nilai variabel J dikurangi 1. Terakhir program akan mencetak satu baris kosong.

      WRITE(*,'(A,\)') 'NILAI X  = '
      READ(*,'(I2)') X
      O=N
      HT=0
      DO 9 I=1,N+1
      HT = HT + A(I) * ( X ** O )
      O=O-1
9     CONTINUE
      WRITE(*,'(A,I5)') 'HASILNYA = ',HT
      ENDIF
Blok program ini lanjutan dari blok program sebelumnya. Disini program mencetak kata NILAI X = dan user diminta memasukkan nilai X dan hasil inputan tersebut akan dibaca oleh variabel X sebagai integer. Kemdian program akan menyamakan nilai dari variabel O dan N dan nilai awal dari HT adalah 0, menuju ke line number 9 yaitu suatu perulangan CONTINUE melakukan perulangan sebanya I dimana nilai awal I sama dengan 1 dan N ditambah 1, kemudian terdapat suatu operasi matematika yaitu nilai dari HT sama dengan HT ditambah nilai dari variabel I kemudian nilai dari X dipangkatkan dan dikali dengan nilai O. Selanjutnya nilai O sama dengan O dikurangi 1. Jika sudah program akan mencetak kata HASILNYA = yaitu ajak mencetak hasil dari operasi matematika sebelumnya dimana hasil yang ditampilkan diambil dari variabel HT. Untuk mengakhiri kondisi ini gunakan perintah ENDIF.

      IF(PIL.EQ.3) THEN
      WRITE(*,'(/,A,\)') 'AKAR    = '
      READ(*,'(I2)') K
      BN=0
      DO 10 I=1,N+1
      POL(I)=A(I)+K*BN
      BN=POL(I)
10    CONTINUE
      WRITE(*,'(A,\)') 'F(X)    = '
      J=N
Blok statement selanjutnya merupakan proses yang akan dijalankan jika user menginput menu pilihan nomor 3. Dimana blok program ini juga merupakan suatu kondisi. Kondisi yang diberikan adalah jika PIL sama dengan 3 maka kana tercetak AKAR = dimana user diminta untuk memasukkan nilai dari akar pembagi. Hasil inputan tersebut disimpan dalam variabel K bertipe data integer. Diberikan nilai awal dari BN yaitu 0. Kemudian menuju ke line number 10 dimana terdapat suatu perintah CONITNUE yaitu melakukan perintah yang sama hingga nilai perulangan yang ditentukan selesai. Disini nilai awal I sama dengan 1 dan nilai N akan ditambah 1. Kemudian terdapat operasi matematik yang hasinya disimpan dalam variabel POL dimana nilai A akan ditambah dengan variabel K namun sebelumnya variabel K akan dikalikan terlebih dahulu dengan variabel BN. Kemudian nilai dari variabel BN sama dengan POL. Setelah itu di baris berikutnya akan tercetak F(X) = nilainya diambil dari variabel A. Kemudian nilai variabel J akan disamakan dengan nilai dari variabel N.  

      DO 12 I=1,N
      WRITE(*,'(I2,A,I2,\)') POL(I),' X^',J-1
      IF(I.NE.N) THEN
      WRITE(*,'(\,A)') '+'
      ELSE
      WRITE(*,'(/,A,I5)') 'SISANYA = ',POL(I+1)
      ENDIF
      J=J-1
12    CONTINUE
      ENDIF
      WRITE(*,*)
Blok program ini merupakan blok program sebelumnya dalam blok program ini juga terdapat suatu kondisi. Program akan menuju ke line number 12 yaitu suatu perintah CONTINUE. Program akan mencetak nilai dari variabel POL kemudian X^ dan nilai dari variabel J dikurangi 1. Kondisi disini adalah jika nilai dari variabel I tidak sama dengan N maka mencetak tanda + jika tidak maka akan mencetak kata SISANYA = dimana nilai dari sisa ini diambil dari variabel POL. Untuk mengakhiri kondisi ini gunakan perintah ENDIF. Kemudian nilai dari variabel J sama dengan J dikurangi 1 untuk menutup kondisi terluar/yang pertama gunakan perintah ENDIF. Dan terakhir program akan mencetak satu baris kosong.

      IF((PIL.EQ.1).OR.(PIL.EQ.2).OR.(PIL.EQ.3)) THEN
      WRITE(*,'(A)') 'PRESS ANY KEY TO CONTINUE '
      READ(*,'(A)') KEY
      GOTO 2
      ENDIF
Blok program ini merupakan suatu kondisi dimana jika nilai dari variabel PIL sama dengan 1 atau 2 atau 3 maka akan tercetak kalimat PRESS ANY KEY TO CONTINUE kemudian akan dibaca/disimpan pada varaibel KEY sebagai sebuah karakter. Kemudian menuju ke line number 2 setelah itu untuk mengakhiri kondisi ini gunakan perintah ENDIF.

END
Statement ini digunakan untuk mengakhiri pengerjaan program dan memberhentikan/mengontrol akhir proses sebuah program.

OUTPUT PROGRAM :








No comments:

Post a Comment