Sunday, December 25, 2016

Bab 4. Pemrograman Internet



JavaScript: Seleksi







4.1 Pengantar

Ketika menuliskan sebuah skrip, adalah hal yang penting untuk memahami jenis blok pembangun yang tersedia dan untuk menggunakan prinsip-prinsi konstruksi program yang teruji. Pada bab ini, akan didiskusikan statemen kendali (seleksi), yang hampir sama dengan banyak bahasa pemrograman tingkat-tinggi. Di sini, operator penugasan, operator inkremen, dan operator dekremen akan dibahas dan dieksplorasi.


4.2 Statemen Kendali
JavaScript menyediakan tiga statemen seleksi. Statemen seleksi if menyelksi sebuah aksi jika kondiri bernilai true atau melompati aksi jika kondisi bernilai false. Statemen seleksi if...else melakukan sebuah aksi jika kondisi bernilai true dan melakukan aksi yang berbeda jika kondisi bernilai false. Statemen seleksi switch melakukan salah satu dari berbagai aksi, tergantung dari nilai sebuah ekspresi.

Statemen if dikenal dengan statemen seleksi-tunggal karena ia menyeleksi atau mengabaikan aksi tunggal (atau grup aksi tunggal). Statemen if...else dikenal dengan statemen seleksi-ganda karena ia menyeleksi salah satu dari dua aksi yang berbeda (atau salah satu dari dua grup aksi yang berbeda). Statemen switch dikenal dengan statemen seleksi-jamak karena ia menyeleksi di antara aksi – aksi yang berbeda (atau di antara grup-grup aksi yang berbeda).

JavaScript menyediakan empat jenis statemen repetisi, yaitu while, do...while, for, dan for...in. Masing-masing kata if else, switch, while, do, for, dan in merupakan katakunci JavaScript. Semua katakunci ini tidak bisa dipakai sebagai nama pengenal (misalnya nama fungsi atau nama variabel). Semua katakunci pada JavaScript ditunjukkan pada Gambar 4.1.


4.3 Statemen Seleksi if
Statemen seleksi dipakai untuk memilih di antara beberapa aksi alternatif pada sebuah program. Sebagai contoh, dimisalkan bahwa nilai kelulusan pada sebuah ujian adalah 60 (dari 100). Maka statemen JavaScript

if ( nilaiMahasiswa >= 60 )
    document.writeln( "Lulus" );

menentukan apakah kondisi “nilai mahasiswa lebih besar dari atau sama dengan 60” bernilai true atau false. Jika kondisi bernilai true, maka “Lulus” akan ditampilkan pada dokumen XHTML, dan statemen JavaScript berikutnya akan dieksekusi. Jika kondisi bernilai false, maka statemen untuk menampilkan akan diabaikan, dan statemen JavaScript berikutnya akan dieksekusi.


Gambar 4.1 Katakunci pada JavaScript


Perhatikan bahwa baris kedua dari statemen seleksi tersebut terindentasi (dimajukan beberapa spasi). Penerjemah JavaScript mengabaikan semua karakter spasi-putih, seperti tab, spasi, dan garis-baru.

Diagram alir pada Gambar 4.2 mengilustrasikan statemen if seleksi-tunggal. Diagram alir ini memuat apa yang merupakan simbol diagram-alir paling penting, yaitu simbol diamond (atau simbol keputusan), yang mengindikasikan bahwa sebuah keputusan harus dibuat. Simbol keputusan memuat sebuah ekspresi, seperti kondisi, yang dapat bernilai true atau false. Simbol keputusan memiliki dua garis-alir yang keluar darinya. Satu garis-alir mengindikasikan lintasan yang akan diikuti program ketika ekspresi di dalam simbol bernilai true; garis-alir yang lain mengindikasikan lintasan yang akan diikuti program ketika ekspresi di dalam simbol bernilai false. Sebuah keputusan dapat dibuat pada sembarang ekspresi yang dievaluasi menjadi sebuah nilai bertipe boolean (yaitu, sembarang ekspresi yang dapat dievaluasi menjadi true atau false, yang juga dikenal dengan ekspresi boolean).



Gambar 4.2 Diagram alir statemen if seleksi-tunggal

Perhatikan bahwa statemen if merupakan statemen kendali masukan-tunggal/keluaran-tunggal.

  
4.4 Statemen Seleksi if...else
Statemen seleksi if melakukan sebuah aksi hanya ketika kondisi dievaluasi menjadi true; sebaliknya, aksi akan dilompati. Statemen seleksi if...else memampukan Anda untuk menetapkan sebuah aksi ketika kondisi benilai true; sebaliknya, menetapkan aksi yang berbeda ketika kondisi bernilai false.

if ( nilaiMahasiswa >= 60 )
    document.writeln( "Lulus" );
else
    document.writeln( "Gagal" );

menampilkan Lulus pada dokumen XHTML jika nilai mahasiswa lebih dari atau sama dengan 60 dan menampilkan Gagal jika nilai mahasiswa bernilai kurang dari 60. Pada kedua kasus, setelah statemen penampilan selesai dieksekusi, statemen JavaScript berikutnya akan dieksekusi (yaitu, statemen berikutnya yang berada setelah statemen if...else). Perhatikan bahwa tubuh bagian else dari struktur seleksi juga diindentasi. Diagram alir yang ditunjukkan pada Gambar 4.3 mengilustrasikan aliran kendali dari statemen seleksi if...else.

JavaScript menyediakan sebuah operator, yang dikenal dengan operator kondisional (?:), yang erat kaitannya dengan statemen if...else. Operator ?: merupakan satu-satunya operator ternary, yang memerlukan tiga operand. Ketiga operand tersebut bersama dengan operator ?: membentuk sebuah ekspresi kondisional. Operand pertama merupakan ekspresi boolean, operand kedua adalah nilai untuk ekspresi kondisional jika ekspresi tersebut dievaluasi menjadi true, dan operand ketiga adalah nilai untuk ekspresi kondisional jika ekspresi tersebut dievaluasi menjadi false. Sebagai contoh, perhatikan statemen berikut

document.writeln( nilaiMahasiswa >= 60 ? "Lulus" : "Gagal" );

memuat suatu ekspresi kondisional yang dievaluasi menjadi string “Lulus” jika kondisi nilaiMahasiswa >= 60 bernilai true dan dievaluasi menjadi string “Gagal” jika kondisi bernilai false. Jadi, statemen dengan operator kondisional ini melakukan operasi yang sama dengan statemen if...else sebelumnya. Derajat keutamaan dari operator kondisional rendah, jadi keseluruhan ekspresi kondisional biasanya ditempatkan di dalam sepasang kurung untuk memastikan bahwa ia dievaluasi dengan tepat.

Statemen if...else bersarang dipakai untuk menguji beberapa kasus dengan menempatkan if...else di dalam statemen if...else yang lain. Sebagai contoh, statemen pseudocode berikut mengindikasikan bahwa program menampilkan A untuk nilai ujian yang lebih dari atau sama dengan 90, B untuk nilai dalam rentang 80 sampai 89, C untuk rentang nilai 70 sampai 79, D untuk nilai dalam rentang 60 sampai 69, dan F untuk nilai dalam rentang lainnya:

if (nilaiMahasiswa >= 90 )
    document.writeln( "A" );
else
    if (nilaiMahasiswa >= 80 )
        document.writeln( "B" );
    else
        if (nilaiMahasiswa >= 70 )
            document.writeln( "C" );
        else
            if (nilaiMahasiswa >= 60 )
                document.writeln( "D" );
            else
                document.writeln( "F" );


Gambar 4.3 Diagram alir statemen if...else seleksi ganda


Jika nilaiMahasiswa bernilai lebih dari atau sama dengan 90, maka keempat kondisi akan bernilai true, tetapi hanya statemen document.writeln yang berada setelah pengujian kondisi pertama yang akan dieksekusi. Setelah document.writeln tersebut dieksekusi, bagian else dari statemen – statemen if...else sebelah luar akan dilompati.

Kebanyakan programer JavaScript lebih memilih menuliskan statemen if tersebut sebagai

if (nilai >= 90 )
    document.writeln( "A" );
else if (nilai >= 80 )
    document.writeln( "B" );
else if (nilai >= 70 )
    document.writeln( "C" );
else if (nilai >= 60 )
    document.writeln( "D" );
else
    document.writeln( "F" );

Dua format tersebut ekivalen. Format terakhir lebih populer karena ia mencegah terjadinya indentasi dalam atas kode ke sebelah kanan. Indentasi terlalu dalam seperti itu seringkali hanya menyisakan ruang kecil pada sebuah baris, sehingga memaksa baris dipecah dan mengurangi keterbacaan program.

Adalah hal penting untuk mencatat bahwa penerjemah JavaScript selalu mengasosiasikan sebuah else dengan if sebelumnya, kecuali jika ditempatkan sepasang kurung kurawal ({ dan }). Sebagai contoh,

if ( x > 5 )
    if ( y > 5 )
        document.writeln( "x dan y > 5" );
else
    document.writeln( "x <= 5" );

tampak seperti mengindikasikan (melalui indentasi) bahwa jika x bernilai lebih dari 5, maka statemen if di dalam tubuhnya menentukan apakah y juga bernilai lebih dari 5. Jika ya, maka tubuh dari statemen if bersarang tersebut akan menampilkan string “x dan y > 5”. Sebaliknya, ia tampak seperti mengindikasikan bahwa jika x tidak lebih dari 5, maka bagian else dari statemen if...else akan menampilkan string “x <= 5”.


Hati – hati! Statemen if bersarang tersebut tidak dieksekusi seperti yang diindikasikan oleh indentasi. Penerjemah JavaScript akan menginterpretasikan statemen tersebut sebagai

if ( x > 5 )
    if ( y > 5 )
        document.writeln( "x dan y > 5" );
    else
        document.writeln( "x <= 5" );

dimana di dalam statemen if pertama terdapat sebuah statemen if...else bersarang. Statemen ini akan menguji apakah x lebih dari 5. Jika ya, eksekusi akan berlanjut dengan menguji apakah y juga bernilai lebih dari 5. Jika kondisi kedua bernilai true, maka string “x dan y > 5” akan ditampilkan. Namun, jika kondisi kedua bernilai false, maka string “x <= 5” akan ditampilkan, meskipun Anda mengetahui bahwa x lebih dari 5.

Untuk memaksa statemen if bersarang tersebut dieksekusi seperti yang diinginkan, ia harus dituliskan sebagai berikut:

if ( x > 5 )
{
    if ( y > 5 )
        document.writeln( "x dan y > 5" );
}
else
document.writeln( "x <= 5" );

Sepasang kurung kurawal ({ dan }) mengindikasikan kepada penerjemah bahwa statemen if kedua berada di dalam tubuh statemen if pertama dan bahwa else merupakan bagian dari statemen if pertama.

Untuk mencantumkan beberapa statemen di dalam tubuh statemen if, statemen-statemen tersebut harus diapit oleh sepasang kurung kurawal ({ dan }). Ini dapat pula dilakukan pada bagian else dari statemen if...else. Sehimpunan statemen yang dimuat di dalam sepasang kurung kurawal disebut dengan blok.

Statemen berikut mencakup sebuah blok pada bagian else dari sebuah statemen if...else:

if ( nilai >= 60 )
    document.writeln( "Lulus" );
else
{
    document.writeln( "Gagal<br />" );
    document.writeln( "Anda harus mengulang matakuliah ini kembali." );
}

Pada kasus ini, jika nilai bernilai kurang dari 60, maka program akan mengeksekusi kedua statemen yang ada di dalam tubuh else dan menampilkan

Gagal.
Anda harus mengulang matakuliah ini kembali.

Perhatikan sepasang kurung kurawal yang mengapit dua statemen di dalam klausa else. Sepasang kurung kurawal ini sangat penting. Tanpa kurung kurawal tersebut, statemen

document.writeln( "Anda harus mengulang matakuliah ini kembali.");

akan berada di luar tubuh klausa else dari statemen if dan akan dieksekusi tanpa memandang apakah nilai bernilai kurang dari 60 atau tidak.


4.5 Statemen Repetisi while
Statemen repetisi memampukan Anda untuk menetapkan bahwa sebuah skrip akan mengulangi (mengeksekusi secara berulang) suatu aksis ketika kondisi tertentu bernilai true.

Sebagai contoh dari statemen while, perhatikan segmen program berikut:

var hasil = 2;

while ( hasil <= 1000 )
    hasil = 2 * hasil;

Ketika statemen while selesai dieksekusi, hasil akan memuat nilai 1024. Diagram alir pada Gambar 4.4 mengilustrasikan aliran kendali dari statemen while tersebut.

Ketika skrip memasuki statemen while, hasil bernilai 2. Skrip secara berulang mengalikan variabel hasil dengan 2, jadi hasil akan bernilai 4, 8, 16, 32, 64, 128, 256, 512, dan 1024. Ketika hasil menjadi 1024, kondisi hasil <= 1000 di dalam statemen while menjadi false. Ini akan menghentikan repetisi, dengan 1024 sebagai nilai akhir dari hasil. Eksekusi berlanjut ke statemen berikutnya setelah statemen while.



Gambar 4.4 Diagram alir statemen repetisi while


4.6 Repetisi Terkendali-Kounter
Perhatikan statemen permasalahan berikut:

Sebuah kelas yang terdiri-dari sepuluh mahasiswa mengadakan ujian kuis. Nilai (integer dalam rentang 0 sampai 100) diberikan pada kuis ini. Tentukanlah rerata nilai kuis pada kelas tersebut.

Rerata kelas sama dengan penjumlahan semua nilai dibagi dengan jumlah mahasiswa (pada kasus ini, 10). Program untuk menyelasaikan masalah ini (Gambar 4.5) mamasukkan setiap nilai, melakukan perhitungan rerata, dan menampilkan hasil. Repetisi terkendali-kounter akan dipakai untuk memasukkan satu nilai per waktu. Pada contoh ini, repetisi berhenti ketika kounter melebihi 10.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- Gambar 4.5: rerata.html -->
<!-- Repetisi terkendali-kounter untuk menghitung rerata kelas. -->
<html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
        <title>Program Rerata Kelas</title>
        <script type = "text/javascript">
            <!--
            var total; // penjumlahan semua nilai
            var kounterNilai; // banyak nilai yang dimasukkan
            var nilai; // nilai yang diketikkan pengguna (sebagai string)
            var nilaiInteger; // nilai yang dikonversi menjadi integer
            var rerata; // rerata atas semua nilai

            // fase inisialisasi
            total = 0; // menginisialisasi total
            kounterNilai= 1; // mempersiapkan loop

            // fase pemrosesan
            while ( kounterNilai <= 10 ) // loop sebanyak 10 kali
            {

                // meminta masukan dari pengguna
                nilai= window.prompt( "Masukkan nilai integer:", "0" );

                // mengkonversi nilai dari string menjadi integer
                nilaiInteger= parseInt( nilai );

                // menjumlahkan nilaiInteger dengan total
                total = total + nilaiInteger;

                // menambahkan 1 pada kounterNilai
                kounterNilai = kounterNilai + 1;
            } // akhir while

            // fase terminasi
            rerata = total / 10; // menghitung rerata

            // menampilkan rerata ujian
            document.writeln(
                "<h1>Rerata kelas adalah " + rerata + "</h1>" );
            // -->
        </script>
    </head>
    <body>
        <p>Klik Refresh untuk menjalankan skrip ini kembali<p>
    </body>
 </html>





Gambar 4.5 Repetisi terkendali-kounter untuk menghitung rerata kelas


Baris 12-16 mendeklarasikan variabel total, kounterNilai, nilai, nilaiInteger, dan rerata. Variabel nilai akan menyimpan string yang diketikkan pengguna pada dialog prompt. Variabel nilaiInteger akan menyimpan nilai integer dari nilai yang dimasukkan pengguna pada dialog prompt.

Baris 19-20 merupakan dua statemen penugasan yang menginisialisasi total dengan 0 dan kounterNilai dengan 1. Perhatikan bahwa variabel total dan kounterNilai diinisialisasi sebelum digunakan pada perhitungan.

Baris 23 mengindikasikan bahwa statemen while berlanjut beriterasi ketika nilai dari kounterNilai bernilai kurang dari atau sama dengan 10. Baris 27 berkaitan dengan statemen pseudocodeMasukkan nilai berikutnya”. Statemen ini menampilkan sebuah dialog prompt dengan “Masukkan nilai integer: “ pada layar.

Setelah pengguna memasukkan nilai, baris 30 mengkonversinya dari string menjadi integer. Anda harus mengkonversi string menjadi sebuah integer pada contoh ini.

Program sekarang menginkremen variabel kounterNilai untuk mengindikasikan bahwa sebuah nilai telah diproses dan untuk membaca nilai berikutnya dari pengguna. Baris 36 menambahkan 1 pada nilaiKounter, sehingga kondisi pada statemen while nanti pada akhirnya akan menjadi false dan menghentikan loop. Setelah statemen ini dieksekusi, program berlanjut dengan menguji kondisi pada statemen while pada baris 23. Jika kondisi masih bernilai true, maka statemen-statemen pada baris 27-36 akan diulangi. Sebaliknya, jika kondisi bernilai false, maka program akan mengeksekusi statemen pertama yang berada di luar (setelah) tubuh loop (baris 40).

Baris 40 menugaskan nilai dari perhitungan rerata kepada variabel rerata. Baris 43-44 menulis sebaris teks XHTML pada dokumen yang menampilkan string “Rerata kelas adalah “ diikuti dengan nilai dari variabel rerata sebagai elemen <h1> pada penjelajah.


4.7 Repetisi Terkendali-Sentinel
Selanjutnya akan digeneralisasi permasalahan rerata kelas. Perhatikan permasalahan berikut:

Kembangkanlah sebuah program pererata-kelas yang akan memproses sembarang banyak nilai setiap kali program dijalankan.

Pada contoh rerata-kelas pertama, banyak nilai (10) telah diketahui terlebih dahulu. Pada contoh ini, tidak ada indikasi yang diberikan tentang berapa banyak nilai yang akan dimasukkan oleh pengguna. Program harus memproses sembarang banyak nilai. Bagaimana program menentukan kapan harus menghentikan masukan nilai? Bagaimana ia mengetahui kapan harus menghitung dan menampilkan rerata kelas?

Salah satu cara untuk menyelesaikan masalah ini adalah dengan menggunakan sebuah nilai spesial yang dinamakan dengan nilai sentinel (disebut pula dengan nilai pengawal, nilai sinyal atau nilai bendera) untuk mengindikasikan akhir entri data. Pengguna mengetikkan nilai-nilai sampai semua nilai telah dimasukkan. Kemudian pengguna mengetikkan nilai sentinel untuk mengindikasikan bahwa nilai terakhir telah dientrikan.

Tentu, Anda harus memilih nilai sentinel yang berbeda dari nilai masukan valid. Nilai -1 merupakan nilai sentinel untuk permasalahan ini karena nilai-nilai kuis memiliki rentang 0 sampai 100. Jadi, eksekusi terhadap program rerata-kelas dapat memproses aliran masukan seperti 95, 96, 75, 74, 89, dan -1. Program akan menghitung dan menampilkan rerata kelas dengan nilai-nilai 95, 96, 75, 74, dan 89, dimana -1 dipakai sebagai nilai sentinel.

Gambar 4.6 menunjukkan program JavaScript dan contoh keluaran program. Meskipun setiap nilai adalah integer, perhitung pererataan kemungkinan besar akan menghasilkan sebuah angka desimal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- Gambar 4.6: rerata2.html-->
<!-- Repetisi terkendali-sentinel untuk menghitung rerata kelas. -->
<html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
        <title>Program Rerata Kelas: Repetisi Terkendali-Sentinel</title>

        <script type = "text/javascript">
            <!--
            var total; // penjumlahan semua nilai
            var kounterNilai; // banyak nilai yang dimasukkan
            var nilai; // nilai yang diketikkan pengguna (sebagai string)
            var nilaiInteger; // nilai yang dikonversi menjadi integer
            var rerata; // rerata atas semua nilai

            // fase inisialisasi
            total = 0; // menginisialisasi total
            kounterNilai= 0; // mempersiapkan loop

            // fase pemrosesan
            // meminta masukan dari pengguna
            nilai = window.prompt(
                "Masukkan nilai integer, -1 untuk keluar:", "0" );

            // mengkonversi nilai dari string menjadi integer
            nilaiInteger= parseInt( nilai );

            while ( nilaiInteger != -1 )
            {
                // menjumlahkan nilaiInteger dengan total
                total = total + nilaiInteger;

                // menambahkan 1 pada kounterNilai
                kounterNilai = kounterNilai + 1;

                // meminta masukan dari pengguna
                nilai = window.prompt(
                    "Masukkan nilai integer, -1 untuk keluar:", "0" );

                // mengkonversi nilai dari string menjadi integer
                nilaiInteger= parseInt( nilai );
            } // akhir while

            // fase terminasi
            if ( kounterNilai != 0 )
            {
                rerata = total / kounterNilai;

                // menampilkan rerata kelas
                document.writeln(
                    "<h1>Rerata kelas adalah " + rerata + "</h1>" );
            } // akhir if
            else
                document.writeln( "<p>Tidak ada nilai yang dimasukkan</p>" );
            // -->
        </script>
     </head>
     <body>
         <p>Klik Refresh untuk menjalankan skrip ini kembali</p>
     </body>
</html>
  





Gambar 4.6 Repetisi terkendali-sentinel untuk menghitung rerata kelas


Pada contoh ini, Anda melihat bahwa sebuah statemen kendali dapat ditempatkan di atas statemen kendali lain. Statemen while (baris 31-45) diikuti oleh sebuah statemen if...else (baris 48-57). Hampir semua kode pada program ini identik dengan kode pada Gambar 4.5, jadi pembahasan hanya difokuskan pada beberapa fitur baru.

Baris 21 menginisialisasi kounterNilai dengan 0, karena belum ada nilai yang dientrikan. Ingat bahwa program ini menggunakan repetisi terkendali-sentinel. Untuk menjaga keakuratan rekaman banyak nilai yang telah dientrikan, skrip menginkremen kounterNilai hanya setelah pemrosesan sebuah nilai valid selesai dilakukan.

Perhatikan blok di dalam loop while pada Gambar 4.6 (baris 32-45). Tanpa sepasang kurung kurawal, tiga statemen terakhir di dalam tubuh loop akan berada di luar loop, yang menyebabkan komputer menerjemahkan kode tersebut secara tidak tepat, sebagai berikut:

while ( nilaiInteger != -1 )
    // menjumlahkan nilaiInteger dengan total
    total = total + nilaiInteger;

// menambahkan 1 pada kounterNilai
kounterNilai = kounterNilai + 1;

// meminta masukan dari pengguna
nilai = window.prompt(
    "Masukkan nilai integer, -1 untuk keluar:", "0" );

// mengkonversi nilai dari string menjadi integer
nilaiInteger= parseInt( nilai );

Interpretasi ini menyebabkan sebuah loop tak-berhingga di dalam program jika pengguna tidak memberikan nilai sentinel -1 sebagai nilai masukan pertama pada baris 25-26 (sebelum statemen while).


4.8 Formulasi Algoritma: Statemen Kendali Bersarang
Perhatikan statemen permasalahan berikut:

Sebuah universitas menawarkan suatu pelatihan untuk mempersiapkan para mahasiswa yang ingin mengambil ujian sertifikasi pemrograman Microsoft. Tahun lalu, 10 dari para mahasiswa yang menyelesaikan pelatihan ini ikut serta dalam ujian sertifikasi pemrograman. Universitas ingin mengetahui kinerja 10 mahasiswa yang mengikuti ujian sertifikasi tersebut. Anda diminta untuk menulis sebuah program yang dapat menyimpulkan hasil respon dari para mahasiswa tersebut. Pada Anda diberikan daftar 10 mahasiswa tersebut. Di samping tiap nama, dituliskan “1” jika mahasiswa terkait lulus dan dituliskan “2” jika mahasiswa terkait gagal.

Program Anda harus menganalisa hasil ujian sebagai berikut:
1.       Masukkan setiap hasil ujian (“1” atau “2”). Tampilkan pesan “Masukkan hasil” setiap kali program meminta hasil ujian yang lain.
2.       Hitung banyaknya mahasiswa yang lulus dan yang gagal.
3.       Tampilkan kesimpulan dari hasil ujian, yang mengindikasikan jumlah mahasiswa yang lulus dan jumlah mahasiswa yang gagal.
4.       Jika lebih dari 8 mahasiswa lulus dalam ujian, tampilkan pesan “Naikkan biaya pelatihan”.

Setelah membaca statemen permasalahan, Anda melakukan pengamatan sebagai berikut:
1.       Program harus memproses hasil ujian untuk 10 mahasiswa, sehingga loop terkendali kounter cocok untuk kasus ini.
2.       Setiap hasil ujian adalah sebuah String, berupa “1” atau “2”. Setiap kali program membaca sebuah hasil ujian, program harus menentukan apakah masukan adalah “1” atau “2”. Anda harus menguji “1” dalam algoritma. Jika masukan bukan “2”, maka diasumsikan ia berupa “1”.
3.       Dua kounter diperlukan untuk menyimpan hasil ujian, satu untuk menjejak banyak mahasiswa yang lulus ujian dan satu kounter untuk menjejak banyak mahasiswa yang gagal ujian.
Setelah program memproses semua hasil ujian, ia harus menentukan apakah terdapat lebih dari 8 mahasiswa yang lulus ujian atau tidak. Program JavaScript dan contoh keluaran program ditampilkan pada Gambar 4.7.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- Gambar 4.7: analisis.html-->
<!--Perhitungan hasil ujian. -->
<html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
        <title>Analisis Hasil Ujian</title>
        <script type = "text/javascript">
            <!--
            // inisialisasi variabel-variabel dalam deklarasi
            var lulus = 0; // jumlah yang lulus
            var gagal = 0; // jumlah yang gagal
            var mahasiswa = 1; // kounter mahasiswa
            var hasil; // hasil ujian

            // memproses 10 mahasiswa; loop terkendali-kounter
            while ( mahasiswa <= 10 )
            {
                hasil = window.prompt( "Masukkan hasil (1=lulus,2=gagal)", "0" );
 
                if ( hasil == "1" )
                    lulus = lulus + 1;
                else
                    gagal = gagal + 1;

                mahasiswa = mahasiswa + 1;
            } // akhir while

            // fase terminasi
            document.writeln( "<h1>Hasil Ujian</h1>" );
            document.writeln(
                "Lulus: " + lulus + "<br />Gagal: " + gagal );

            if ( lulus > 8 )
                document.writeln( "<br />Naikkan biaya pelatihan" );
            // -->
        </script>
    </head>
    <body>
        <p>Klik Refresh untuk menjalankan kembali skrip ini</p>
    </body>
</html>





Gambar 4.7 Perhitungan hasil ujian
  

4.9 Operator Penugasan
JavaScript menyediakan beberapa operator penugasan (yang dikenal dengan operator penugasan kompon atau operator penugasan gabungan) untuk memperpendek ekspresi penugasan. Sebagai contoh, statemen

c = c + 3;

dapat dipersingkat dengan operator penugasan penjumlahan, +=, sebagai

c += 3;

Operator += menjumlahkan nilai dari ekspresi di sisi kanan operator dengan nilai variabel di sisi kiri operator dan menyimpan hasilnya di dalam variabel di sisi kiri operator. Sembarang statemen dalam bentuk

variabel = variabel operator ekspresi;

dimana operator adalah salah satu dari operator-operator biner +, -, *, /, atau %, dapati dituliskan dalam bentuk

variabel operator = ekspresi;

Jadi, penugasan c += 3 menambahkan 3 pada c. Gambar 4.8 menunjukkan operator-operator penugasan aritmatik, ekspresi-ekspresi contoh menggunakan operator-operator tersebut, dan penjelasan tiap operator aritmatik.

Operator penugasan
Nilai awal variabel
Contoh ekspresi
Penjelasan
Menugaskan
+=
c = 3

c += 7
c = c + 7
10 pada c
-=
d = 5

d -= 4
d = d - 4
1 pada d
*=
e = 4

e *= 5
e = e * 5
20 pada e
/=
f = 6

f /= 3
f = f / 3
2 pada f
%=
g = 12

g %= 9
g = g % 9
3 pada g
Gambar 4.8 Operator-operator penugasan Aritmatik


4.10 Operator Inkremen dan Dekremen
JavaScript menyediakan operator inkremen (++) dan operator dekreman (--) (yang dicantumkan pada Gambar 4.9). Jika sebuah variabel c diinkremen sebesar 1, maka operator inkremen, ++, dapat dipakai menggantikan ekspresi c = c + 1 atau c += 1. Jika operator inkremen atau operator dekremen ditempatkan sebelum sebuah variabel, maka ia disebut dengan operator prainkremen atau pradekremen. Jika operator inkremen atau operator dekremen ditempatkan setelah sebuah variabel, maka ia disebut dengan operator pascainkremen atau pascadekremen

Operasi prainkremen (atau pradekremen) atas sebuah variabel menyebabkan program menginkremen (mendekremen) variabel tersebut sebesar 1, kemudian menggunakan nilai baru dari variabel tersebut di dalam ekspresi dimana ia berada. Operasi pascainkremen (pascadekremen) atas sebuah variabel menyebabkan program untuk menggunakan nilai sekarang dari variabel tersebut di dalam ekspresi dimana ia berada, kemudian menginkremen (mendekremen) variabel tersebut sebesar 1.

Operator
Contoh
Disebut dengan
Penjelasan
++
++a

prinkremen
Menginkremen variabel a sebesar 1, kemudian menggunakan nilai baru dari variabel tersebut di dalam ekspresi dimana ia berada.
++
a++

pascainkremen
menggunakan nilai sekarang dari variabel a di dalam ekspresi dimana ia berada, kemudian menginkremen  variabel tersebut sebesar 1.
--
--b

pradekremen
Mendekremen variabel b sebesar 1, kemudian menggunakan nilai baru dari variabel tersebut di dalam ekspresi dimana ia berada.
--
b--

pascadekremen
menggunakan nilai sekarang dari variabel b di dalam ekspresi dimana ia berada, kemudian mendekremen variabel tersebut sebesar 1.
Gambar 4.9 Operator inkremen dan dekremen


Tiga operator penugasan pada Gambar 4.7 (baris 24, 26, dan 28),

lulus = lulus + 1;
gagal = gagal + 1;
mahasiswa = mahasiswa + 1;

dapat dituliskan secara lebih singkat menggunakan operator penugasan:

lulus += 1;
gagal += 1;
mahasiswa += 1;

menggunakan operator prainkremen:

++lulus;
++gagal;
++mahasiswa;

atau menggunakan operator pascainkremen:

lulus++;
gagal++;
mahasiswa++;

Skrip pada Gambar 4.10 mendemonstrasikan perbedaan antara versi prainkremen dan versi pascainkremen dari operator inkremen ++.  Operasi pascainkremen terhadap variabel c menyebabkan variabel tersebut diinkremen setelah ia digunakan di dalam pemanggilan metode document.writeln (baris 18). Operasi prainkremen terhadap variabel c menyebabkan variabel tersebut diinkremen sebelum ia digunakan di dalam pemanggilan metode document.writeln (baris 25). Program menampilkan nilai c sebelum dan sesudah operator ++ digunakan. Operator dekremen (--) bekerja dengan cara yang sama.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- Gambar 4.10: inkremen.html-->
<!-- Prainkremen dan Pascainkremen. -->
<html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
        <title>Prainkremen dan Pascainkremen</title>
        <script type = "text/javascript">
            <!--
            var c;

            c = 5;
            document.writeln( "<h3>Pascainkremen</h3>" );
            document.writeln( c ); // menampilkan 5
            // menampilkan 5 kemudian menginkremen
            document.writeln( "<br />" + c++);
            document.writeln( "<br />" + c ); // menampilkan 6

            c = 5;
            document.writeln( "<h3>Prainkremen</h3>" );
            document.writeln( c ); // menampilkan 5
            // menginkremen kemudian menampilkan 6
            document.writeln( "<br />" + ++c);
            document.writeln( "<br />" + c ); // menampilkan 6
            // -->
        </script>
    </head><body></body>
</html>



Gambar 4.10 Prainkremen dan pascainkremen

Gambar 4.11 mencantumkan derajat keutamaan dan asosiatifitas operator-operator yang telah dikenalkan sampai sejauh ini. Operator-operator ditampilkan dari atas ke bawah dengan urutan keutamaan menurun. Kolom kedua menjelaskan asosiatifitas dari operator-operator pada tiap level keutamaan. Perhatikan bahwa operator kondisional (?:), operator inkremen (++) dan operator dekremen (--), dan operator penugasan =, +=, -=, *=, /=, dan %= berasosiasi dari kanan ke kiri. Kolom ketiga mencantumkan tipe grup operator.

Operator
Asosiatifitas
Tipe
++  --
kanan ke kiri

unary
* /  %
kiri ke kanan

multiplikatif
+  -
kiri ke kanan

aditif
<  <=  >  >=
kiri ke kanan

relasional
==  !=
kiri ke kanan

ekualitas
?:
kanan ke kiri

kondisional
=  +=  -=  *=  /=  %=
kanan ke kiri

penugasan
Gambar 4.11 Derajat keutamaan dan asosiatifitas semua operator yang telah didiskusikan sejauh ini



No comments:

Post a Comment