diff --git a/examples/content/dasar/composite_test.md b/examples/content/dasar/composite_test.md new file mode 100644 index 0000000..5f85678 --- /dev/null +++ b/examples/content/dasar/composite_test.md @@ -0,0 +1,108 @@ +---LESSON_INFO--- +**Learning Objectives:** +- Memahami konsep materi komposit di Elemes (latihan koding + kuis) +- Menyelesaikan latihan program C/Python dan kuis evaluasi pemahaman +**Prerequisites:** +- variabel +---END_LESSON_INFO--- + +# Uji Coba Komposit (Latihan dan Kuis) + +Pelajaran ini merupakan contoh materi **komposit**, yaitu materi pembelajaran yang menggabungkan: +1. **Latihan Pemrograman (Exercise):** Menulis kode program langsung di editor dan memverifikasi keluarannya. +2. **Kuis Evaluasi (Quiz):** Menjawab pertanyaan pilihan ganda terkait materi. + +### Perhitungan Nilai Komposit +Nilai akhir siswa dihitung dari kombinasi kedua komponen: +- Bobot Latihan: 70% +- Bobot Kuis: 30% +- Ambang Tuntas (*Done*): $\ge$ 75% + +---EXERCISE--- +### Latihan: Pengecekan Angka Positif +Buatlah program yang memeriksa nilai variabel `angka`. Jika `angka > 0`, cetak: +``` +Positif +``` + +---INITIAL_CODE--- +#include + +int main() { + int angka = 10; + // Tulis logika percabangan if di bawah ini: + if (angka > 0) { + printf("Positif\n"); + } + return 0; +} +---END_INITIAL_CODE--- + +---EXPECTED_OUTPUT--- +Positif +---END_EXPECTED_OUTPUT--- + +---INITIAL_PYTHON--- +angka = 10 +# Tulis logika percabangan if di bawah ini: +if angka > 0: + print("Positif") +---END_INITIAL_PYTHON--- + +---EXPECTED_OUTPUT_PYTHON--- +Positif +---END_EXPECTED_OUTPUT_PYTHON--- + +---SOLUTION_CODE--- +#include + +int main() { + int angka = 10; + if (angka > 0) { + printf("Positif\n"); + } + return 0; +} +---END_SOLUTION_CODE--- + +---SOLUTION_PYTHON--- +angka = 10 +if angka > 0: + print("Positif") +---END_SOLUTION_PYTHON--- + +---KEY_TEXT--- +if +printf +print +---END_KEY_TEXT--- + +---QUIZ_FLASHCARD--- +### Manakah sintaks penulisan kondisi `if` yang benar dalam bahasa C? +- [x] `if (kondisi) { ... }` +- [] `if kondisi then { ... }` +- [] `if [kondisi] { ... }` +- [] `if {kondisi} then { ... }` +> Penjelasan: Dalam bahasa C, ekspresi logika kondisi pada `if` wajib berada di dalam tanda kurung biasa `( )`. + +### Apa keluaran dari kode berikut jika `x = 5`? +```c +if (x > 10) { + printf("Besar\n"); +} else { + printf("Kecil\n"); +} +``` +- [] Besar +- [x] Kecil +- [] Error sintaks +- [] Tidak ada keluaran +> Penjelasan: Karena `5 > 10` bernilai salah (false), maka blok `else` yang akan dieksekusi, menghasilkan output "Kecil". + +### Berapa bobot penilaian komponen latihan koding dalam penentuan nilai komposit standar Elemes? +- [] 30% +- [] 50% +- [x] 70% +- [] 100% +> Penjelasan: Secara default pada konfigurasi Elemes, komponen latihan koding memiliki bobot 70% dan kuis memiliki bobot 30%. +---END_QUIZ_FLASHCARD--- diff --git a/examples/content/dasar/sub-home.md b/examples/content/dasar/sub-home.md index c56be2d..9399b5e 100644 --- a/examples/content/dasar/sub-home.md +++ b/examples/content/dasar/sub-home.md @@ -9,5 +9,6 @@ Materi fundamental untuk memulai belajar pemrograman C. 4. [Uji Coba Kuis](lesson/quiz_test.md) 5. [Uji Coba LaTeX](lesson/latex_test.md) 6. [Uji Coba Slide](lesson/test_slides.md) +7. [Uji Coba Komposit](lesson/composite_test.md) diff --git a/frontend/src/routes/teacher/progress/+page.svelte b/frontend/src/routes/teacher/progress/+page.svelte index 8ab2095..64ed021 100644 --- a/frontend/src/routes/teacher/progress/+page.svelte +++ b/frontend/src/routes/teacher/progress/+page.svelte @@ -56,7 +56,9 @@ loading = true; try { - const res = await fetch(`/api/progress-report.json?token=${encodeURIComponent($authToken)}`); + const res = await fetch(`/api/progress-report.json?token=${encodeURIComponent($authToken)}&_t=${Date.now()}`, { + cache: 'no-store' + }); const data = await res.json(); students = data.students ?? []; lessons = data.lessons ?? []; @@ -286,6 +288,7 @@ {#each lessons as lesson} {@const key = lesson.filename.replace('.md', '')} + {@const status = student[key]} {@const composite = student[key + '_composite']} {@const exercisePassed = student[key + '_exercise_passed']} {@const quizScore = student[key + '_quiz_score']} @@ -305,6 +308,10 @@ {#if quizScore} {quizScore} {/if} + {:else if status === 'completed'} + ✓ + {:else if status && status !== 'not_started'} + {status} {:else} — {/if} @@ -333,7 +340,7 @@ {/if} {/if} - {#if composite !== null && composite !== undefined} + {#if (composite !== null && composite !== undefined) || (status && status !== 'not_started')}