Dalam dunia pemrograman, menguasai logika dasar adalah fondasi sebelum membangun aplikasi yang kompleks. TypeScript, sebagai superset modern dari JavaScript, menyediakan sistem tipe data yang kuat untuk melatih logika ini dengan lebih aman dan terstruktur. Salah satu cara paling efektif untuk mengasah algoritma adalah melalui latihan terapan.
Artikel ini akan membedah tiga latihan algoritma klasik yang sering dijumpai dalam tugas perkuliahan: membuat pola segitiga, menghasilkan deret aritmatika, dan mencari bilangan prima. Sebagai studi kasus yang menarik, kita akan menggunakan Nomor Induk Mahasiswa (NIM) sebagai data input dinamis untuk membuat latihan ini lebih personal dan praktis.
Studi Kasus 1: Pola Segitiga (Nested Loop)
Latihan pertama adalah tantangan klasik untuk memahami cara kerja perulangan bersarang (nested loop).
Soal: Ambil digit terakhir contoh NIM sebagai tinggi segitiga. Buat program TypeScript untuk mencetak segitiga angka dengan pola:
1
1 2
1 2 3
...dan seterusnya
Konsep Kunci: Kita akan menggunakan dua loop for. Loop luar (dengan variabel i) bertugas untuk mengontrol baris (turun ke bawah). Loop dalam (dengan variabel j) bertugas untuk mencetak angka di setiap baris (ke samping).
Kode Solusi:
/**
* Fungsi untuk mencetak pola segitiga berdasarkan NIM.
*/
function cetakPolaSegitiga(nim: string) {
// Ambil digit terakhir NIM dan ubah jadi angka
const digitTerakhir = nim.slice(-1);
const tinggiSegitiga = parseInt(digitTerakhir);
console.log(`--- Soal 1: Pola Segitiga (Tinggi: ${tinggiSegitiga}) ---`);
// Loop luar untuk baris (i)
for (let i = 1; i <= tinggiSegitiga; i++) {
let baris = ""; // Siapkan string kosong untuk setiap baris baru
// Loop dalam untuk angka (j) di dalam baris
for (let j = 1; j <= i; j++) {
baris += j + " "; // Tambahkan angka 'j' dan spasi
}
console.log(baris.trim()); // Cetak baris yang sudah jadi
}
}
Studi Kasus 2: Deret Aritmatika (Loop & Aritmatika)
Latihan ini menguji kemampuan kita dalam mengambil data, melakukan operasi matematika sederhana, dan mengimplementasikan perulangan tunggal.
Soal: Ambil 2 digit terakhir NIM sebagai angka awal. Ambil digit ke-3 dari belakang, tambahkan 1, dan jadikan "beda" (step). Buat program TypeScript untuk mencetak 10 angka pertama dari deret tersebut.
Konsep Kunci: Kita akan mengekstrak beberapa bagian string NIM, mengonversinya menjadi angka, dan menggunakan satu loop for untuk menghitung 10 elemen berikutnya dalam deret.
Kode Solusi:
/**
* Fungsi untuk mencetak deret aritmatika berdasarkan NIM.
*/
function cetakDeretAritmatika(nim: string) {
// Ambil 2 digit terakhir NIM sebagai angka awal
const duaDigit = nim.slice(-2);
const angkaAwal = parseInt(duaDigit);
// Ambil digit ke-3 dari belakang
const digitKetiga = nim.slice(-3, -2);
const beda = parseInt(digitKetiga) + 1; // Jadikan 'beda' (step)
console.log(`\n--- Soal 2: Deret Aritmatika ---`);
console.log(`Angka Awal: ${angkaAwal}, Beda: ${beda}`);
let deret: number[] = [];
let nilaiSekarang = angkaAwal;
const jumlahDeret = 10; // Kita ingin 10 angka
for (let i = 0; i < jumlahDeret; i++) {
deret.push(nilaiSekarang); // Masukkan nilai saat ini ke array
nilaiSekarang += beda; // Hitung nilai berikutnya
}
console.log(`Output (10 angka pertama): ${deret.join(', ')}`);
}
Studi Kasus 3: Bilangan Prima (Algoritma & Fungsi)
Latihan ketiga adalah yang paling menantang secara algoritma. Kita perlu merancang sebuah fungsi untuk menguji apakah suatu bilangan adalah bilangan prima.
Soal: Ambil 2 digit terakhir NIM, tambahkan 10, dan jadikan "batas akhir" pencarian. Tampilkan semua bilangan prima dari 1 sampai batas tersebut.
Konsep Kunci: Cara terbaik adalah membuat fungsi bantuan (helper function) isPrima(num). Fungsi ini akan mengembalikan true jika num prima dan false jika tidak. Kemudian, kita tinggal melakukan loop dari 1 sampai "batas akhir" dan memanggil fungsi tersebut.
Kode Solusi:
/**
* Fungsi bantuan untuk mengecek apakah sebuah angka adalah prima.
*/
function isPrima(num: number): boolean {
if (num <= 1) return false; // 1 dan di bawahnya bukan prima
// Cek faktor dari 2 sampai akar kuadrat dari num
for (let i = 2; i * i <= num; i++) {
if (num % i === 0) {
return false; // Ditemukan faktor, bukan prima
}
}
return true; // Tidak ditemukan faktor, ini prima
}
/**
* Fungsi untuk mencari dan mencetak bilangan prima berdasarkan NIM.
*/
function cetakBilanganPrima(nim: string) {
// Ambil 2 digit terakhir NIM
const duaDigit = nim.slice(-2);
const batasAkhir = parseInt(duaDigit) + 10;
console.log(`\n--- Soal 3: Bilangan Prima ---`);
console.log(`Batas Akhir Pencarian: ${batasAkhir}`);
let hasilPrima: number[] = [];
// Loop dari 1 sampai batasAkhir
for (let i = 1; i <= batasAkhir; i++) {
if (isPrima(i)) {
hasilPrima.push(i);
}
}
console.log(`Output (Bilangan prima s/d ${batasAkhir}): ${hasilPrima.join(', ')}`);
}
Menjalankan Semua Program
Sekarang, kita bisa menggabungkan semua fungsi tersebut dan menjalankannya dengan satu NIM:
// --- Ganti NIM di bawah ini dengan NIM ---
const nimMahasiswa = "330711166"; // (Contoh NIM)
// Menjalankan semua fungsi
cetakPolaSegitiga(nimMahasiswa);
cetakDeretAritmatika(nimMahasiswa);
cetakBilanganPrima(nimMahasiswa);
Dari tiga studi kasus di atas, kita tidak hanya belajar sintaks TypeScript, tetapi juga cara mengaplikasikannya untuk memecahkan masalah logika yang konkret. Kita telah mempraktikkan nested loop untuk visualisasi data, single loop untuk generasi deret, dan perancangan algoritma untuk seleksi bilangan prima.
Latihan seperti ini adalah inti dari problem-solving dalam pemrograman. Teruslah berlatih, coba modifikasi variabelnya, dan tantang diri Anda dengan studi kasus lainnya. Selamat ngoding! 🚀