Dunia teknologi informasi terus berkembang pesat, dan dasar-dasar pemrograman menjadi pondasi penting bagi para siswa SMK yang ingin berkontribusi dalam ekosistem digital ini. Di semester 2 kelas 10, materi pemrograman dasar biasanya semakin mendalam, memperkenalkan konsep-konsep yang lebih kompleks namun tetap fundamental. Artikel ini akan menyajikan berbagai contoh soal pemrograman dasar yang relevan untuk siswa SMK kelas 10 semester 2, beserta pembahasan yang komprehensif. Tujuannya adalah untuk membantu siswa memahami materi dengan lebih baik, mengasah kemampuan logika, dan mempersiapkan diri menghadapi ujian atau proyek di masa depan.
Pendahuluan: Mengapa Pemrograman Itu Penting?
Pemrograman bukan sekadar menulis kode; ini adalah tentang memecahkan masalah, berpikir secara logis, dan membangun solusi kreatif. Bagi siswa SMK, menguasai dasar-dasar pemrograman membuka pintu ke berbagai peluang karir di bidang pengembangan perangkat lunak, analisis data, keamanan siber, dan banyak lagi. Semester 2 biasanya mencakup topik-topik seperti:

- Struktur Kontrol Lanjutan: Perulangan (looping) yang lebih kompleks seperti
whiledando-while, serta penggunaanbreakdancontinue. - Array: Cara menyimpan dan mengelola sekumpulan data dengan tipe yang sama.
- Fungsi (Prosedur dan Fungsi): Memecah program menjadi bagian-bagian yang lebih kecil dan dapat digunakan kembali.
- Konsep Dasar Pemrograman Berorientasi Objek (PBO) – Pengantar: Pengenalan konsep seperti kelas dan objek.
- Penanganan Kesalahan (Error Handling) Dasar: Memahami dan mengatasi potensi kesalahan dalam program.
Dengan pemahaman yang kuat tentang konsep-konsep ini, siswa akan lebih siap untuk menghadapi tantangan di semester berikutnya dan dunia kerja.
Bagian 1: Struktur Kontrol Lanjutan (Perulangan while, do-while, break, continue)
Struktur kontrol perulangan adalah jantung dari setiap program. Setelah memahami for loop, semester 2 akan memperdalam pemahaman dengan while dan do-while yang menawarkan fleksibilitas lebih dalam menentukan kapan perulangan akan berhenti.
Soal 1: Menghitung Jumlah Bilangan Ganjil Menggunakan while
Buatlah program menggunakan bahasa pemrograman C++ (atau bahasa lain yang diajarkan di sekolah Anda) yang menghitung dan menampilkan jumlah dari semua bilangan ganjil dari 1 hingga 50 menggunakan perulangan while.
Pembahasan:
Dalam soal ini, kita perlu mengulang dari angka 1 hingga 50. Di setiap iterasi, kita perlu memeriksa apakah angka tersebut ganjil. Jika ganjil, kita tambahkan ke sebuah variabel jumlah. Perulangan while sangat cocok di sini karena kita memiliki kondisi akhir (angka <= 50).
#include <iostream>
int main()
int angka = 1;
int jumlah_ganjil = 0;
while (angka <= 50)
if (angka % 2 != 0) // Cek apakah angka ganjil
jumlah_ganjil += angka; // Tambahkan ke jumlah
angka++; // Increment angka untuk melanjutkan ke iterasi berikutnya
std::cout << "Jumlah bilangan ganjil dari 1 sampai 50 adalah: " << jumlah_ganjil << std::endl;
return 0;
Penjelasan Kode:
int angka = 1;: Menginisialisasi variabelangkadengan nilai awal 1.int jumlah_ganjil = 0;: Menginisialisasi variabeljumlah_ganjiluntuk menyimpan hasil penjumlahan, dimulai dari 0.while (angka <= 50): Kondisi perulangan. Kode di dalam blokwhileakan terus dieksekusi selamaangkakurang dari atau sama dengan 50.if (angka % 2 != 0): Ini adalah operator modulo (%).angka % 2akan menghasilkan sisa pembagianangkadengan 2. Jika sisanya tidak sama dengan 0 (!= 0), berarti angka tersebut ganjil.jumlah_ganjil += angka;: Jika angka ganjil, nilainya ditambahkan kejumlah_ganjil. Ini adalah singkatan darijumlah_ganjil = jumlah_ganjil + angka;.angka++;: Meningkatkan nilaiangkasebesar 1 di setiap akhir iterasi. Ini penting agar perulangan tidak menjadi tak terbatas (infinite loop).std::cout << ...: Menampilkan hasil akhir.
Soal 2: Menggunakan do-while untuk Input Pengguna Sampai Kondisi Terpenuhi
Buatlah program yang meminta pengguna memasukkan sebuah angka positif. Program akan terus meminta input sampai pengguna memasukkan angka yang benar-benar positif (lebih besar dari 0). Gunakan perulangan do-while.
Pembahasan:
Perulangan do-while sangat berguna ketika Anda ingin blok kode dieksekusi setidaknya sekali, terlepas dari apakah kondisinya benar atau salah pada awal. Ini cocok untuk skenario di mana Anda perlu meminta input pengguna setidaknya satu kali sebelum mengecek validitasnya.
#include <iostream>
int main()
int angka;
do
std::cout << "Masukkan sebuah angka positif: ";
std::cin >> angka;
if (angka <= 0)
std::cout << "Input salah. Angka harus positif." << std::endl;
while (angka <= 0); // Ulangi jika angka tidak positif
std::cout << "Terima kasih! Anda memasukkan angka positif: " << angka << std::endl;
return 0;
Penjelasan Kode:
int angka;: Mendeklarasikan variabelangkauntuk menyimpan input pengguna.do ...: Blok kode di dalamdoakan dieksekusi terlebih dahulu.std::cout << "Masukkan sebuah angka positif: ";: Meminta input dari pengguna.std::cin >> angka;: Membaca input dari pengguna dan menyimpannya di variabelangka.if (angka <= 0): Memeriksa apakah angka yang dimasukkan tidak positif.std::cout << "Input salah. Angka harus positif." << std::endl;: Memberikan pesan kesalahan jika input tidak valid.while (angka <= 0);: Kondisido-while. Perulangan akan terus berlanjut selamaangkakurang dari atau sama dengan 0. Setelah pengguna memasukkan angka yang positif, kondisi ini menjadi salah dan perulangan berhenti.
Soal 3: Menggunakan break dan continue dalam Perulangan
Buatlah program yang akan mencetak angka dari 1 hingga 20, tetapi:
- Lewati pencetakan angka 10.
- Hentikan program jika angka yang akan dicetak adalah 15.
Gunakan perulanganfordenganbreakdancontinue.
Pembahasan:
break digunakan untuk keluar dari perulangan secara paksa, sementara continue digunakan untuk melewati sisa kode dalam iterasi saat ini dan melanjutkan ke iterasi berikutnya.
#include <iostream>
int main()
for (int i = 1; i <= 20; ++i)
if (i == 15)
break; // Keluar dari loop jika i adalah 15
if (i == 10)
continue; // Lewati sisa blok kode untuk iterasi ini jika i adalah 10
std::cout << i << " ";
std::cout << std::endl;
std::cout << "Program selesai." << std::endl;
return 0;
Penjelasan Kode:
for (int i = 1; i <= 20; ++i): Perulanganforyang akan berjalan darii = 1hinggai = 20.if (i == 15): Memeriksa apakah nilaiisaat ini adalah 15.break;: Jika kondisii == 15benar,breakakan segera menghentikan seluruh perulanganfor.if (i == 10): Memeriksa apakah nilaiisaat ini adalah 10.continue;: Jika kondisii == 10benar,continueakan melewatistd::cout << i << " ";dan langsung melanjutkan ke iterasi berikutnya (incrementidan cek kondisi perulangan).std::cout << i << " ";: Mencetak nilaiijika tidak ada kondisibreakataucontinueyang terpenuhi.
Bagian 2: Array (Satu Dimensi)
Array adalah struktur data yang memungkinkan kita menyimpan kumpulan elemen data dengan tipe yang sama di bawah satu nama variabel. Ini sangat efisien untuk mengelola data yang berulang.
Soal 4: Menghitung Rata-rata Nilai Siswa Menggunakan Array
Sebuah kelas memiliki 5 siswa. Nilai ulangan mereka adalah: 85, 90, 78, 92, 88. Buatlah program untuk menyimpan nilai-nilai ini dalam sebuah array, kemudian hitung dan tampilkan rata-rata nilai mereka.
Pembahasan:
Kita akan menggunakan array untuk menyimpan kelima nilai tersebut. Kemudian, kita akan menjumlahkan semua elemen dalam array dan membaginya dengan jumlah elemen untuk mendapatkan rata-rata.
#include <iostream>
#include <vector> // Menggunakan vector untuk kemudahan, bisa juga array C++ biasa
int main()
// Menggunakan std::vector, yang lebih dinamis
std::vector<int> nilai_siswa = 85, 90, 78, 92, 88;
int jumlah_nilai = 0;
// Menghitung jumlah nilai menggunakan perulangan
for (int i = 0; i < nilai_siswa.size(); ++i)
jumlah_nilai += nilai_siswa;
// Menghitung rata-rata
double rata_rata = static_cast<double>(jumlah_nilai) / nilai_siswa.size();
std::cout << "Nilai Siswa: ";
for (int i = 0; i < nilai_siswa.size(); ++i)
std::cout << nilai_siswa << (i == nilai_siswa.size() - 1 ? "" : ", ");
std::cout << std::endl;
std::cout << "Jumlah nilai: " << jumlah_nilai << std::endl;
std::cout << "Rata-rata nilai: " << rata_rata << std::endl;
return 0;
Penjelasan Kode:
std::vector<int> nilai_siswa = 85, 90, 78, 92, 88;: Mendeklarasikan sebuahstd::vector(mirip array tapi lebih fleksibel) bernamanilai_siswayang bertipeintdan menginisialisasinya dengan nilai-nilai yang diberikan.std::vectormenggunakansize()untuk mendapatkan jumlah elemen. Jika menggunakan array C++ standar (int nilai_siswa = 85, 90, 78, 92, 88;), maka jumlah elemennya adalah 5.int jumlah_nilai = 0;: Variabel untuk menyimpan total penjumlahan nilai.for (int i = 0; i < nilai_siswa.size(); ++i): Perulangan untuk mengakses setiap elemen array.nilai_siswa.size()memberikan jumlah elemen.jumlah_nilai += nilai_siswa;: Menambahkan nilai dari elemen array pada indeksikejumlah_nilai.nilai_siswamengakses elemen pada posisii(dimulai dari indeks 0).double rata_rata = static_cast<double>(jumlah_nilai) / nilai_siswa.size();: Menghitung rata-rata.static_cast<double>(jumlah_nilai)digunakan untuk memastikan pembagian dilakukan sebagai floating-point (desimal), bukan integer division yang akan memotong angka di belakang koma.- Loop kedua mencetak nilai-nilai yang tersimpan dalam array.
Soal 5: Mencari Nilai Terbesar dan Terkecil dalam Array
Diberikan sebuah array berisi suhu harian dalam seminggu: . Buatlah program untuk mencari dan menampilkan suhu terpanas (nilai terbesar) dan suhu terdingin (nilai terkecil) dari data tersebut.
Pembahasan:
Untuk mencari nilai terbesar dan terkecil, kita bisa menginisialisasi variabel terbesar dan terkecil dengan elemen pertama dari array. Kemudian, kita iterasi melalui sisa elemen array. Jika menemukan elemen yang lebih besar dari terbesar, kita perbarui terbesar. Sebaliknya, jika menemukan elemen yang lebih kecil dari terkecil, kita perbarui terkecil.
#include <iostream>
#include <vector>
#include <limits> // Untuk numeric_limits
int main()
std::vector<int> suhu_harian = 28, 30, 31, 29, 32, 27, 29;
if (suhu_harian.empty())
std::cout << "Data suhu kosong." << std::endl;
return 1; // Keluar dengan kode error
int suhu_terbesar = suhu_harian;
int suhu_terkecil = suhu_harian;
// Mulai dari indeks ke-1 karena indeks 0 sudah dijadikan inisialisasi
for (size_t i = 1; i < suhu_harian.size(); ++i)
if (suhu_harian > suhu_terbesar)
suhu_terbesar = suhu_harian; // Update suhu terbesar
if (suhu_harian < suhu_terkecil)
suhu_terkecil = suhu_harian; // Update suhu terkecil
std::cout << "Suhu Harian: ";
for (size_t i = 0; i < suhu_harian.size(); ++i)
std::cout << suhu_harian << (i == suhu_harian.size() - 1 ? "" : ", ");
std::cout << std::endl;
std::cout << "Suhu Terpanas adalah: " << suhu_terbesar << " derajat Celsius" << std::endl;
std::cout << "Suhu Terdingin adalah: " << suhu_terkecil << " derajat Celsius" << std::endl;
return 0;
Penjelasan Kode:
std::vector<int> suhu_harian = 28, 30, 31, 29, 32, 27, 29;: Mendeklarasikan dan menginisialisasi array suhu.if (suhu_harian.empty()) ...: Penanganan kasus jika array kosong untuk mencegah error.int suhu_terbesar = suhu_harian;danint suhu_terkecil = suhu_harian;: Menginisialisasi variabelsuhu_terbesardansuhu_terkecildengan nilai elemen pertama array. Ini adalah titik awal perbandingan.for (size_t i = 1; i < suhu_harian.size(); ++i): Perulangan dimulai dari indeks ke-1.if (suhu_harian > suhu_terbesar): Membandingkan elemen saat ini dengansuhu_terbesar. Jika elemen saat ini lebih besar, makasuhu_terbesardiperbarui.if (suhu_harian < suhu_terkecil): Membandingkan elemen saat ini dengansuhu_terkecil. Jika elemen saat ini lebih kecil, makasuhu_terkecildiperbarui.
Bagian 3: Fungsi (Prosedur dan Fungsi)
Fungsi adalah blok kode yang dirancang untuk melakukan tugas tertentu. Penggunaan fungsi membuat program lebih terstruktur, mudah dibaca, dan dapat digunakan kembali (reusable). Ada dua jenis utama: Prosedur (tidak mengembalikan nilai) dan Fungsi (mengembalikan nilai).
Soal 6: Membuat Fungsi untuk Menghitung Luas Persegi Panjang
Buatlah sebuah fungsi bernama hitungLuasPersegiPanjang yang menerima dua parameter: panjang dan lebar (keduanya bertipe double). Fungsi ini harus mengembalikan nilai luas persegi panjang tersebut. Panggil fungsi ini dari fungsi main dan tampilkan hasilnya.
Pembahasan:
Fungsi ini akan menerima input panjang dan lebar, mengalikannya, dan mengembalikan hasilnya.
#include <iostream>
// Deklarasi Fungsi (prototipe fungsi)
double hitungLuasPersegiPanjang(double panjang, double lebar);
int main()
double p = 10.5;
double l = 5.2;
// Memanggil fungsi dan menyimpan nilai kembaliannya
double luas = hitungLuasPersegiPanjang(p, l);
std::cout << "Panjang: " << p << std::endl;
std::cout << "Lebar: " << l << std::endl;
std::cout << "Luas Persegi Panjang adalah: " << luas << std::endl;
return 0;
// Definisi Fungsi
double hitungLuasPersegiPanjang(double panjang, double lebar)
return panjang * lebar; // Mengembalikan hasil perkalian
Penjelasan Kode:
double hitungLuasPersegiPanjang(double panjang, double lebar);: Ini adalah prototipe fungsi (atau deklarasi fungsi). Ini memberi tahu kompiler bahwa ada fungsi bernamahitungLuasPersegiPanjangyang menerima dua argumendoubledan mengembalikandouble. Prototipe biasanya diletakkan di awal program atau di dalam file header.int main() ...: Fungsimainadalah titik awal eksekusi program.double luas = hitungLuasPersegiPanjang(p, l);: Di sini, fungsihitungLuasPersegiPanjangdipanggil dengan nilaipdanlsebagai argumen. Nilai yang dikembalikan oleh fungsi ini (hasil perkalian) disimpan dalam variabelluas.double hitungLuasPersegiPanjang(double panjang, double lebar) ...: Ini adalah definisi fungsi. Di sinilah kode aktual fungsi ditulis.return panjang * lebar;: Pernyataanreturnmengirimkan nilai hasil perhitungan kembali ke tempat fungsi dipanggil.
Soal 7: Membuat Prosedur untuk Menampilkan Pesan Selamat Datang
Buatlah sebuah prosedur (fungsi yang tidak mengembalikan nilai) bernama tampilkanSalam yang tidak menerima parameter apa pun. Prosedur ini hanya bertugas menampilkan pesan "Selamat Datang di Dunia Pemrograman!". Panggil prosedur ini dari fungsi main.
Pembahasan:
Karena prosedur ini tidak mengembalikan nilai, tipe kembaliannya adalah void.
#include <iostream>
// Deklarasi Prosedur
void tampilkanSalam();
int main()
// Memanggil prosedur
tampilkanSalam();
std::cout << "Mari kita belajar lebih banyak!" << std::endl;
return 0;
// Definisi Prosedur
void tampilkanSalam()
std::cout << "Selamat Datang di Dunia Pemrograman!" << std::endl;
// Tidak ada return statement karena ini adalah void function (prosedur)
Penjelasan Kode:
void tampilkanSalam();: Prototipe prosedurtampilkanSalam.voidmenunjukkan bahwa prosedur ini tidak mengembalikan nilai apa pun.void tampilkanSalam() ...: Definisi prosedur.std::cout << "Selamat Datang di Dunia Pemrograman!" << std::endl;: Kode di dalam prosedur ini hanya mencetak pesan.tampilkanSalam();: Pemanggilan prosedur darimain.
Bagian 4: Pengantar Konsep Dasar Pemrograman Berorientasi Objek (PBO)
Semester 2 seringkali menjadi pengantar awal untuk paradigma PBO. Konsep dasarnya adalah melihat program sebagai kumpulan objek yang saling berinteraksi. Objek memiliki properti (data) dan metode (fungsi).
Soal 8: Konsep Class dan Object Sederhana
Bayangkan sebuah objek "Mobil". Apa saja properti (atribut) yang dimiliki mobil? Dan apa saja tindakan (metode) yang bisa dilakukan mobil? Berikan contoh sederhana deklarasi class Mobil di C++.
Pembahasan:
- Properti (Atribut) Mobil: Warna, Merk, Model, Tahun Produksi, Kecepatan Maksimal, Jumlah Pintu, Status Mesin (hidup/mati).
- Metode (Tindakan) Mobil: Menyalakan Mesin, Mematikan Mesin, Mempercepat, Mengerem, Mengubah Gigi.
#include <iostream>
#include <string> // Untuk menggunakan tipe data string
// Deklarasi Class 'Mobil'
class Mobil
public: // Akses modifier: public berarti bisa diakses dari luar class
// Properti (Atribut)
std::string warna;
std::string merk;
int tahunProduksi;
bool mesinHidup; // Status mesin: true = hidup, false = mati
// Metode (Fungsi)
void nyalakanMesin()
if (!mesinHidup)
mesinHidup = true;
std::cout << merk << " " << warna << " mesin dinyalakan." << std::endl;
else
std::cout << merk << " " << warna << " mesin sudah hidup." << std::endl;
void matikanMesin()
if (mesinHidup)
mesinHidup = false;
std::cout << merk << " " << warna << " mesin dimatikan." << std::endl;
else
std::cout << merk << " " << warna << " mesin sudah mati." << std::endl;
void infoMobil()
std::cout << "Informasi Mobil: Merk=" << merk << ", Warna=" << warna << ", Tahun=" << tahunProduksi << ", Status Mesin=" << (mesinHidup ? "Hidup" : "Mati") << std::endl;
;
int main()
// Membuat Object (instance) dari Class Mobil
Mobil mobil1; // mobil1 adalah objek dari class Mobil
// Mengisi properti dari objek mobil1
mobil1.merk = "Toyota";
mobil1.warna = "Merah";
mobil1.tahunProduksi = 2020;
mobil1.mesinHidup = false; // Awalnya mesin mati
// Membuat object mobil2
Mobil mobil2;
mobil2.merk = "Honda";
mobil2.warna = "Biru";
mobil2.tahunProduksi = 2022;
mobil2.mesinHidup = false;
// Menggunakan metode dari objek mobil1
mobil1.infoMobil();
mobil1.nyalakanMesin();
mobil1.infoMobil();
mobil1.matikanMesin();
mobil1.infoMobil();
std::cout << "n"; // Baris kosong untuk pemisah output
// Menggunakan metode dari objek mobil2
mobil2.infoMobil();
mobil2.nyalakanMesin();
mobil2.infoMobil();
return 0;
Penjelasan Kode:
class Mobil ... ;: Ini adalah deklarasi classMobil. Class adalah blueprint atau cetakan.public:: Ini adalah access specifier. Anggota yang dideklarasikan setelahpublicdapat diakses dari mana saja, termasuk dari luar class.std::string warna;,std::string merk;,int tahunProduksi;,bool mesinHidup;: Ini adalah properti atau atribut dari classMobil. Mereka menyimpan data tentang sebuah objek mobil.void nyalakanMesin() ...,void matikanMesin() ...,void infoMobil() ...: Ini adalah metode atau fungsi dari classMobil. Mereka mendefinisikan perilaku atau tindakan yang bisa dilakukan oleh objek mobil.Mobil mobil1;: Di dalammain, ini adalah cara membuat objek (instance) dari classMobil.mobil1sekarang adalah sebuah mobil dengan semua properti dan metode yang didefinisikan di classMobil.mobil1.merk = "Toyota";: Ini adalah cara mengakses dan mengatur nilai properti sebuah objek menggunakan operator titik (.).mobil1.nyalakanMesin();: Ini adalah cara memanggil metode dari sebuah objek.
Kesimpulan
Memahami dan mempraktikkan contoh soal seperti yang disajikan di atas adalah kunci untuk menguasai dasar-dasar pemrograman. Perulangan yang lebih kompleks, pengelolaan data menggunakan array, pembagian tugas dengan fungsi, dan pengenalan awal pada konsep PBO akan menjadi bekal berharga bagi siswa SMK kelas 10.
Teruslah berlatih, jangan ragu untuk bereksperimen dengan modifikasi soal, dan cari tahu lebih banyak sumber belajar. Kemampuan memecahkan masalah dan berpikir logis yang diasah melalui pemrograman akan sangat bermanfaat di berbagai bidang, baik dalam dunia teknologi maupun di luar itu. Selamat belajar dan terus berkarya!


Leave a Reply