Computational Thinking: Berpikir Komputasional dari Nol

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 4 dari 8
  • 30 menit
  • 2 latihan kode
  • 4 soal kuis

Algoritma dan Ciri-cirinya

Di bab ini (8 bagian)
  1. Tujuan
  2. Apa itu algoritma?
  3. Lima ciri algoritma yang baik
  4. Contoh: menyeberang jalan
  5. Algoritma dalam JavaScript
  6. Latihan berpikir: memperbaiki algoritma yang buruk
  7. Kesalahan umum
  8. Rangkuman

Tujuan bab ini

  • Menjelaskan pengertian algoritma.
  • Menyebutkan lima ciri algoritma yang baik: input, output, jelas, berhingga, dan efektif.
  • Menilai apakah sebuah urutan langkah sudah memenuhi ciri algoritma.
  • Menulis algoritma sederhana sebagai fungsi JavaScript dengan percabangan.

Apa itu algoritma?

Setelah masalah dipecah, polanya dikenali, dan informasinya disaring, kamu masih perlu satu hal: langkah-langkah untuk benar-benar menyelesaikannya. Itulah pilar keempat.

Algoritma adalah urutan langkah yang logis, jelas, dan berhingga untuk menyelesaikan suatu masalah atau mencapai tujuan.

Kata "algoritma" sering terdengar teknis, padahal kamu memakainya setiap hari. Resep masakan, petunjuk merakit lemari, dan cara mengambil uang di ATM semuanya algoritma. Yang membedakan algoritma yang baik dan buruk adalah seberapa jelas dan lengkap langkahnya.

Lima ciri algoritma yang baik

Ciri-ciri berikut dikenal luas dari Donald Knuth, seorang ilmuwan komputer, dalam bukunya The Art of Computer Programming.

CiriArtinya
InputAda data masukan, jumlahnya nol atau lebih
OutputMenghasilkan minimal satu keluaran
JelasSetiap langkah tidak bermakna ganda
BerhinggaPasti berhenti setelah sejumlah langkah
EfektifLangkahnya sederhana dan bisa dikerjakan

Mari bahas yang sering membingungkan.

Input boleh nol

Algoritma "ucapkan selamat pagi" tidak butuh data masukan apa pun, tetapi tetap algoritma. Sebaliknya, output wajib ada, minimal satu. Algoritma yang tidak menghasilkan apa pun tidak menyelesaikan masalah.

Jelas (definiteness)

"Tambahkan garam secukupnya" tidak jelas, karena "secukupnya" bagi setiap orang berbeda. "Tambahkan setengah sendok teh garam" jelas. Komputer sangat membutuhkan ciri ini karena ia tidak bisa menebak maksudmu.

Berhingga (finiteness)

Algoritma harus pasti berhenti. Langkah "ulangi terus sampai bosan" tidak berhingga untuk komputer, karena komputer tidak pernah bosan. Setiap pengulangan harus punya kondisi berhenti yang pasti tercapai.

Efektif

Setiap langkah harus bisa benar-benar dikerjakan. "Tebak angka yang akan keluar di undian besok" tidak efektif karena tidak ada cara mengerjakannya.

Contoh: menyeberang jalan

Berikut algoritma menyeberang jalan:

  1. Berdiri di tepi zebra cross.
  2. Lihat ke kanan, kiri, lalu kanan lagi.
  3. Jika kendaraan masih lewat, tunggu.
  4. Jika jalan aman, menyeberang dengan tenang.
  5. Sampai di seberang, selesai.

Algoritma sederhana ini ternyata memuat tiga hal penting:

  • Urutan: langkah 1 sampai 5 dikerjakan berurutan. Menyeberang dulu baru melihat jelas berbahaya.
  • Keputusan: "jika kendaraan masih lewat" dan "jika jalan aman" adalah pilihan berdasarkan kondisi.
  • Pengulangan: "tunggu" berarti kamu mengulangi langkah melihat sampai jalan aman.

Coba periksa dengan lima ciri. Inputnya kondisi jalan. Outputnya kamu sampai di seberang. Setiap langkah jelas. Ada akhirnya (langkah 5). Setiap langkah bisa dikerjakan. Algoritma ini lolos.

Sebagai latihan, coba tulis algoritma memakai seragam sekolah. Apakah kamu menulis "pakai baju" sebelum "kancingkan baju"? Apakah langkahmu cukup jelas untuk adik kelas satu SD?

Algoritma dalam JavaScript

Percabangan dengan if dan else

Keputusan "jika ... maka ..." ditulis dengan if:

function keputusanMenyeberang(adaKendaraan) {
  if (adaKendaraan) {
    return "tunggu";
  } else {
    return "menyeberang";
  }
}

keputusanMenyeberang(true); // "tunggu"
keputusanMenyeberang(false); // "menyeberang"
  • true dan false adalah nilai boolean, artinya benar dan salah.
  • if (kondisi) { ... } menjalankan isi kurung kurawal hanya bila kondisinya benar.
  • else { ... } dijalankan bila kondisinya salah.

Kondisi juga bisa berupa perbandingan. Operator yang sering dipakai: > (lebih dari), < (kurang dari), >=, <=, === (sama dengan), dan !== (tidak sama dengan).

Algoritma mencari nilai terbesar

Berikut algoritma klasik dalam bahasa sehari-hari:

  1. Anggap angka pertama sebagai yang terbesar.
  2. Periksa angka berikutnya satu per satu.
  3. Jika angka itu lebih besar dari yang terbesar sejauh ini, catat sebagai yang terbesar.
  4. Setelah semua diperiksa, laporkan yang terbesar.

Terjemahannya ke JavaScript:

function cariTerbesar(daftar) {
  let terbesar = daftar[0];
  for (let i = 1; i < daftar.length; i++) {
    if (daftar[i] > terbesar) {
      terbesar = daftar[i];
    }
  }
  return terbesar;
}

cariTerbesar([70, 85, 60, 92, 78]); // 92
  • daftar[0] mengambil isi pertama array. Nomor urut (indeks) array dimulai dari 0.
  • daftar.length adalah banyaknya isi array.
  • let dipakai untuk nama yang nilainya akan berubah, seperti terbesar.

Cek lima cirinya: input berupa daftar angka, output berupa satu angka, setiap langkah jelas, perulangan pasti berhenti karena i terus bertambah sampai melewati panjang daftar, dan setiap langkah efektif.

Latihan berpikir: memperbaiki algoritma yang buruk

Perhatikan algoritma memasak mi instan berikut:

  1. Masak mi.
  2. Tunggu sebentar.
  3. Tambahkan bumbu.
  4. Selesai kalau sudah enak.

Algoritma ini punya beberapa masalah. "Masak mi" tidak menjelaskan air harus direbus dulu. "Sebentar" tidak jelas. "Kalau sudah enak" juga tidak jelas dan bisa membuat algoritma tidak berhingga bagi orang yang sulit puas. Versi yang lebih baik: rebus 400 ml air sampai mendidih, masukkan mi, masak 3 menit, tiriskan, campur dengan bumbu, sajikan.

Kesalahan umum

  • Langkah bermakna ganda. "Masak sampai matang" perlu diperjelas, misalnya "masak 10 menit" atau "masak sampai warnanya kecokelatan".
  • Urutan tertukar. Komputer menjalankan langkah persis sesuai urutan yang kamu tulis.
  • Pengulangan tanpa akhir. Kalau kondisi berhentinya tidak pernah tercapai, algoritma tidak berhingga dan program akan macet.
  • Lupa kasus khusus. Bagaimana kalau semua angka di daftar sama? Algoritma cariTerbesar tetap benar, tetapi selalu pikirkan kemungkinan seperti ini.

Rangkuman

  • Algoritma adalah urutan langkah yang logis, jelas, dan berhingga untuk menyelesaikan masalah.
  • Lima ciri algoritma yang baik: input (nol atau lebih), output (minimal satu), jelas, berhingga, dan efektif.
  • Algoritma sehari-hari, seperti menyeberang jalan, sudah memuat urutan, keputusan, dan pengulangan.
  • Di JavaScript, keputusan ditulis dengan if dan else, dan kondisinya bisa berupa perbandingan.
  • Selalu periksa algoritmamu terhadap lima ciri dan kasus-kasus khusus.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Latihan kode (2)
  3. 3. Kuis (4 soal)

Latihan kode: Algoritma mencari nilai terkecil

Ubah algoritma berikut menjadi fungsi cariTerkecil(daftar):

  1. Anggap angka pertama sebagai yang terkecil.
  2. Periksa angka berikutnya satu per satu.
  3. Jika angka itu lebih kecil dari yang terkecil sejauh ini, catat sebagai yang terkecil.
  4. Setelah semua diperiksa, kembalikan yang terkecil.

Contoh: cariTerkecil([70, 85, 60, 92]) menghasilkan 60.

Latihan kode: Menghitung siswa yang tuntas

Tulis hitungTuntas(daftarNilai, batas) yang mengembalikan banyaknya nilai yang lebih dari atau sama dengan batas.

Algoritmanya: siapkan penghitung bernilai 0, periksa setiap nilai, dan jika nilai >= batas, tambah penghitung 1.

Contoh: hitungTuntas([80, 60, 75, 90], 75) menghasilkan 3.

Cek pemahaman

  1. 1Ciri algoritma yang menyatakan algoritma pasti berhenti setelah sejumlah langkah disebut apa?

  2. 2Algoritma yang baik boleh tidak memiliki input sama sekali, tetapi harus menghasilkan minimal satu output.

  3. 3Langkah "tambahkan garam secukupnya" melanggar ciri algoritma yang mana?

  4. 4Apa hasil pemanggilan fungsi ini?

    function cek(adaKendaraan) {
      if (adaKendaraan) {
        return "tunggu";
      } else {
        return "menyeberang";
      }
    }
    cek(false);