Menguasai Dasar Pemrograman: Contoh Soal dan Pembahasan untuk Kelas 10 SMK Semester 2

·

·

Menguasai Dasar Pemrograman: Contoh Soal dan Pembahasan untuk Kelas 10 SMK Semester 2

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:

Menguasai Dasar Pemrograman: Contoh Soal dan Pembahasan untuk Kelas 10 SMK Semester 2

  • Struktur Kontrol Lanjutan: Perulangan (looping) yang lebih kompleks seperti while dan do-while, serta penggunaan break dan continue.
  • 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:

  1. int angka = 1;: Menginisialisasi variabel angka dengan nilai awal 1.
  2. int jumlah_ganjil = 0;: Menginisialisasi variabel jumlah_ganjil untuk menyimpan hasil penjumlahan, dimulai dari 0.
  3. while (angka <= 50): Kondisi perulangan. Kode di dalam blok while akan terus dieksekusi selama angka kurang dari atau sama dengan 50.
  4. if (angka % 2 != 0): Ini adalah operator modulo (%). angka % 2 akan menghasilkan sisa pembagian angka dengan 2. Jika sisanya tidak sama dengan 0 (!= 0), berarti angka tersebut ganjil.
  5. jumlah_ganjil += angka;: Jika angka ganjil, nilainya ditambahkan ke jumlah_ganjil. Ini adalah singkatan dari jumlah_ganjil = jumlah_ganjil + angka;.
  6. angka++;: Meningkatkan nilai angka sebesar 1 di setiap akhir iterasi. Ini penting agar perulangan tidak menjadi tak terbatas (infinite loop).
  7. 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:

  1. int angka;: Mendeklarasikan variabel angka untuk menyimpan input pengguna.
  2. do ... : Blok kode di dalam do akan dieksekusi terlebih dahulu.
  3. std::cout << "Masukkan sebuah angka positif: ";: Meminta input dari pengguna.
  4. std::cin >> angka;: Membaca input dari pengguna dan menyimpannya di variabel angka.
  5. if (angka <= 0): Memeriksa apakah angka yang dimasukkan tidak positif.
  6. std::cout << "Input salah. Angka harus positif." << std::endl;: Memberikan pesan kesalahan jika input tidak valid.
  7. while (angka <= 0);: Kondisi do-while. Perulangan akan terus berlanjut selama angka kurang dari atau sama dengan 0. Setelah pengguna memasukkan angka yang positif, kondisi ini menjadi salah dan perulangan berhenti.
See also  Menjelajahi Soal Matematika Kelas 9 SMP 2019: Kunci Sukses Menuju Jenjang Selanjutnya

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 perulangan for dengan break dan continue.

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:

  1. for (int i = 1; i <= 20; ++i): Perulangan for yang akan berjalan dari i = 1 hingga i = 20.
  2. if (i == 15): Memeriksa apakah nilai i saat ini adalah 15.
  3. break;: Jika kondisi i == 15 benar, break akan segera menghentikan seluruh perulangan for.
  4. if (i == 10): Memeriksa apakah nilai i saat ini adalah 10.
  5. continue;: Jika kondisi i == 10 benar, continue akan melewati std::cout << i << " "; dan langsung melanjutkan ke iterasi berikutnya (increment i dan cek kondisi perulangan).
  6. std::cout << i << " ";: Mencetak nilai i jika tidak ada kondisi break atau continue yang 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:

  1. std::vector<int> nilai_siswa = 85, 90, 78, 92, 88;: Mendeklarasikan sebuah std::vector (mirip array tapi lebih fleksibel) bernama nilai_siswa yang bertipe int dan menginisialisasinya dengan nilai-nilai yang diberikan. std::vector menggunakan size() untuk mendapatkan jumlah elemen. Jika menggunakan array C++ standar (int nilai_siswa = 85, 90, 78, 92, 88;), maka jumlah elemennya adalah 5.
  2. int jumlah_nilai = 0;: Variabel untuk menyimpan total penjumlahan nilai.
  3. for (int i = 0; i < nilai_siswa.size(); ++i): Perulangan untuk mengakses setiap elemen array. nilai_siswa.size() memberikan jumlah elemen.
  4. jumlah_nilai += nilai_siswa;: Menambahkan nilai dari elemen array pada indeks i ke jumlah_nilai. nilai_siswa mengakses elemen pada posisi i (dimulai dari indeks 0).
  5. 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.
  6. Loop kedua mencetak nilai-nilai yang tersimpan dalam array.
See also  Contoh soal bilangan cacah kelas 3 sd

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:

  1. std::vector<int> suhu_harian = 28, 30, 31, 29, 32, 27, 29;: Mendeklarasikan dan menginisialisasi array suhu.
  2. if (suhu_harian.empty()) ... : Penanganan kasus jika array kosong untuk mencegah error.
  3. int suhu_terbesar = suhu_harian; dan int suhu_terkecil = suhu_harian;: Menginisialisasi variabel suhu_terbesar dan suhu_terkecil dengan nilai elemen pertama array. Ini adalah titik awal perbandingan.
  4. for (size_t i = 1; i < suhu_harian.size(); ++i): Perulangan dimulai dari indeks ke-1.
  5. if (suhu_harian > suhu_terbesar): Membandingkan elemen saat ini dengan suhu_terbesar. Jika elemen saat ini lebih besar, maka suhu_terbesar diperbarui.
  6. if (suhu_harian < suhu_terkecil): Membandingkan elemen saat ini dengan suhu_terkecil. Jika elemen saat ini lebih kecil, maka suhu_terkecil diperbarui.

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:

  1. double hitungLuasPersegiPanjang(double panjang, double lebar);: Ini adalah prototipe fungsi (atau deklarasi fungsi). Ini memberi tahu kompiler bahwa ada fungsi bernama hitungLuasPersegiPanjang yang menerima dua argumen double dan mengembalikan double. Prototipe biasanya diletakkan di awal program atau di dalam file header.
  2. int main() ... : Fungsi main adalah titik awal eksekusi program.
  3. double luas = hitungLuasPersegiPanjang(p, l);: Di sini, fungsi hitungLuasPersegiPanjang dipanggil dengan nilai p dan l sebagai argumen. Nilai yang dikembalikan oleh fungsi ini (hasil perkalian) disimpan dalam variabel luas.
  4. double hitungLuasPersegiPanjang(double panjang, double lebar) ... : Ini adalah definisi fungsi. Di sinilah kode aktual fungsi ditulis.
  5. return panjang * lebar;: Pernyataan return mengirimkan 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:

  1. void tampilkanSalam();: Prototipe prosedur tampilkanSalam. void menunjukkan bahwa prosedur ini tidak mengembalikan nilai apa pun.
  2. void tampilkanSalam() ... : Definisi prosedur.
  3. std::cout << "Selamat Datang di Dunia Pemrograman!" << std::endl;: Kode di dalam prosedur ini hanya mencetak pesan.
  4. tampilkanSalam();: Pemanggilan prosedur dari main.

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).

See also  Soal pai kelas 3 semester 1

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:

  1. class Mobil ... ;: Ini adalah deklarasi class Mobil. Class adalah blueprint atau cetakan.
  2. public:: Ini adalah access specifier. Anggota yang dideklarasikan setelah public dapat diakses dari mana saja, termasuk dari luar class.
  3. std::string warna;, std::string merk;, int tahunProduksi;, bool mesinHidup;: Ini adalah properti atau atribut dari class Mobil. Mereka menyimpan data tentang sebuah objek mobil.
  4. void nyalakanMesin() ... , void matikanMesin() ... , void infoMobil() ... : Ini adalah metode atau fungsi dari class Mobil. Mereka mendefinisikan perilaku atau tindakan yang bisa dilakukan oleh objek mobil.
  5. Mobil mobil1;: Di dalam main, ini adalah cara membuat objek (instance) dari class Mobil. mobil1 sekarang adalah sebuah mobil dengan semua properti dan metode yang didefinisikan di class Mobil.
  6. mobil1.merk = "Toyota";: Ini adalah cara mengakses dan mengatur nilai properti sebuah objek menggunakan operator titik (.).
  7. 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

Your email address will not be published. Required fields are marked *