ATS Praktikum
Pemrograman Berbasis Komputer — MK224
Mata Kuliah: Pemrograman Berbasis Komputer Program Studi Teknik Mekatronika Genap 2025/2026
Pemetaan Tujuan Pembelajaran (TP)
| Kode TP | Tujuan Pembelajaran |
|---|---|
| TP-1 | Memahami dan menggunakan pemrograman berbasis Visual (Visual C#) — OOP, Class, IDE, Console. |
| TP-2 | Mengimplementasikan pseudo code ke dalam program. |
| TP-3 | Mengimplementasikan operasi aritmatika. |
| TP-4 | Mengimplementasikan operasi perbandingan (percabangan). |
| TP-5 | Mengimplementasikan operasi perulangan (loop). |
| TP-6 | Mengimplementasikan array ke dalam program. |
| TP-7 | Membangun aplikasi yang dapat terkoneksi dengan perangkat lain melalui serial port. |
| TP-8 | Mengimplementasikan file atau basis data sebagai penyimpan data. |
Petunjuk Pengerjaan
- Berdoalah sebelum mengerjakan soal. Tuliskan identitas Anda pada lembar yang tersedia.
- Untuk soal praktikum, kerjakan to-do list secara berurutan dan tuliskan kode di tempat yang disediakan (atau di lembar tambahan).
- Dilarang menggunakan AI, berkomunikasi dengan peserta lain. Pelanggaran berakibat nilai E.
- Bekerjalah dengan tenang, teliti, dan jujur. Selamat mengerjakan.
- Setiap Mahaiswa mendapatkan 3 Case Studi berdasarkan NIM terakhir
- Sertakan screenshoot hasil case study tersebut dan jelaskan bagaimana hasilnya bekerja, dan apa saja yg di tambahkan agar potongan kode tersebut berhasil di jalankan
- Source Code di copy bukan di screenshoot saat pengumpulan.
SOAL STUDI KASUS - PRAKTIKUM
Lengkapi potongan kode pada bagian yang ditandai
// TODOatau___dan kerjakan to-do list secara berurutan.
Praktikum 1 [TP-1 & TP-3] (8 poin)
KASUS: Anda diminta membuat aplikasi konsol untuk menghitung luas dan keliling persegi panjang menggunakan konsep OOP. Lengkapi kode di bawah ini.
Potongan Kode (lengkapi bagian // TODO)
using System;
namespace LatihanOOP
{
class PersegiPanjang
{
// TODO 1: Deklarasikan dua atribut private bertipe int: panjang dan lebar
____________________
____________________
// TODO 2: Buat konstruktor default yang menginisialisasi panjang=0 dan lebar=0
public PersegiPanjang() {
____________________
____________________
}
// TODO 3: Buat method setUkuran(int p, int l) untuk mengisi atribut
____________________
{
____________________
____________________
}
// TODO 4: Buat method hitungLuas() yang me-return nilai luas (int)
____________________
{
____________________
}
// TODO 5: Buat method hitungKeliling() yang me-return nilai keliling (int)
public int hitungKeliling() {
return ____________________;
}
}
class Program
{
static void Main(string[] args)
{
// TODO 6: Buat objek dari class PersegiPanjang dan beri nama 'kotak'
____________________
Console.Write("Masukkan panjang: ");
int p = Convert.ToInt32(Console.ReadLine());
Console.Write("Masukkan lebar: ");
int l = Convert.ToInt32(Console.ReadLine());
// TODO 7: Panggil setUkuran dengan parameter p dan l
____________________
Console.WriteLine("Luas = " + kotak.hitungLuas());
Console.WriteLine("Keliling = " + kotak.hitungKeliling());
Console.ReadLine();
}
}
}
To-Do List
- Buka Visual C# / Visual Studio, buat project baru bertipe Console Application.
- Lengkapi atribut
privatepanjangdanlebarpada classPersegiPanjang. - Lengkapi konstruktor default agar nilai awal kedua atribut adalah 0.
- Lengkapi method
setUkuran(int p, int l)untuk meng-assign nilai ke atribut. - Lengkapi method
hitungLuas()(panjang × lebar) danhitungKeliling()(2 × (panjang+lebar)). - Pada
Main, instansiasi objekkotakdan panggilsetUkurandengan input dari user. - Jalankan program (F5), uji dengan input p=5 dan l=3 — pastikan luas=15, keliling=16.
Praktikum 2 [TP-2 & TP-4] (8 poin)
KASUS: Buat aplikasi konsol yang menampilkan semua bilangan prima dari 2 sampai N (N diinput user). Lengkapi kode menggunakan struktur perulangan.
Potongan Kode (lengkapi bagian // TODO)
using System;
namespace BilanganPrima
{
class Program
{
// TODO 1: Buat method statis isPrima(int n) yang me-return bool
static bool isPrima(int n)
{
if (n < 2) return false;
// TODO 2: Lakukan perulangan untuk mengecek pembagi dari 2 sampai n-1
// (atau optimasi: sampai akar n). Jika ada yang habis dibagi → bukan prima.
for (____________________; ____________________; ____________________)
{
if (____________________)
{
return ____________________;
}
}
return ____________________;
}
static void Main(string[] args)
{
Console.Write("Masukkan batas N: ");
int N = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Bilangan prima dari 2 sampai " + N + ":");
// TODO 3: Lakukan perulangan dari i=2 sampai i<=N,
// lalu cetak i jika isPrima(i) bernilai true
for (____________________; ____________________; ____________________)
{
if (____________________)
{
Console.Write(____________________ + " ");
}
}
Console.ReadLine();
}
}
}
To-Do List
- Definisikan method
isPrima(int n)yang me-return tipebool. - Tambahkan validasi awal: jika
n < 2, kembalikanfalse(bukan prima). - Buat perulangan
fordarii=2hinggai<n(ataui*i<=nuntuk optimasi). Jikan%i==0makareturn false. - Setelah loop selesai,
return true(artinya tidak ditemukan pembagi). - Pada
Main, ambil input N dari user dan loop dari 2 sampai N. Cetak setiap bilangan yangisPrima-nyatrue. - Uji dengan N=20 → output harus: 2 3 5 7 11 13 17 19.
Praktikum 3 [TP-5] (8 poin)
KASUS: Buat aplikasi WinForm untuk konversi suhu dari Celcius ke Fahrenheit atau Reamur. User memilih satuan output via RadioButton, lalu menekan tombol "Konversi". Lengkapi event handler tombol berikut.
Properti Komponen yang Sudah Tersedia
- TextBox:
txtInput(input suhu Celcius) - RadioButton:
rbFahrenheit,rbReamur(pilihan output) - Label:
lblHasil(untuk menampilkan hasil) - Button:
btnKonversi
Potongan Kode (lengkapi bagian // TODO)
private void btnKonversi_Click(object sender, EventArgs e)
{
try
{
// TODO 1: Validasi jika txtInput.Text kosong, tampilkan MessageBox warning lalu return
if (____________________)
{
MessageBox.Show("Input suhu tidak boleh kosong!", "Peringatan",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// TODO 2: Konversi nilai dari txtInput.Text menjadi tipe double
double celcius = ____________________;
double hasil = 0;
string satuan = "";
// TODO 3: Lengkapi pengecekan radioButton menggunakan property Checked
if (____________________)
{
// Rumus: F = (C * 9/5) + 32
hasil = ____________________;
satuan = "°F";
}
else if (____________________)
{
// Rumus: R = C * 4/5
hasil = ____________________;
satuan = "°R";
}
else
{
MessageBox.Show("Pilih satuan output terlebih dahulu!");
return;
}
// TODO 4: Tampilkan hasil di lblHasil dengan format 2 angka desimal
lblHasil.Text = ____________________;
}
catch (Exception ex)
{
MessageBox.Show("Terjadi kesalahan: " + ex.Message);
}
}
To-Do List
- Buat project Windows Forms Application baru, susun komponen: 1 TextBox (
txtInput), 2 RadioButton (rbFahrenheit,rbReamur) di dalam GroupBox, 1 Label (lblHasil), dan 1 Button (btnKonversi). - Klik ganda pada
btnKonversiuntuk membuka event handler-nya. - Lengkapi validasi input kosong menggunakan kondisi
string.IsNullOrEmptyatau perbandingan dengan"". - Konversi input ke
doublemenggunakanConvert.ToDouble. - Lakukan pengecekan RadioButton via property
.Checkeddan terapkan rumus konversi yang sesuai. - Format hasil dengan
ToString("F2")agar tampil 2 angka desimal. - Uji dengan input 100 → Fahrenheit harus 212.00 °F, dan input 100 → Reamur harus 80.00 °R.
Praktikum 4 [TP-6] (8 poin)
KASUS: Mengacu pada konsep array multidimensi, buat aplikasi WinForm yang menyimpan data mahasiswa (NIM, Nama, Jenis Kelamin, Prodi) ke dalam array, lalu menampilkannya pada ListView ketika tombol "Proses" diklik. Lengkapi kode berikut.
Properti Komponen yang Sudah Tersedia
- TextBox:
txtNim,txtNama - ComboBox:
cbKelamin,cbProdi - Button:
bProses - ListView:
listView1(sudah memiliki kolom NIM, NAMA, JENIS KELAMIN, PRODI)
Potongan Kode (lengkapi bagian // TODO)
public partial class FrmArrayMultiDimensi : Form
{
// TODO 1: Deklarasikan array 2 dimensi string untuk 10 mahasiswa, 4 atribut
string[,] dataMhs = new string[____, ____];
int jumlahData = 0;
public FrmArrayMultiDimensi()
{
InitializeComponent();
}
private void bProses_Click(object sender, EventArgs e)
{
// TODO 2: Validasi jika jumlahData sudah mencapai 10, tampilkan peringatan & return
if (____________________)
{
MessageBox.Show("Data sudah penuh (maksimal 10).");
return;
}
// TODO 3: Simpan data dari komponen input ke array dataMhs[jumlahData, ...]
dataMhs[jumlahData, 0] = ____________________; // NIM
dataMhs[jumlahData, 1] = ____________________; // NAMA
dataMhs[jumlahData, 2] = ____________________; // JENIS KELAMIN
dataMhs[jumlahData, 3] = ____________________; // PRODI
// TODO 4: Tambahkan baris baru ke ListView berdasarkan data yang baru disimpan
ListViewItem item = new ListViewItem(____________________);
item.SubItems.Add(____________________);
item.SubItems.Add(____________________);
item.SubItems.Add(____________________);
listView1.Items.Add(item);
// TODO 5: Tambahkan jumlahData dan kosongkan komponen input
____________________;
txtNim.Clear();
txtNama.Clear();
cbKelamin.SelectedIndex = -1;
cbProdi.SelectedIndex = -1;
}
}
To-Do List
- Buat WinForm baru, susun komponen sesuai daftar di atas. Set
ListView.View = Detailsdan tambahkan 4 kolom. - Pada constructor / Form_Load, isi
cbKelamindengan{LAKI-LAKI, PEREMPUAN}dancbProdidengan minimal{SISTEM INFORMASI, MEKATRONIKA}. - Deklarasikan array 2 dimensi
string[10, 4]dan variabel counterjumlahData=0. - Pada event click
bProses, validasi kapasitas array agar tidak melebihi 10. - Simpan keempat input ke array (NIM, NAMA, gunakan
.Textuntuk TextBox dan.Text/.SelectedItem.ToString()untuk ComboBox). - Buat
ListViewItemdari data NIM, lalu tambahkanSubItemsuntuk Nama, Jenis Kelamin, dan Prodi. - Increment
jumlahDatadan reset semua komponen input agar siap menerima data berikutnya. - Uji dengan menyimpan 3 data mahasiswa berbeda dan pastikan ListView menampilkan ketiganya.
Praktikum 5 [TP-7 & TP-8] (8 poin)
KASUS: Buat aplikasi "Buku Catatan Sederhana" untuk mengelola catatan harian dengan penyimpanan ke file teks. Aplikasi memiliki 3 fungsi utama:
- Simpan: menambahkan catatan baru ke file
catatan.txt(mode append, dengan timestamp) - Muat: membaca seluruh isi file dan menampilkannya ke RichTextBox
- Hapus: menghapus seluruh isi file setelah konfirmasi Lengkapi event handler berikut.
Properti Komponen yang Sudah Tersedia
- TextBox:
txtCatatan(input catatan baru, multiline) - Button:
btnSimpan,btnMuat,btnHapus - RichTextBox:
rtbIsi(untuk menampilkan isi file, ReadOnly)
Potongan Kode (lengkapi bagian // TODO)
using System;
using System.IO;
using System.Windows.Forms;
public partial class FrmCatatan : Form
{
// TODO 1: Deklarasikan konstanta string namaFile = "catatan.txt"
____________________
public FrmCatatan()
{
InitializeComponent();
}
private void btnSimpan_Click(object sender, EventArgs e)
{
// TODO 2: Validasi jika txtCatatan kosong/whitespace, tampilkan peringatan & return
if (____________________)
{
MessageBox.Show("Catatan tidak boleh kosong!", "Peringatan",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try
{
// TODO 3: Buka StreamWriter dengan mode append=true ke file namaFile
using (____________________)
{
// TODO 4: Tulis baris dengan format "[yyyy-MM-dd HH:mm:ss] isi_catatan"
sw.WriteLine(____________________);
}
MessageBox.Show("Catatan berhasil disimpan.");
txtCatatan.Clear();
}
catch (Exception ex)
{
MessageBox.Show("Gagal menyimpan: " + ex.Message);
}
}
private void btnMuat_Click(object sender, EventArgs e)
{
// TODO 5: Cek apakah file BELUM ada menggunakan File.Exists, jika belum → tampilkan info & return
if (____________________)
{
MessageBox.Show("File catatan belum ada. Simpan catatan terlebih dahulu.");
return;
}
try
{
// TODO 6: Baca seluruh isi file menggunakan StreamReader.ReadToEnd(), tampilkan ke rtbIsi
using (____________________)
{
rtbIsi.Text = ____________________;
}
}
catch (Exception ex)
{
MessageBox.Show("Gagal memuat: " + ex.Message);
}
}
private void btnHapus_Click(object sender, EventArgs e)
{
// TODO 7: Tampilkan konfirmasi Yes/No, simpan hasilnya ke variabel
DialogResult hasil = MessageBox.Show("Yakin ingin menghapus semua catatan?",
"Konfirmasi Hapus", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
// TODO 8: Jika user memilih Yes, hapus file (jika ada) lalu kosongkan rtbIsi
if (____________________)
{
if (File.Exists(namaFile))
{
____________________;
}
____________________;
MessageBox.Show("Semua catatan telah dihapus.");
}
}
}
To-Do List
- Buat project Windows Forms Application baru dengan judul "Buku Catatan Sederhana".
- Susun komponen sesuai daftar di atas. Set property
txtCatatan.Multiline = truedanrtbIsi.ReadOnly = true. - Deklarasikan konstanta
const string namaFile = "catatan.txt";di level class (bukan di dalam method). - Pada
btnSimpan_Click, validasi input denganstring.IsNullOrWhiteSpace(txtCatatan.Text)agar spasi kosong juga tertangkap. - Gunakan
new StreamWriter(namaFile, true)— parameter keduatrueberarti append, sehingga catatan lama tidak tertimpa. - Format setiap baris dengan timestamp:
"[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] " + txtCatatan.Text. - Pada
btnMuat_Click, gunakan!File.Exists(namaFile)untuk mengecek apakah file BELUM ada, lalu baca dengansr.ReadToEnd(). - Pada
btnHapus_Click, bandingkanhasil == DialogResult.Yessebelum memanggilFile.Delete(namaFile)danrtbIsi.Clear(). - Uji skenario: (a) simpan 3 catatan berbeda → klik Muat, ketiganya muncul dengan timestamp berbeda; (b) klik Hapus → konfirmasi Yes → file hilang dan
rtbIsikosong; (c) klik Muat setelah Hapus → muncul peringatan file belum ada. Uji menggunakan Arduino atau aplikasi simulator (mis. Virtual Serial Port). Pastikan setiap baris yang masuk muncul di RichTextBox dan tertulis dilog.txt.
Praktikum 6 [TP-1 & TP-4] (8 poin)
KASUS: Anda diminta membuat aplikasi konsol untuk mengelola data nilai akhir mahasiswa menggunakan konsep Encapsulation (Enkapsulasi/Properties) dalam OOP serta percabangan untuk menentukan Grade huruf (A, B, C, D, atau E). Lengkapi potongan kode di bawah ini.
Potongan Kode (lengkapi bagian // TODO)
using System;
namespace ManajemenNilai
{
class Mahasiswa
{
// TODO 1: Deklarasikan atribut private bertipe string untuk nim, nama dan double untuk nilai
private string nim;
private string nama;
____________________
// TODO 2: Buat Property (getter & setter) untuk mengenkapsulasi atribut nilai
public double Nilai
{
get { return ____________________; }
set { ____________________ = value; }
}
// TODO 3: Buat konstruktor berparameter untuk menginisialisasi nim dan nama
public Mahasiswa(string nim, string nama)
{
this.nim = ____________________;
this.nama = ____________________;
}
// TODO 4: Buat method GetGrade() yang me-return string berdasarkan ketentuan nilai
public string GetGrade()
{
if (Nilai >= 80) return "A";
else if (____________________) return "B"; // Rentang nilai 70 sampai < 80
else if (____________________) return "C"; // Rentang nilai 60 sampai < 70
else if (Nilai >= 50) return "D"; // Rentang nilai 50 sampai < 60
else return "E";
}
public void TampilkanData()
{
Console.WriteLine($"NIM : {nim}");
Console.WriteLine($"Nama : {nama}");
Console.WriteLine($"Nilai : {Nilai}");
Console.WriteLine($"Grade : {GetGrade()}");
}
}
class Program
{
static void Main(string[] args)
{
// TODO 5: Instansiasi objek Mahasiswa dengan nama 'mhs1', berikan argumen NIM dan Nama Anda
Mahasiswa mhs1 = new ____________________;
Console.Write("Masukkan Nilai Akhir: ");
double inputNilai = Convert.ToDouble(Console.ReadLine());
// TODO 6: Assign variabel inputNilai ke dalam objek mhs1 menggunakan Property Nilai
mhs1.____________________ = inputNilai;
Console.WriteLine("\n=== HASIL EVALUASI ===");
// TODO 7: Panggil method TampilkanData() dari objek mhs1
____________________;
Console.ReadLine();
}
}
}
To-Do List
- Buka Visual C# / Visual Studio, buat project baru bertipe Console Application.
- Lengkapi deklarasi atribut private double nilai pada class Mahasiswa.
- Lengkapi sintaks getter (return nilai;) dan setter (nilai = value;) pada Property Nilai.
- Lengkapi konstruktor berparameter agar this.nim dan this.nama mendapatkan nilai dari parameter konstruktor.
- Lengkapi logika percabangan if-else pada method GetGrade() untuk batas bawah Grade B (Nilai >= 70) dan Grade C (Nilai >= 60).
- Pada bagian Main, buat instance objek mhs1 dan isi parameter konstruktor dengan string NIM dan Nama. Set nilai dari input pengguna melalui Property, kemudian panggil TampilkanData().
- Jalankan program (F5), uji dengan input nilai 75.5 — pastikan Grade yang tampil adalah B.
Rekap Bobot Penilaian
| Bagian | Jumlah Soal | Bobot/Soal | Total Bobot |
|---|---|---|---|
| A. Pilihan Ganda | 15 | 2 poin | 30 poin |
| B. Esai | 5 | 6 poin | 30 poin |
| C. Praktikum (Studi Kasus) | 5 | 8 poin | 40 poin |
| TOTAL | 25 | — | 100 poin |
Pemetaan Soal terhadap TP
| Kode TP | Soal yang Mengukur |
|---|---|
| TP-1 | PG 1, 2, 3 | Esai 1 | Praktikum 1 |
| TP-2 | PG 4, 5 | Esai 2 | Praktikum 2 |
| TP-3 | PG 6, 7 | Esai 2 | Praktikum 1 |
| TP-4 | PG 8, 9 | Esai 2 | Praktikum 2 |
| TP-5 | PG 10, 11 | Esai 3 | Praktikum 3 |
| TP-6 | PG 12, 13 | Esai 4 | Praktikum 4 |
| TP-7 | PG 14 | Esai 5 | Praktikum 5 |
| TP-8 | PG 15 | Esai 5 | Praktikum 5 |
— Selamat Mengerjakan —