10 Soal Problem Solving C++
Daftar Isi
1. Percabangan
2. Perulangan
3. Subprogram
4. Array
5. Pointer & Reference
Percabangan
Soal 1: Sistem Grading Nilai
Buatlah program untuk menentukan grade nilai mahasiswa dengan ketentuan
berikut: - Nilai >= 85: Grade A - Nilai 75-84: Grade B - Nilai 65-74: Grade C
- Nilai 45-64: Grade D - Nilai < 45: Grade E
#include <iostream>
using namespace std;
int main() {
int nilai;
cout << "Masukkan nilai: ";
cin >> nilai;
if (nilai >= 85) {
cout << "Grade A";
} else if (nilai >= 75) {
cout << "Grade B";
} else if (nilai >= 65) {
cout << "Grade C";
} else if (nilai >= 45) {
cout << "Grade D";
} else {
cout << "Grade E";
}
return 0;
}
Soal 2: Kalkulator Sederhana
Buatlah program kalkulator sederhana yang dapat melakukan operasi +, -, *, /
dengan menggunakan switch-case.
1
#include <iostream>
using namespace std;
int main() {
double angka1, angka2;
char operasi;
cout << "Masukkan angka pertama: ";
cin >> angka1;
cout << "Masukkan operasi (+,-,*,/): ";
cin >> operasi;
cout << "Masukkan angka kedua: ";
cin >> angka2;
switch(operasi) {
case '+':
cout << angka1 + angka2;
break;
case '-':
cout << angka1 - angka2;
break;
case '*':
cout << angka1 * angka2;
break;
case '/':
if(angka2 != 0)
cout << angka1 / angka2;
else
cout << "Error: Pembagian dengan nol";
break;
default:
cout << "Operasi tidak valid";
}
return 0;
}
Perulangan
Soal 3: Pola Segitiga
Buatlah program untuk menampilkan pola segitiga dengan tinggi sesuai input
user.
#include <iostream>
using namespace std;
2
int main() {
int tinggi;
cout << "Masukkan tinggi segitiga: ";
cin >> tinggi;
for(int i = 1; i <= tinggi; i++) {
for(int j = 1; j <= i; j++) {
cout << "* ";
}
cout << endl;
}
return 0;
}
Soal 4: Faktorial
Buatlah program untuk menghitung faktorial dari sebuah bilangan menggu-
nakan perulangan while.
#include <iostream>
using namespace std;
int main() {
int n;
long long faktorial = 1;
cout << "Masukkan bilangan: ";
cin >> n;
int i = 1;
while(i <= n) {
faktorial *= i;
i++;
}
cout << "Faktorial dari " << n << " adalah " << faktorial;
return 0;
}
Subprogram
Soal 5: Fungsi Rekursif Fibonacci
Buatlah fungsi rekursif untuk menghitung bilangan fibonacci ke-n.
3
#include <iostream>
using namespace std;
int fibonacci(int n) {
if(n <= 1)
return n;
return fibonacci(n-1) + fibonacci(n-2);
}
int main() {
int n;
cout << "Masukkan nilai n: ";
cin >> n;
cout << "Fibonacci ke-" << n << " adalah " << fibonacci(n);
return 0;
}
Soal 6: Prosedur Tukar Nilai
Buatlah prosedur untuk menukar nilai dua variabel menggunakan parameter
reference.
#include <iostream>
using namespace std;
void tukarNilai(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
cout << "Sebelum ditukar: x = " << x << ", y = " << y << endl;
tukarNilai(x, y);
cout << "Setelah ditukar: x = " << x << ", y = " << y << endl;
return 0;
}
4
Array
Soal 7: Mencari Nilai Maksimum dan Minimum
Buatlah program untuk mencari nilai maksimum dan minimum dalam array.
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Masukkan jumlah elemen: ";
cin >> n;
int arr[n];
for(int i = 0; i < n; i++) {
cout << "Masukkan elemen ke-" << i+1 << ": ";
cin >> arr[i];
}
int max = arr[0], min = arr[0];
for(int i = 1; i < n; i++) {
if(arr[i] > max) max = arr[i];
if(arr[i] < min) min = arr[i];
}
cout << "Nilai maksimum: " << max << endl;
cout << "Nilai minimum: " << min << endl;
return 0;
}
Soal 8: Matriks Transpose
Buatlah program untuk melakukan transpose matriks 2D.
#include <iostream>
using namespace std;
int main() {
int baris, kolom;
cout << "Masukkan jumlah baris: ";
cin >> baris;
cout << "Masukkan jumlah kolom: ";
cin >> kolom;
int matriks[baris][kolom];
5
int transpose[kolom][baris];
// Input matriks
for(int i = 0; i < baris; i++) {
for(int j = 0; j < kolom; j++) {
cout << "Masukkan elemen [" << i << "][" << j << "]: ";
cin >> matriks[i][j];
}
}
// Proses transpose
for(int i = 0; i < baris; i++) {
for(int j = 0; j < kolom; j++) {
transpose[j][i] = matriks[i][j];
}
}
// Output hasil transpose
cout << "\nHasil Transpose:\n";
for(int i = 0; i < kolom; i++) {
for(int j = 0; j < baris; j++) {
cout << transpose[i][j] << " ";
}
cout << endl;
}
return 0;
}
Pointer & Reference
Soal 9: Alokasi Dinamis Array
Buatlah program untuk membuat array dinamis menggunakan pointer dan
menghitung rata-ratanya.
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Masukkan jumlah elemen: ";
cin >> n;
// Alokasi dinamis
double *arr = new double[n];
6
// Input elemen
for(int i = 0; i < n; i++) {
cout << "Masukkan elemen ke-" << i+1 << ": ";
cin >> arr[i];
}
// Hitung rata-rata
double sum = 0;
for(int i = 0; i < n; i++) {
sum += arr[i];
}
double rata = sum / n;
cout << "Rata-rata: " << rata << endl;
// Dealokasi memori
delete[] arr;
return 0;
}
Soal 10: Manipulasi String dengan Pointer
Buatlah program untuk membalik string menggunakan pointer.
#include <iostream>
#include <cstring>
using namespace std;
void balikString(char *str) {
int panjang = strlen(str);
char *awal = str;
char *akhir = str + panjang - 1;
while(awal < akhir) {
char temp = *awal;
*awal = *akhir;
*akhir = temp;
awal++;
akhir--;
}
}
int main() {
char str[100];
7
cout << "Masukkan string: ";
[Link](str, 100);
cout << "String sebelum dibalik: " << str << endl;
balikString(str);
cout << "String setelah dibalik: " << str << endl;
return 0;
}
Kesimpulan
Soal-soal di atas mencakup berbagai konsep penting dalam pemrograman C++
seperti: 1. Percabangan (if-else, switch-case) 2. Perulangan (for, while) 3.
Subprogram (fungsi, prosedur, rekursi) 4. Array (1D dan 2D) 5. Pointer dan
Reference
Setiap soal dirancang untuk melatih pemahaman konsep dan kemampuan prob-
lem solving dalam pemrograman C++.