Operator dan ekspresi logika

 

Operator dan Ekspresi LOGIKA

Fortran memiliki lima operator LOGICAL yang hanya dapat digunakan dengan ekspresi yang hasilnya adalah nilai logika ( yaitu , .TRUE. atau .FALSE. ). Semua operator LOGICAL memiliki prioritas lebih rendah daripada operator aritmatika dan relasional . Oleh karena itu, jika suatu ekspresi melibatkan operator aritmatika, relasional, dan logika, operator aritmatika dievaluasi terlebih dahulu, diikuti oleh operator relasional, diikuti oleh operator logika.

Lima operator logika ini adalah

  • .TIDAK. : tidak logis
  • .DAN. : logis dan
  • .ATAU. : logis atau
  • .EQV. : kesetaraan logis
  • .NEQV. : logika bukan kesetaraan
Berikut ini adalah tabel operator-operator tersebut, termasuk prioritas dan asosiatifnya.

JenisOperatorAsosiatif
Hitung**kanan ke kiri
*/kiri ke kanan
+-kiri ke kanan
Relasional<<=>>===/=tidak ada
Logis.BUKAN.kanan ke kiri
.DAN.kiri ke kanan
.ATAU.kiri ke kanan
.EQV..NEQV.kiri ke kanan

    Tabel Kebenaran

    Evaluasi ekspresi logika ditentukan oleh tabel kebenaran. Mari kita mulai dengan operator .NOT.

    .BUKAN.OperanHasil
    .BENAR..PALSU.
    .PALSU..BENAR.

    Perhatikan bahwa .NOT. adalah operator unary. Oleh karena itu, .NOT. a menghasilkan .TRUE. ( resp. , .FALSE. ) jika nilai variabel LOGICAL a adalah .FALSE. ( resp. , .TRUE. ).


    Berikut ini adalah tabel kebenaran dari .AND. :

    .DAN..BENAR..PALSU
    .BENAR..BENAR..PALSU.
    .PALSU..PALSU..PALSU.

    Oleh karena itu, hasil ekspresi logika a .AND. b adalah .TRUE. jika dan hanya jika kedua operan a dan b adalah .TRUE. . Dalam semua kasus lainnya, hasilnya selalu .FALSE.


    Berikut ini adalah tabel kebenaran dari .OR. :

    .ATAU..BENAR..PALSU
    .BENAR..BENAR..BENAR.
    .PALSU..BENAR..PALSU.

    Oleh karena itu, hasil ekspresi logika a .OR. b adalah .FALSE. jika dan hanya jika kedua operan a dan b adalah .FALSE. . Dalam semua kasus lainnya, hasilnya selalu .TRUE. Dengan kata lain, jika salah satu dari dua operan operator .OR. adalah .TRUE. , hasilnya adalah .TRUE.


    Berikut ini adalah tabel kebenaran dari .EQV. :

    .EQV..BENAR..PALSU
    .BENAR..BENAR..PALSU.
    .PALSU..PALSU..BENAR.

    Oleh karena itu, hasil ekspresi logika a .EQV. b adalah .TRUE. jika dan hanya jika kedua operan a dan b memiliki nilai yang sama ( yaitu , keduanya .TRUE. atau keduanya .FALSE. ). Seperti yang disebutkan dalam ekspresi relasional , operator relasional hanya dapat membandingkan nilai aritmatika dan tidak dapat digunakan untuk membandingkan nilai logika. Untuk membandingkan apakah dua nilai logika sama, gunakan .EQV.


    Berikut ini adalah tabel kebenaran .NEQV. :

    .NEQV..BENAR..PALSU
    .BENAR..PALSU..BENAR.
    .PALSU..BENAR..PALSU.

    Oleh karena itu, hasil ekspresi logika a .NEQV. b adalah .TRUE. jika dan hanya jika kedua operan a dan b tidak memiliki nilai yang sama. Seperti disebutkan dalam ekspresi relasional , operator relasional hanya dapat membandingkan nilai aritmatika dan tidak dapat digunakan untuk membandingkan nilai logika. Untuk membandingkan jika dua nilai logika tidak sama, gunakan .NEQV. Perhatikan bahwa .NEQV adalah kebalikan dari .EQV. . Oleh karena itu, untuk menguji apakah variabel logika x dan y memiliki nilai yang berbeda, seseorang dapat menggunakan .NOT. (x .EQV. y) . ​​Di sini, jika x dan y memiliki nilai yang sama, x .EQV. y adalah .TRUE. dan .NOT. (x .EQV. y) adalah .FALSE. Di sisi lain, jika x dan y memiliki nilai yang berbeda, x .EQV. y adalah .FALSE. dan .NOT. (x .EQV. y) adalah .TRUE. 

    Prioritas

    Prioritas .NOT. adalah yang tertinggi, diikuti oleh .AND. , diikuti oleh .OR. , diikuti oleh .EQV. dan .NEQV. Perhatikan bahwa .NOT. bersifat asosiatif kanan, sedangkan empat lainnya bersifat asosiatif kiri.

    Berikut beberapa contohnya:

    • Biarkan variabel LOGICAL Sesuatu dan Lain memiliki nilai .TRUE. dan .FALSE. , berturut-turut.
      .TIDAK. Sesuatu .DAN. Yang lain
      --> .TIDAK. .BENAR. .DAN. .SALAH.
      --> [.TIDAK. BENAR.] .DAN. SALAH.
      --> .SALAH. .DAN. .SALAH.
      --> .SALAH.
      Dalam contoh di atas, karena .NOT. memiliki prioritas tertinggi, maka ia dievaluasi terlebih dahulu. Sekarang, lihat contoh berikut:
      .TIDAK. (Sesuatu .DAN. Yang Lain)
      --> .TIDAK. (.BENAR. .DAN. .SALAH.)
      --> .TIDAK. ([.BENAR. .DAN. .SALAH.])
      --> .TIDAK. .SALAH.
      --> .BENAR.
    • Biarkan variabel LOGICAL a , b dan c memiliki nilai .TRUE. , .TRUE. dan .FALSE. , berturut-turut.
      .TIDAK. a .ATAU. .TIDAK. b .DAN. c
      --> .TIDAK. .BENAR. .ATAU. .TIDAK. .BENAR. .DAN. .SALAH.
      --> [.TIDAK. .BENAR.] .ATAU. .TIDAK. .BENAR. .DAN. .SALAH.
      --> .SALAH. .ATAU. .TIDAK. .BENAR. .DAN. .SALAH.
      --> .SALAH. .ATAU. [.TIDAK. .BENAR.] .DAN. .SALAH.
      --> .SALAH. .ATAU. .SALAH. .DAN. .SALAH.
      --> .SALAH. .ATAU. [.SALAH. .DAN. .SALAH.]
      --> .SALAH. .ATAU. .SALAH.
      --> .SALAH.
    • Biarkan variabel INTEGER n memiliki nilai 4:
      n**2 + 1 > 10 .DAN. .TIDAK. n < 3
      --> 4**2 + 1 > 10 .DAN. .TIDAK. 4 < 3
      --> [4**2] + 1 > 10 .DAN. .TIDAK. 4 < 3
      --> 16 + 1 > 10 .DAN. .TIDAK. 4 < 3
      --> [16 + 1] > 10 .DAN. .TIDAK. 4 < 3
      --> 17 > 10 .DAN. .TIDAK. 4 < 3
      --> [17 > 10] .DAN. .TIDAK. 4 < 3
      --> .BENAR. .DAN. .TIDAK. 4 < 3
      --> .BENAR. .DAN. .TIDAK. [4 < 3]
      --> .BENAR. .DAN. .TIDAK. .SALAH
      --> .BENAR. .DAN. [.TIDAK. .SALAH]
      --> .BENAR. .DAN. .BENAR.
      --> .BENAR.
      Perhatikan bahwa ekspresi di atas, jika Anda suka, dapat ditulis ulang dengan tanda kurung sebagai berikut:
      (n**2 + 1 > 10) .DAN. .TIDAK. (n < 3)
      
    • Biarkan variabel INTEGER m , n , x dan y memiliki nilai masing-masing 3, 5, 4 dan 2:
      .TIDAK. (m > n .DAN. x < y) .NEQV. (m <= n .DAN. x >= y)
      --> .TIDAK. (3 > 5 .DAN. 4 < 2) .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> .TIDAK. ([3 > 5] .DAN. 4 < 2) .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> .TIDAK. (.SALAH. .DAN. 4 < 2) .TIDAK. (3 <= 5 .DAN. 4 >= 2)
      --> .TIDAK. (.SALAH. .DAN. [4 < 2]) .TIDAK. (3 <= 5 .DAN. 4 >= 2)
      --> .TIDAK. (.SALAH. .DAN. .SALAH.) .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> .TIDAK. ([.SALAH. .DAN. .SALAH.]) .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> .TIDAK. (.SALAH.) .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> [.TIDAK. .SALAH.] .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> .BENAR. .NEQV. (3 <= 5 .DAN. 4 >= 2)
      --> .BENAR. .NEQV. ([3 <= 5] .DAN. 4 >= 2)
      --> .BENAR. .NEQV. (.BENAR. .DAN. 4 >= 2)
      --> .BENAR. .NEQV. (.BENAR. .DAN. [4 >= 2])
      --> .BENAR. .NEQV. (.BENAR. .DAN. .BENAR.)
      --> .BENAR. .NEQV. ([.BENAR. .DAN. .BENAR.])
      --> .BENAR. .NEQV. (.BENAR.)
      --> .BENAR. .NEQV. .BENAR.
      --> .SALAH.

    Tugas

    Hasil dari ekspresi logika dapat ditetapkan ke dalam variabel LOGICAL . Perhatikan bahwa hanya nilai logika yang dapat dimasukkan ke dalam variabel LOGICAL . Penugasan berikut menyimpan hasil dari contoh ke dalam variabel LOGICAL :
    LOGIS :: Hasil1, Hasil2, Hasil3, Hasil4
    Hasil1 = .TIDAK. Sesuatu .DAN. Yang lain
    Hasil2 = .TIDAK. a .ATAU. .TIDAK. b .DAN. c
    Hasil3 = (n**2 + 1 > 10) .DAN. .TIDAK. (n < 3)
    Hasil4 = .TIDAK. (m > n .DAN. x < y) .NEQV. (m <= n .DAN. x >= y)
    Dengan demikian, Result1 , Result2 , Result3 , dan Results masing-masing menerima .FALSE. , .FALSE. , .TRUE., dan .FALSE.

    Komentar

    Postingan populer dari blog ini

    Bk

    Algoritma A*(A Star)