Latihan Soal Interaktif Algoritma Pemrograman

Latihan Soal & Pembahasan HTML & JavaScript

Materi Algoritma Pemrograman Kelas XII SMA

Halo semuanya! Untuk melatih kemampuan berpikir tingkat tinggi (deep learning) serta mengasah kemampuan literasi logika dan numerasi dalam pemrograman Informatika kelas XII, berikut adalah 5 contoh soal objektif pengenalan dasar Google Apps Script (GAS) beserta pembahasannya yang mendalam namun mudah dipahami.

💡 Info Penting untuk Praktik Murid:
Potongan kode algoritma dalam soal-soal di bawah ini menggunakan bahasa JavaScript (dasar dari Google Apps Script). Anda dan murid-murid dapat langsung mempraktikkan dan menguji kode tersebut secara gratis tanpa perlu instalasi aplikasi menggunakan compiler online resmi melalui tautan berikut: Programiz JavaScript Online Compiler.

Catatan Penggunaan: Pada aplikasi Programiz, perintah cetak log menggunakan console.log() untuk menampilkan hasil di panel sebelah kanan setelah tombol Run ditekan.

Skor Anda: 0 / 100

Terus berlatih untuk hasil yang lebih baik!

⚠️ Harap jawab ke-5 soal terlebih dahulu sebelum memeriksa skor!

Soal 1: Penjumlahan Nilai dengan Kondisi (For Loop & If)

Pertanyaan: Perhatikan potongan kode Google Apps Script (GAS) berikut untuk memproses daftar nilai siswa:

function hitungData() {
  var nilai = [75, 80, 90, 65, 85];
  var total = 0;
  
  for (var i = 0; i < nilai.length; i++) {
    if (nilai[i] > 75) {
      total += nilai[i];
    }
  }
  console.log(total);
}
hitungData();

Berapa nilai akhir yang dicetak pada log setelah seluruh perulangan selesai dieksekusi?

✅ Pembahasan Detail:

  • Konsep Utama: Soal ini menguji pemahaman tentang Array (daftar data), perulangan (Looping for) untuk membaca data dari awal ke akhir, dan seleksi kondisi (If) untuk menyaring data.
  • Analisis Numerasi (Langkah Pelacakan): Komputer akan memeriksa satu per satu angka di dalam daftar [75, 80, 90, 65, 85] dengan syarat harus lebih besar dari 75:
    • Data 75: Apakah 75 > 75? Tidak. (Dilewati)
    • Data 80: Apakah 80 > 75? Ya. (Tabungan total = 80)
    • Data 90: Apakah 90 > 75? Ya. (Total = 80 + 90 = 170)
    • Data 65: Apakah 65 > 75? Tidak. (Dilewati)
    • Data 85: Apakah 85 > 75? Ya. (Total = 170 + 85 = 255)
  • Kesimpulan: Hanya angka 80, 90, dan 85 yang lolos seleksi. Hasil penjumlahannya adalah 255.

Soal 2: Perulangan Bersarang (Nested Loop)

Pertanyaan: Sebuah skrip Google Apps Script dirancang untuk mensimulasikan pemrosesan sel pada Google Sheets dengan perulangan bersarang sebagai berikut:

function hitungMatriks() {
  var total = 0;
  for (var r = 1; r <= 3; r++) {
    for (var c = 1; c <= 4; c++) {
      total += (r * c);
    }
  }
  console.log(total);
}
hitungMatriks();

Berapa nilai akhir dari variabel total setelah perulangan selesai?

✅ Pembahasan Detail:

  • Konsep Utama: Perulangan di dalam perulangan (Nested Loop) bekerja seperti tabel perkalian yang memiliki baris (r) dan kolom (c). Komputer harus menyelesaikan semua kolom di satu baris sebelum pindah ke baris berikutnya.
  • Analisis Numerasi (Kalkulasi):
    • Saat Baris 1 (r = 1): Komputer mengalikan 1 dengan kolom 1 sampai 4 → 1×(1+2+3+4) = 10.
    • Saat Baris 2 (r = 2): Komputer mengalikan 2 dengan kolom 1 sampai 4 → 2×(1+2+3+4) = 20.
    • Saat Baris 3 (r = 3): Komputer mengalikan 3 dengan kolom 1 sampai 4 → 3×(1+2+3+4) = 30.
  • Kesimpulan: Jumlahkan total dari ketiga baris tersebut: 10 + 20 + 30 = 60.

Soal 3: Logika Percabangan Berurutan (If - Else If)

Pertanyaan: Perhatikan cuplikan kode logika bersyarat di Google Apps Script untuk menentukan status akademik berikut:

function cekStatus(skor) {
  var status = "";
  if (skor >= 85) {
    status = "Sangat Baik";
  } else if (skor >= 75) {
    status = "Baik";
  } else if (skor >= 60) {
    status = "Cukup";
  } else {
    status = "Remedial";
  }
  console.log(status);
}
cekStatus(74.9);

Berdasarkan alur logika kode di atas, apa isi dari variabel status saat fungsi dipanggil dengan nilai cekStatus(74.9)?

✅ Pembahasan Detail:

  • Konsep Utama: Alur seleksi ketat dibaca dari atas ke bawah. Begitu ada satu syarat yang terpenuhi (bernilai TRUE), komputer akan mengambil keputusan tersebut dan mengabaikan baris kode di bawahnya.
  • Analisis Literasi Logika: Masukkan angka 74.9 ke mesin penyaring:
    • Apakah 74.9 ≥ 85? Tidak. (Lanjut ke bawah)
    • Apakah 74.9 ≥ 75? Tidak. (Ingat, secara presisi numerik 74.9 kurang dari 75 meskipun beda tipis, jadi tidak lolos).
    • Apakah 74.9 ≥ 60? Ya, Benar!
  • Kesimpulan: Karena syarat ketiga benar, status ditetapkan menjadi "Cukup" dan proses pengecekan selesai.

Soal 4: Logika Pengindeksan Array (Zero-Based Indexing)

Pertanyaan: Sebuah array di Google Apps Script mendefinisikan nama-nama hari kerja sebagai berikut:

var hari = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat"];
var pilihan = hari[1] + " dan " + hari[3];
console.log(pilihan);

Apa hasil akhir dari variabel pilihan dengan mengingat basis indeks array dalam pemrograman?

✅ Pembahasan Detail:

  • Konsep Utama: Dalam bahasa JavaScript (termasuk GAS), indeks atau nomor urut array selalu dimulai dari angka 0 (Zero-Based Indexing), bukan angka 1.
  • Analisis Literasi & Urutan: Mari kita urutkan daftar hari sesuai aturan komputer:
    • Indeks 0 = "Senin"
    • Indeks 1 = "Selasa"
    • Indeks 2 = "Rabu"
    • Indeks 3 = "Kamis"
    • Indeks 4 = "Jumat"
  • Kesimpulan: Kode hari[1] memanggil "Selasa" dan hari[3] memanggil "Kamis". Gabungannya menghasilkan teks "Selasa dan Kamis".

Soal 5: Algoritma Pencarian Nilai Maksimum dan Counter

Pertanyaan: Perhatikan algoritma pencarian harga tertinggi dalam array di Google Apps Script berikut:

function cariHargaTertinggi() {
  var harga = [10000, 20000, 15000, 25000];
  var hargaTertinggi = harga[0];
  var jumlahUpdate = 0;
  
  for (var i = 1; i < harga.length; i++) {
    if (harga[i] > hargaTertinggi) {
      hargaTertinggi = harga[i];
      jumlahUpdate++;
    }
  }
  console.log(jumlahUpdate);
}
cariHargaTertinggi();

Berapa nilai akhir dari variabel jumlahUpdate setelah perulangan selesai?

✅ Pembahasan Detail:

  • Konsep Utama: Algoritma ini bekerja seperti kompetisi mencari "Juara Bertahan". Variabel jumlahUpdate bertindak sebagai pencatat (counter) seberapa sering posisi juara bertahan tersebut digantikan oleh angka yang lebih besar.
  • Analisis Logika & Numerasi (Dry-run):
    • Kondisi Awal: Juara bertahan diatur ke data pertama: hargaTertinggi = 10000. Nilai jumlahUpdate = 0.
    • Iterasi 1 (Data 20000): Apakah 20000 > 10000? Ya! Juara berubah menjadi 20000. (Terjadi Update ke-1).
    • Iterasi 2 (Data 15000): Apakah 15000 > 20000? Tidak. Juara tetap 20000. (Tidak ada update).
    • Iterasi 3 (Data 25000): Apakah 25000 > 20000? Ya! Juara berubah menjadi 25000. (Terjadi Update ke-2).
  • Kesimpulan: Posisi juara bertahan mengalami pergantian sebanyak 2 kali selama kode berjalan.