Modul 2 : Algoritma dan Pemrograman Lanjut (Revisi)
Koding & AI: Deep Learning
Pemrograman Lanjut & Fondasi Kecerdasan Artifisial
Selamat datang di media pembelajaran mendalam (*Deep Learning*). Kuasai pemrograman modular Python, uji efisiensi algoritma *Searching & Sorting*, dan bangun prototipe agen cerdas rekomendasi komoditas lokal Kopi Toraja!
Mindful (Berkesadaran)
Setiap pertemuan dilengkapi Pertanyaan Pemantik, Materi Konsep Mendalam, Lab Virtual Interaktif, dan Jurnal Refleksi agar siswa menyadari proses berpikirnya.
Meaningful (Bermakna)
Menghubungkan komputasi dengan realitas Toraja: mengolah mutu Kopi Arabika Toraja dan katalogisasi digital motif ukiran *Passura'*.
Joyful (Menggembirakan)
Eksperimen langsung di browser tanpa instalasi tambahan, umpan balik kuis instan, dan selebrasi kelulusan confetti di akhir modul.
Peta 7 Pertemuan Lengkap & Lab Virtual
Fungsi Modular
🧪 Lab Uji Fungsi KopiScope Variabel
🧪 Lab Memori ScopeSearching: Linear/Binary
🧪 Lab Visualizer SearchSorting: Bubble/Insertion
🧪 Lab Visualizer BalokStruktur Multidimensi
🧪 Lab Filter Data TorajaAI Similarity Engine
🧪 Lab Agen RekomendasiShowcase & Evaluasi
🧪 Lab Stress-Testing AIToraja Recommender
📋 Siap Cetak / PraktikumFondasi: Modul Penilai Mutu Kopi Toraja
Pertanyaan Pemantik (Apersepsi):
"Bayangkan sebuah aplikasi kasir di Toraja yang memiliki 100 baris instruksi perhitungan diskon. Jika setiap kali menghitung kasir harus menulis ulang 100 baris yang sama, apa dampaknya saat ada kesalahan rumus? Bagaimana programmer profesional memecah masalah besar menjadi modul-modul mandiri?"
Materi Inti: Dekomposisi & Anatomi Fungsi Python
Dekomposisi adalah proses memecah persoalan komputasi kompleks menjadi sub-masalah kecil yang berdiri sendiri. Dalam bahasa Python, konsep ini diimplementasikan melalui Fungsi (Function).
Menggunakan kata kunci def nama_fungsi(parameter): untuk mendeklarasikan modul.
Pintu masuk nilai data dari luar ke dalam tubuh fungsi untuk diproses.
Mengirimkan kembali hasil kalkulasi ke baris pemanggil, bukan sekadar mencetak teks ke layar.
# Fungsi 1: Dekomposisi perhitungan skor mutu (Aroma 30%, Flavor 40%, Aftertaste 30%)
def hitung_skor_kopi(aroma, flavor, aftertaste):
total = (aroma * 0.3) + (flavor * 0.4) + (aftertaste * 0.3)
return total
# Fungsi 2: Dekomposisi klasifikasi mutu (Grade)
def tentukan_grade(skor):
if skor >= 8.5:
return "Specialty Grade 1 (Kualitas Ekspor)"
elif skor >= 8.0:
return "Premium Grade"
else:
return "Commercial Grade"
# Program Utama (Driver Code)
skor_sapan = hitung_skor_kopi(8.5, 9.0, 8.7)
grade_sapan = tentukan_grade(skor_sapan)
print(f"Kopi Arabika Sapan -> Skor: {skor_sapan:.2f} | Status: {grade_sapan}")
Lab Virtual 1: Simulator Eksekusi Fungsi Modular
Ubah parameter nilai masukan, lalu klik tombol untuk melihat bagaimana fungsi menerima argumen dan mengembalikan return value!
Apa akibatnya jika sebuah fungsi tidak memiliki kata kunci return saat dipanggil oleh variabel penampung?
Tuliskan pemahamanmu: "Apa perbedaan utama antara mencetak (print) dengan mengembalikan nilai (return)?"
Refactoring & Scope Memori Sistem Koperasi Kopi
kopi_utils.py) dan mengisolasi variabel lokal data sampel agar tidak merusak data inventaris global koperasi!
Pertanyaan Pemantik:
"Jika bagian penimbangan dan bagian pengemasan di Koperasi Kopi sama-sama membuat variabel bernama berat_kg = 50 di dalam fungsinya masing-masing, mengapa data kopi tidak tertukar atau saling menimpa? Bagaimana memori lokal Python melindungi data tersebut?"
Materi Inti: Ruang Lingkup Memori (LEGB Rule) & Refactoring Modul Kopi
Dalam Python, setiap variabel memiliki Scope (Ruang Lingkup):
- Variabel Lokal: Variabel data sampel kopi di dalam fungsi penilai hanya hidup saat penilaian berlangsung, lalu terhapus otomatis dari memori.
- Variabel Global: Variabel seperti
nama_koperasi = "Koperasi Kopi Barana'"yang bersifat konstan di seluruh aplikasi. - Refactoring Modul: Memindahkan fungsi
hitung_skor_kopi()dari Pertemuan 1 ke file terpisahkopi_utils.pyagar siap dipakai di sistem pencarian (Pertemuan 3) dan pengurutan (Pertemuan 4).
# Variabel Global Koperasi
nama_koperasi = "Koperasi Kopi Barana' Toraja"
standar_ekspor_skor = 85.0
def evaluasi_lot_kopi(kode_lot, aroma, flavor, aftertaste):
# Variabel Lokal: hanya ada saat fungsi ini dipanggil
skor_lot = (aroma * 0.3) + (flavor * 0.4) + (aftertaste * 0.3)
status_ekspor = skor_lot >= standar_ekspor_skor
print(f"[{nama_koperasi}] Lot {kode_lot} -> Skor: {skor_lot:.2f} | Siap Ekspor: {status_ekspor}")
return skor_lot
# Memanggil fungsi evaluasi
evaluasi_lot_kopi("LOT-TP-01", 8.8, 9.1, 8.9)
# print(skor_lot) # ERROR! NameError: skor_lot tidak dikenal di luar fungsi!
Lab Virtual 2: Simulator Memori Scope Variabel
Uji coba memanggil variabel dari luar fungsi untuk mengamati isolasi memori lokal vs global.
1. Memanggil Variabel Global
Variabel dideklarasikan di luar fungsi (nama_sekolah).
2. Memanggil Variabel Lokal
Mencoba memanggil variabel dari dalam fungsi (status_kondisi).
"Mengapa programmer profesional sangat menghindari ketergantungan pada variabel global saat membuat sistem besar?"
Pencarian Cepat Lot Kopi: Linear vs Binary Search
Pertanyaan Pemantik:
"Jika gudang Koperasi Barana' memiliki 10.000 lot karung kopi dengan nomor ID terurut (1 s.d. 10000), bagaimana cara petugas menemukan sampel ID 7.342 dalam waktu kurang dari 15 kali tebakan tanpa harus membaca karung satu per satu dari pintu depan?"
Materi Inti: Linear Search (O(n)) vs Binary Search (O(log n))
Pencarian data lot kopi koperasi mengandalkan dua pendekatan algoritma:
Memeriksa nomor karung kopi satu per satu dari awal. Berguna saat sampel baru masuk dan belum sempat disusun urut.
Syarat mutlak: NOMOR LOT HARUS TERURUT. Algoritma membelah tumpukan data menjadi dua. Dari 10.000 karung, target ditemukan maksimal dalam 14 langkah!
# Database ID Lot Kopi Terurut di Koperasi
lot_terurut = [101, 105, 120, 134, 150, 175, 188, 192, 205, 210]
def cari_lot_binary(arr, target_lot):
low = 0
high = len(arr) - 1
langkah = 0
while low <= high:
langkah += 1
mid = (low + high) // 2
if arr[mid] == target_lot:
print(f"[Binary Search] Lot {target_lot} DITEMUKAN di index {mid} dalam {langkah} langkah!")
return mid
elif arr[mid] < target_lot:
low = mid + 1
else:
high = mid - 1
return -1
cari_lot_binary(lot_terurut, 188)
Lab Virtual 3: Simulator Perbandingan Efisiensi Langkah
Bandingkan jumlah langkah pencarian Linear vs Binary pada 100 data terurut.
"Kapan Binary Search sama sekali TIDAK BISA digunakan? Mengapa keterurutan data menjadi syarat mutlak?"
Perangkingan Mutu Kopi: Algoritma Sorting Descending
Pertanyaan Pemantik:
"Jika Koperasi menerima puluhan karung kopi dengan skor mutu acak antara 78 hingga 91, bagaimana program komputer memindahkan karung-karung kopi kualitas juara ke posisi paling atas secara sistematis menggunakan pertukaran bertahap (Swap)?"
Materi Inti: Memahami Logika Swap & Optimasi Flag Swapped
Dalam proyek Koperasi Kopi Toraja, kita melakukan pengurutan Descending (Terbesar ke Terkecil):
- Bubble Sort: Membandingkan skor karung ke-$j$ dengan karung ke-$j+1$. Jika skor sebelah kiri lebih kecil, tukar posisinya agar skor besar bergeser ke depan.
- Optimasi Early-Stop: Jika seluruh karung kopi sudah rapi terurut sebelum putaran terakhir selesai, variabel flag
swapped = Falseakan menghentikan proses untuk menghemat daya prosesor!
# Daftar skor cupping kopi acak di Koperasi Barana'
skor_lot = [82.5, 89.0, 79.5, 91.2, 85.0, 87.8]
def urutkan_kopi_descending(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
# Tanda '<' untuk mengurutkan dari skor terbesar ke terkecil
if arr[j] < arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break
return arr
hasil_ranking = urutkan_kopi_descending(skor_lot)
print("Hasil Perangkingan Kopi Koperasi:", hasil_ranking)
Lab Virtual 4: Visualizer Animasi Pengurutan Balok
Klik "Mulai Bubble Sort" untuk mengamati pertukaran balok secara langsung!
"Jika data sejak awal sudah hampir terurut, algoritma mana yang selesai lebih cepat? Mengapa penukaran swap Python sangat praktis?"
Database Multi-Atribut Kopi Lembang Toraja
Pertanyaan Pemantik:
"Di dunia nyata, data tidak pernah sesederhana daftar angka [10, 20, 30]. Kopi Toraja memiliki nama varietas, desa asal (lembang), aroma, rasa, dan harga. Bagaimana Python menyatukan data multi-atribut ini agar bisa disortir dan dicari secara fleksibel?"
Materi Inti: List of Dictionaries & Custom Key Sorting
Dalam Python, representasi entitas dunia nyata menggunakan struktur data List of Dictionaries:
daftar_kopi = [
{"nama": "Arabika Sapan", "lembang": "Buntao", "skor": 87.5},
{"nama": "Arabika Pulu-pulu", "lembang": "Buntu Pepasan", "skor": 89.0}
]
# Mengakses atribut skor item pertama:
print(daftar_kopi[0]["skor"]) # Output: 87.5
katalog_toraja = [
{"nama": "Pa'tedong", "kategori": "Ukiran", "makna": "Kemakmuran & Tenaga", "popularitas": 95},
{"nama": "Pa'barre Allo", "kategori": "Ukiran", "makna": "Kebesaran Sang Pencipta", "popularitas": 92},
{"nama": "Arabika Sapan", "kategori": "Kopi", "makna": "Cita Rasa Tinggi", "popularitas": 88}
]
# Filter kategori Ukiran dengan popularitas > 90
hasil = [item for item in katalog_toraja if item['kategori'] == 'Ukiran' and item['popularitas'] > 90]
print(hasil)
Lab Virtual 5: Mesin Filter Multi-Atribut Toraja
Pilih kriteria untuk menyaring list of dictionaries secara instan!
| Nama Item | Kategori | Makna / Keterangan | Skor |
|---|
"Bagaimana kecakapan koding dapat berperan nyata dalam melestarikan budaya dan memajukan komoditas lokal Toraja?"
Otak AI: Agen Rekomendasi Cerdas Selera Pembeli
Pertanyaan Pemantik:
"Bagaimana aplikasi seperti Spotify merekomendasikan lagu baru yang belum pernah kamu dengar, tapi langsung kamu sukai? Apakah komputer benar-benar memiliki perasaan, atau komputer sebenarnya hanya menghitung jarak angka kemiripan (similarity distance)?"
Materi Inti: Demistifikasi AI & Rumus Jarak Euclidean
Kecerdasan Artifisial (AI) sistem rekomendasi pada dasarnya bertumpu pada 3 langkah komputasi:
- Representasi Vektor: Data dikonversi menjadi koordinat titik angka (misal: Aroma=8.5, Flavor=9.0, Aftertaste=8.7).
- Perhitungan Jarak: Menghitung selisih jarak antara titik preferensi pengguna dengan setiap item kopi menggunakan rumus Euclidean Distance: $\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 + (z_1 - z_2)^2}$.
- Perangkingan (Sorting): Mengurutkan data dari jarak terkecil (skor kemiripan tertinggi) untuk menyajikan Top-3 Rekomendasi terbaik.
import math
def hitung_kemiripan(target, item):
# Euclidean Distance antara target dan item data
jarak = math.sqrt(
(target['aroma'] - item['aroma'])**2 +
(target['flavor'] - item['flavor'])**2 +
(target['aftertaste'] - item['aftertaste'])**2
)
# Konversi jarak menjadi skor kemiripan persentase (0 - 100%)
persen = max(0, 100 - (jarak * 25))
return round(persen, 1)
Lab Virtual 6: Simulator Mesin Rekomendasi Cerdas
Atur profil rasa pembeli dan amati agen cerdas merangking kopi paling cocok.
"Apakah algoritma rekomendasi berpotensi memiliki 'bias' terhadap kelompok tertentu? Bagaimana memastikan agen AI berlaku adil?"
Penyatuan Sistem Terintegrasi "Toraja Recommender" & Uji Ketahanan
Pertanyaan Pemantik:
"Sebuah software yang hebat bukan hanya software yang berjalan benar saat data sempurna, melainkan software yang tangguh (robust) dan tidak crash saat pengguna memasukkan data yang aneh. Bagaimana program buatan timmu mengantisipasi data yang salah?"
Materi Inti: Exception Handling & Peer Code Review
Pada pertemuan puncak ini, setiap tim melakukan dua hal penting:
- Penanganan Eksepsi (try - except): Menangkap galat tak terduga (misal input huruf saat diminta angka) agar aplikasi tetap stabil.
- Gallery Walk Showcase: Mendemonstrasikan aplikasi kepada kelompok lain dan menerima masukan perbaikan (*constructive peer review*).
Lab Virtual 7: Stress-Testing Ketahanan Program AI
Uji bagaimana program Anda menangani masukan ekstrim (nilai negatif, string kosong, atau angka tidak wajar).
Selamat! Seluruh 7 Pertemuan Telah Tuntas
Anda telah menguasai struktur modular, efisiensi searching & sorting, hingga membangun agen cerdas rekomendasi data lokal Toraja!
Proyek: Toraja Smart Recommender
LEMBAR KERJA PESERTA DIDIK (LKPD)
PROYEK: SISTEM AGEN CERDAS REKOMENDASI MUTU KOPI TORAJA
Mata Pelajaran: Koding & AI | Fase E (Kelas X) | SMAS Kristen Barana' - Toraja Utara
1. ....................................................................................................................
2. ....................................................................................................................
A. Skenario Masalah Nyata
Koperasi Usaha Kopi Barana' menerima puluhan sampel biji kopi dari berbagai lembang di Toraja Utara. Koperasi membutuhkan sebuah program terstruktur berbasis Python yang dapat:
- Menyimpan data sampel kopi (Kode Lot, Nama Lembang, Varietas, Skor Aroma, Skor Rasa, Skor Aftertaste).
- Memiliki fungsi modular
hitung_skor_total()untuk menghitung Skor Mutu Kopi (Aroma 30%, Rasa 40%, Aftertaste 30%). - Memiliki modul pencarian cepat
cari_lot_binary()(Binary Search) untuk melacak karung sampel di gudang data terurut. - Memiliki modul pengurutan
urutkan_kopi()(Bubble Sort Descending) untuk merangking mutu kopi dari kualitas ekspor tertinggi ke terendah. - Memiliki modul agen cerdas
rekomendasi_kopi()(Similarity Matching) yang merekomendasikan 2 kopi paling cocok sesuai preferensi rasa pembeli internasional.
B. Dataset Sampel Kopi Toraja
| Kode | Varietas / Lembang | Aroma (30%) | Flavor (40%) | Aftertaste (30%) |
|---|---|---|---|---|
| KP-01 | Arabika Sapan (Buntao) | 8.5 | 9.0 | 8.7 |
| KP-02 | Arabika Pulu-pulu (2000 mdpl) | 9.0 | 8.8 | 9.2 |
| KP-03 | Arabika Gandangbatu (Sillanan) | 8.0 | 7.9 | 8.2 |
C. Tugas & Langkah Pengerjaan Proyek Tim
Tuliskan implementasi fungsi penghitung skor total mutu kopi dengan rumus pembobotan SCA (Aroma 30%, Rasa 40%, Aftertaste 30%):
# Tuliskan rumus perhitungan dan kembalikan nilai (return):
...........................................................................................................
pass
Lengkapi fungsi Binary Search di bawah ini untuk mencari indeks kode lot kopi pada daftar lot terurut:
low = 0
high = len(daftar_lot_terurut) - 1
while low <= high:
mid = (low + high) // 2
# Tuliskan kondisi percabangan Binary Search:
...................................................................................................
...................................................................................................
...................................................................................................
return -1 # Kembalikan -1 jika kode lot tidak ditemukan
Lengkapi implementasi Bubble Sort descending untuk merangking data kopi dari mutu tertinggi ke terendah:
n = len(daftar_kopi)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
# Tuliskan kondisi perbandingan dan penukaran (swap) elemen:
...................................................................................................
...................................................................................................
if not swapped:
break
return daftar_kopi
Rancang fungsi pencocokan jarak kemiripan (Euclidean Distance) dan kembalikan 2 kopi paling cocok:
def rekomendasi_kopi(daftar_kopi, target_aroma, target_rasa, target_after):
for item in daftar_kopi:
# 1. Hitung jarak kemiripan Euclidean Distance:
...................................................................................................
# 2. Konversikan jarak menjadi persentase skor kemiripan (0 - 100%):
...................................................................................................
# 3. Urutkan berdasarkan kemiripan tertinggi dan kembalikan 2 rekomendasi terbaik:
...........................................................................................................
pass
Jalankan program terpadu di VS Code / Google Colab dan tempelkan salinan output terminal konsol:
Guru Mata Pelajaran,
Rislyon Ripi, S.Kom.
NIP. -
Ketua Kelompok,
( .................................................... )
Panduan Asesmen Diagnostik, Formatif, & Sumatif
Mengacu pada Permendikdasmen No. 13 Tahun 2025 (8 Dimensi Profil Lulusan & Pembelajaran Mendalam)
A. Asesmen Diagnostik Awal
Kuis Cepat Apersepsi (5 Menit via Kahoot / Google Form / IFP Board)
"Apa kegunaan utama membuat fungsi dalam pemrograman dibandingkan menulis seluruh kode secara memanjang (monolitik)?"
"Jika terdapat 1.000 data acak, berapa perkiraan perbandingan langkah mencari data antara memeriksa satu per satu vs data yang sudah terurut rapi?"
B. Asesmen Formatif (Ceklis Observasi Selama Pembelajaran 3M)
Instrumen Pemantauan Perkembangan Berkesadaran (Mindful), Bermakna (Meaningful), & Menggembirakan (Joyful)
Peserta didik aktif bergantian peran antara Driver (mengetik kode implementasi) dan Navigator (meneliti logika, algoritma, serta pencegahan bug).
Peserta didik membaca dan menafsirkan pesan kesalahan (error traceback) secara mandiri serta melakukan dry-run variabel sebelum meminta bantuan guru.
Mampu memvalidasi kebenaran hasil pengurutan data serta menjelaskan batasan asumsi algoritma rekomendasi (misal: potensi bias terhadap komoditas tertentu).
C. Asesmen Sumatif: Rubrik Analitik Proyek Prototipe AI (4 Skala)
Persis Sesuai Dokumen Resmi Word: Menilai TP 1, TP 2 (Searching & Sorting), TP 3, serta Dimensi Profil Lulusan
| Kriteria Penilaian | Perlu Bimbingan (1) | Cukup (2) | Baik (3) | Sangat Baik (4) |
|---|---|---|---|---|
| Struktur Modular & Dekomposisi (TP 1) | Program masih bersifat monolitik/panjang tanpa fungsi, atau fungsi tidak memiliki parameter dan return value yang tepat. | Program sudah menggunakan fungsi dasar, namun pemisahan tanggung jawab logika antar-fungsi masih tumpang tindih. | Program terdekomposisi dengan baik ke dalam beberapa fungsi modular mandiri dengan parameter dan return yang tepat. | Arsitektur modular sangat rapi, reusable, bersih (clean code), menerapkan variable scoping sempurna, dan minim redundansi. |
| Implementasi Searching & Sorting (TP 2) | Mengalami kesulitan menuliskan algoritma sorting/searching secara mandiri; perulangan logika menghasilkan galat tak berhingga (infinite loop). | Algoritma sorting dan searching dapat berjalan untuk data sederhana, namun gagal saat diterapkan pada list of dictionary multi-atribut. | Mampu mengimplementasikan algoritma Binary Search dan Bubble Sort dengan tepat pada struktur data multidimensi kontekstual lokal. | Mampu memodifikasi dan mengoptimasi algoritma (early-stop flag) serta menjelaskan perbandingan efisiensi waktu komputasi secara mendalam. |
| Logika Agen Cerdas Rekomendasi (TP 3) | Sistem belum mampu memberikan rekomendasi berbasis data; pencocokan masih berupa percabangan statis (hardcoded if-else). | Logika rekomendasi bekerja dengan aturan sederhana, tetapi perankingan hasil kemiripan belum akurat. | Berhasil mengintegrasikan fungsi modular, sorting, dan similarity score untuk menghasilkan rekomendasi berbasis data kontekstual yang valid. | Agen cerdas mampu menghitung metrik jarak kemiripan terbobot, menangani galat input (exception handling), dan memberi rasional rekomendasi. |
| Penalaran Kritis & Kolaborasi (Profil Lulusan) | Pasif dalam kerja tim; tidak mampu menjelaskan alur kerja baris kode yang dibuatnya sendiri. | Cukup aktif dalam tim, namun kesulitan saat diminta melakukan trace code (melacak nilai variabel per langkah eksekusi). | Mampu berkolaborasi harmonis dalam pair programming dan menjelaskan alur algoritma dengan lancar saat ditanya guru/rekan sejawat. | Menunjukkan penalaran kritis tajam dalam mengevaluasi kelemahan/bias algoritma, mendokumentasikan kode secara profesional, dan memimpin kolaborasi tim. |
Lembar Refleksi Diri Siswa (Metakognisi 3-2-1)
Dekomposisi modular Python, efisiensi Binary vs Linear Search, dan formula matematis kemiripan AI.
Melacak indeks nested loop pada sorting dan menghitung rumus Euclidean Distance.
Mengembangkan sistem katalog rekomendasi motif ukiran Passura' atau pemetaan mutu kopi petani Toraja berbasis Python.
