. .

TUGAS & LATIHAN : Membuat Java Program "SEPASANG MATA" Dari 2 Dadu Dengan Netbeans IDE

Posted by CHRISTIANTO D,WIBOWO | D3MI-2016 STMIK BUMI GORA On Minggu, Desember 18, 2016 No comments

SEPASANG MATA dari 2 dadu ini dalam dunia barat dikenal dengan istilah "Snake Eyes" yang berarti bahwa kedua dadu menunjukkan nilai 1.
Snake Eyes Dice
Ketika dua dadu bergulir, perbedaan hasil gulir antara 2 dadu tersebut bisa dilihat dalam beberapa cara: pertama dan kedua, kiri dan kanan, merah dan hijau, dll. Mari kita variabelkan keduanya menjadi (a , b) sebagai sebuah kemungkinan dari guliran 2 dadu tersebut. Dengan sebuah nomor di bagian atas dadu pertama (a) dan nomor di bagian atas dadu kedua (b). Perhatikan bahwa masing-masing a dan b dapat salah satu dari bilangan bulat dari 1 sampai 6. Berikut ini adalah daftar dari semua kemungkinan bersama untuk (a, b):

(1,1)(1,2)(1,3)(1,4)(1,5)(1,6)
(2,1)(2,2)(2,3)(2,4)(2,5)(2,6)
(3,1)(3,2)(3,3)(3,4)(3,5)(3,6)
(4,1)(4,2)(4,3)(4,4)(4,5)(4,6)
(5,1)(5,2)(5,3)(5,4)(5,5)(5,6)
(6,1)(6,2)(6,3)(6,4)(6,5)(6,6)


Perhatikan bahwa ada 36 kemungkinan (a, b). Jumlah ini diperoleh dari prinsip perkalian: ada 6 kemungkinan, dan untuk setiap hasil 6*6=36, ada 6 kemungkinan untuk masing-masingnya (a, b). Jadi, jumlah total hasil patungan (a, b) adalah 6 kali 6 yang merupakan 36. Himpunan semua hasil yang mungkin untuk (a, b) disebut ruang sampel percobaan probabilitas ini.

Dengan ruang sampel sekarang dapat di identifikasi, teori probabilitas mengharuskan kita mengidentifikasi kemungkinan yang terjadi - possible events. Dalam contoh seperti ini, di mana ruang sampel terbatas karena hanya memiliki 36 hasil yang berbeda, mungkin hal termudah untuk menyatakan SEMUA himpunan bagian dari ruang sampel kemungkinan yang terjadi  - possible events. Dan hal itu akan menjadi sigma-aljabar dan untuk menghindari apa yang mungkin sebaliknya menjadi kesulitan teknis. Kami membuat deklarasi dengan contoh ini dari dua dadu.

Dengan deklarasi di atas, hasil di mana jumlah dari dua dadu sama dengan 5 bentuk event. Jika kita menyebut event tersebut sebagai E, maka kita memiliki :
E={(1,4),(2,3),(3,2),(4,1)}.
Perhatikan bahwa kita telah membuat daftar semua cara dadu pertama dan dadu kedua muncul hingga 5 kemungkinan.

Pertimbangkan berikutnya adalah probabilitas E, P(E). Di sini kita perlu informasi lebih lanjut. Jika dua dadu yang adil dan independen, maka masing-masing kemungkinan (a, b) adalah sama. Karena ada 36 kemungkinan dalam semua, dan jumlah probabilitas mereka harus sama dengan 1, maka setiap peristiwa tunggal {(a, b)} probabilitas sama dengan 1/36. Karena E terdiri dari 4 kejadian seperti yang berbeda tunggal, P(E) = ⁴/₃₆ = ¹/₉.
Secara umum, ketika dua dadu yang adil dan independen, probabilitas setiap kejadian adalah jumlah elemen dalam setiap event (pengguliran 2 dadu) dibagi dengan 36.
Bagaimana jika guliran dadu yang tidak adil, atau tidak independen satu sama lainnya ?
Kemudian masing-masing hasil {(a, b)} ditugaskan dengan probabilitas (nomor di [0,1]) yang jumlahnya semua 36 sama dengan 1. probabilitas ini tidak semua sama, dan harus diperkirakan dengan eksperimen atau disimpulkan dari hipotesis lain tentang bagaimana dadu terkait dan dan bagaimana kemungkinan setiap nomor pada masing-masing dadu. Maka probabilitas dari suatu peristiwa seperti E adalah jumlah dari probabilitas peristiwa tunggal {(a, b)} yang membentuk E.

Sekarang untuk menjawab berapa kali kemungkinan - probabilitas roll/gulir sepasang dadu sebelum mereka datang dua dadu dengan sama-sama bernilai=1. Kita dapat menulis sebuah program komputer yang mensimulasikan percobaan terseut. Program ini harus melaporkan jumlah roll/gulir sepasang dadu yang muncul, sebelum sepasang dadu datang dengan nilai 1 masing-masingnya (1,1) Its A Snake Eyes !.

Karena kita ingin melempar dadu setidaknya sekali, maka statement do..while adalah plihan tepat. Sebuah algoritma pseudocode untuk program ini adalah :
Let countRolls = 0
do:
    roll the dice
    count this roll by adding 1 to countRolls
    while the roll is not snake eyes (1,1)
    Output the value of countRolls
Kita dapat mensimulasikan bergulir satu dadu dengan menghitung (int)(Math.random()*6) + 1Kita ingin menghentikan gulir dadu ketika hasil roll/gulir sepasang dadu adalah ganda 1. Dan kita ingin terus menggulirkan dadu jika roll/gulir sepasang dadu tidak ganda 1. Jika dadu1 dan dadu2 adalah variabel yang mewakili nilai-nilai dadu, kondisi untuk terus menggulung/rolling dapat dinyatakan sebagai berikut :
while ( ! (dadu1 == 1 && dadu2 == 1) )
Tanda seru - exclamation point berarti "tidak/no" - while ( ! , sehingga kondisi mengatakan bahwa itu tidak terjadi, bahwa (kedua dadu; dadu1 adalah 1 dan dadu2 adalah 1). Artinya, dadu datang mata ular =1 belum terjadi. Cara lain untuk mengekspresikan kondisi yang sama adalah bahwa setidaknya satu dari dadu tidak 1, yaitu, bahwa baik dadu1 tidak =1 atau dadu2 tidak =1. Dalam kode Java, ini tertulis:
while ( dadu1 != 1  ||  dadu2 != 1 )
Kadang kita sering lupa dengan tanda operator && - AND dan || - OR, terutama ketika negasi terlibat. Dalam hal ini, kita bisa menghindari masalah tersebut dengan pengujian sementara menjadi :
(dadu1 + dadu2! = 2)
PRESEDENCE TABLE :
Precedence
Operator
Description
Associativity
1
highest
::
Scope resolution (C++ only)
None
2
++
Postfix increment
Left-to-right
--
Postfix decrement
()
Function call
[]
Array subscripting
.
Element selection by reference
->
Element selection through pointer
typeid()
Run-time type information (C++ only) (see typeid)
const_cast
Type cast (C++ only) (see const_cast)
dynamic_cast
Type cast (C++ only) (see dynamic cast)
reinterpret_cast
Type cast (C++ only) (see reinterpret_cast)
static_cast
Type cast (C++ only) (see static_cast)
3
++
Prefix increment
Right-to-left
--
Prefix decrement
+
Unary plus
-
Unary minus
!
Logical NOT
~
Bitwise NOT (One's Complement)
(type)
Type cast
*
Indirection (dereference)
&
Address-of
sizeof
new, new[]
Dynamic memory allocation (C++ only)
delete, delete[]
Dynamic memory deallocation (C++ only)
4
.*
Pointer to member (C++ only)
Left-to-right
->*
Pointer to member (C++ only)
5
*
Multiplication
Left-to-right
/
Division
%
Modulo (remainder)
6
+
Addition
Left-to-right
-
Subtraction
7
<< 
Bitwise left shift
Left-to-right
>> 
Bitwise right shift
8
< 
Less than
Left-to-right
<=
Less than or equal to
> 
Greater than
>=
Greater than or equal to
9
==
Equal to
Left-to-right
!=
Not equal to
10
&
Bitwise AND
Left-to-right
11
^
Bitwise XOR (exclusive or)
Left-to-right
12
|
Bitwise OR (inclusive or)
Left-to-right
13
&&
Logical AND
Left-to-right
14
||
Logical OR
Left-to-right
15
?:
Ternary conditional (see ?:)
Right-to-left
16
=
Direct assignment
Right-to-left
+=
Assignment by sum
-=
Assignment by difference
*=
Assignment by product
/=
Assignment by quotient
%=
Assignment by remainder
<<=
Assignment by bitwise left shift
>>=
Assignment by bitwise right shift
&=
Assignment by bitwise AND
^=
Assignment by bitwise XOR
|=
Assignment by bitwise OR
17
throw
Throw operator (exceptions throwing, C++ only)
Right-to-left
18
lowest
,
Left-to-right

Kita lanjutkan dengan mengisi beberapa rincian suatu algoritma yang dapat dengan mudah dikonversi ke dalam program, yang ditunjukkan seperti di bawah ini :
Let countRolls = 0
do:
        dadu1 = (int)(Math.random()*6) + 1
        dadu2 = (int)(Math.random()*6) + 1
        count this roll by adding 1 to countRolls
        while dadu1 is not 1 or dadu2 is not 1
        Output the value of countRolls
Kita tentu saja bisa menulis program menggunakan reguler while ...loop bukannya do..while. Tetapi jika kita memindahkan tes ke awal loop, kita harus memastikan bahwa variabel diberikan nilai sebelum kita mencoba untuk menguji nilai-nilai tersebut. Kita perlu loop "prime/utama" yang ada untuk memastikan bahwa program berjalan pertama kalinya. Dan pseudocode kemudian menjadi :
Let countRolls = 0
Let dadu1 = 0 // Prime the loop with any value except 1
Let dadu2 = 0
while dadu1 is not 1 or dadu2 is not 1:
    dadu1 = (int)(Math.random()*6) + 1
    dadu2 = (int)(Math.random()*6) + 1
    count this roll by adding 1 to countRolls
    Output the value of countRolls
Pilihan lain akan menggunakan "while (true)" loop. Dalam hal ini, tes yang diperlukan adalah kondisi untuk menghentikan lingkaran/loop, yang lebih mudah untuk datang dengan membandingkan dengan pengujian untuk melanjutkan loop, sehingga tidak memerlukan loop "prime/utama" :
Let countRolls = 0
while true:
                       dadu1 = (int)(Math.random()*6) + 1
                       dadu2 = (int)(Math.random()*6) + 1
                                     count this roll by adding 1 to countRolls
             if dadu1 is 1 and dadu2 is 1
                                     break
                                     Output the value of countRolls

Dari beberapa pertimbangan algoritma pseudocode diatas, maka kita bisa melangkah membuat Java Programnya.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sepasangmata;
/**
 * @author CHRISTIANTO "GEMBLONG" DHARMA WIBOWO LEARN JAVA
 */
public class SepasangMata {
    /**
     * @param args the command line arguments
     * Program ini mensimulasikan bergulirnya sepasang dadu sampai
     * muncul sepasang mata. Dan memberi laporan berapa banyak guliran/roll yang kita butuhkan.
     */
    public static void main(String[] args) {
    System.out.println("CHRISTIANTO 'GEMBLONG' DHARMA WIBOWO LEARN JAVA");
    System.out.println("Mendapatkan Probabilitas SEPASANG MATA Dari Guliran 2 PASANG DADU");
    System.out.println("-----------------------------------------------------------------");
        int dadu1, dadu2;   // Nilai-nilai digulirkan pada dua dadu.
       
        int countRolls;   // Digunakan untuk menghitung jumlah guliran.
       
            countRolls = 0;
       
       do {
          dadu1 = (int)(Math.random()*6) + 1;   // Gulirkan 2 Dadu
          dadu2 = (int)(Math.random()*6) + 1;
          countRolls++;                        // Hitung Berapa Guliran Sampai Mendapatkan SEPASANG MATA
          } while ( dadu1 != 1 || dadu2 != 1 );
       
    System.out.println("Christ...Kamu Butuh " + countRolls + " Guliran/roll Untuk Dapat SEPASANG MATA.");
   
   }  // akhir main()

}  // akhir class
VALIDASI OUTPUT :
Cobalah jalankan Java programnya berulang-ulang, kita kecil sekali mendapatkan kemungkinan jumlah roll/gulir yang sama untuk SEPASANG MATA "Snake Eyes".
Disini kita bukan hanya dilatih membuat Java programnya tetapi algoritma dan logika matematika yang paling utama untuk dipahami, sehingga kita bisa menulis Java Program yang baik dan benar. Terimakasih pada sumber pembelajaran TUGAS dan LATIHAN ini : Rolling Two Dice == http://www.math.hawaii.edu/~ramsey/Probability/TwoDice.html

0 komentar:

Posting Komentar