Soal No 1
#include <iostream>
#include <cstring>
*start = *end;
*end = temp;
start++;
end--;
int main() {
char sentence[MAX_LENGTH];
reverseSentence(sentence);
return 0;
Penjelasan
Di dalam fungsi main, kita mendeklarasikan sebuah array karakter sentence dengan
panjang maksimum MAX_LENGTH. Kemudian, kita menggunakan
std::cin.getline() untuk membaca kalimat dari keyboard dan menyimpannya
dalam sentence.
Harap dicatat bahwa program ini tidak memperhitungkan spasi atau tanda baca. Ia
hanya membalikkan urutan karakter dalam kalimat yang diinputkan.
Soal Ke- 2
#include <iostream>
a *= 2;
b *= 2;
c *= 2;
}
int main() {
int a, b, c;
std::cin >> a;
std::cin >> b;
std::cin >> c;
doubleValues(a, b, c);
return 0;
Dalam program ini, kita memiliki fungsi doubleValues yang menerima tiga
parameter oleh referensi ( int& a, int& b, int& c). Fungsi ini menggandakan nilai
masing-masing parameter dengan mengalikannya dengan 2.
Di dalam fungsi main, kita meminta pengguna untuk memasukkan nilai a, b, dan c.
Kemudian, kita memanggil fungsi doubleValues dengan menggunakan variabel-
variabel tersebut sebagai argumen. Setelah itu, kita mencetak nilai a, b, dan c yang
telah di-double.
Harap dicatat bahwa dalam program ini, tidak ada nilai balik yang dihasilkan oleh
fungsi doubleValues karena nilai-nilai tersebut diubah langsung di dalam fungsi
menggunakan referensi.
BAB 2 ARRAY
#include <iostream>
int main() {
int numbers[MAX_SIZE];
int count = 0;
int sum = 0;
if (i % 5 == 0) {
numbers[count] = i;
count++;
sum += i;
// Menampilkan hasil
std::cout << "Bilangan ganjil antara 1 sampai 100 yang habis dibagi 5:" << std::endl;
}
std::cout << std::endl;
return 0;
Dalam program ini, kita menggunakan larik numbers untuk menyimpan bilangan
ganjil antara 1 sampai 100 yang habis dibagi 5. Variabel count digunakan untuk
menghitung jumlah bilangan yang memenuhi syarat, dan variabel sum digunakan
untuk menjumlahkan bilangan-bilangan tersebut.
Kemudian, kita menghitung rata-rata deret dengan membagi sum dengan count
setelah mengubahnya menjadi tipe data double menggunakan
static_cast<double>(...).
Terakhir, program ini mencetak bilangan ganjil yang memenuhi syarat, jumlah
bilangan, jumlah deret, dan rata-rata deret.
Output yang dihasilkan akan menampilkan bilangan ganjil antara 1 sampai 100 yang
habis dibagi 5, serta jumlah bilangan, jumlah deret, dan rata-rata deretnya.
TUGAS BAB 3
Soal Ke 1
#include <iostream>
int main() {
// Menampilkan hasil
std::cout << "Total durasi rental: " << durasiJam << " jam " << durasiMenit << " menit " <<
durasiDetik << " detik" << std::endl;
return 0;
}
Dalam program ini, kita menggunakan konstanta untuk mengatur konversi detik ke
menit dan jam (DETIK_PER_MENIT dan DETIK_PER_JAM), serta tarif per detik
(TARIF_PER_DETIK).
Kemudian, kita meminta pengguna untuk memasukkan durasi rental dalam format
jam, menit, dan detik. Durasi tersebut kemudian dikonversi menjadi total durasi
dalam detik.
Selanjutnya, kita menghitung total biaya dengan mengalikan total durasi dalam detik
dengan tarif per detik.
Terakhir, program ini mencetak total durasi rental dan total biaya yang harus dibayar.
Perlu diperhatikan bahwa program ini menggunakan tarif per detik yang tetap. Jika
ada kebijakan tarif yang berbeda untuk jam-jam tertentu, maka perlu dilakukan
penyesuaian pada program.
Soal Ke 2
#include <iostream>
return 'A';
return 'B';
return 'C';
return 'D';
else
return 'E';
double nilaiAkhir = 0.1 * tugas + 0.2 * kuis + 0.3 * mid + 0.4 * uas;
return nilaiAkhir;
int main() {
// Input nilai
return 0;
Dalam program ini, terdapat dua fungsi. Fungsi hitungNilaiAkhir digunakan untuk
menghitung jumlah nilai akhir berdasarkan bobot yang diberikan pada setiap
komponen penilaian (tugas, kuis, mid, uas). Fungsi ini mengembalikan nilai akhir
yang dihitung.
Di dalam fungsi main, kita meminta pengguna untuk memasukkan nilai-nilai tugas,
kuis, mid, dan uas. Kemudian, kita menggunakan fungsi hitungNilaiAkhir untuk
menghitung nilai akhir berdasarkan bobot yang diberikan. Selanjutnya, kita
menggunakan fungsi getNilaiHuruf untuk mendapatkan nilai huruf yang sesuai
dengan nilai akhir yang dihitung.
Terakhir, program ini mencetak nilai akhir dan nilai huruf yang diperoleh oleh
mahasiswa.
Perlu diperhatikan bahwa program ini menggunakan bobot persentase yang tetap
untuk setiap komponen penilaian. Jika ada kebijakan bobot yang berbeda, maka
perlu dilakukan penyesuaian pada program.
BAB 5
#include <iostream>
#include <stack>
#include <string>
class TodoList {
private:
stack<string> tasks;
stack<string> undoStack;
stack<string> redoStack;
public:
tasks.push(task);
undoStack.push("add");
void undo() {
if (undoStack.empty()) {
cout << "Tidak ada aksi undo yang tersedia." << endl;
return;
}
string action = undoStack.top();
undoStack.pop();
if (action == "add") {
tasks.pop();
redoStack.push("add");
cout << "Aktivitas '" << task << "' telah dihapus." << endl;
string task;
getline(cin, task);
tasks.push(task);
redoStack.push("remove");
cout << "Aktivitas '" << task << "' telah dikembalikan." << endl;
void redo() {
if (redoStack.empty()) {
cout << "Tidak ada aksi redo yang tersedia." << endl;
return;
redoStack.pop();
if (action == "add") {
tasks.pop();
undoStack.push("add");
cout << "Aktivitas '" << task << "' telah ditambahkan kembali." << endl;
tasks.pop();
undoStack.push("remove");
cout << "Aktivitas '" << task << "' telah dihapus kembali." << endl;
void printTasks() {
if (tasks.empty()) {
return;
while (!reversedTasks.empty()) {
reversedTasks.pop();
}
};
int main() {
TodoList todoList;
while (true) {
int choice;
switch (choice) {
case 1:
todoList.printTasks();
break;
case 2: {
string task;
getline(cin, task);
todoList.addTask(task);
break;
case 3:
todoList.undo();
break;
case 4:
todoList.redo();
break;
case 5:
return 0;
default:
cout << "Pilihan tidak valid. Silakan coba lagi." << endl;
break;
return 0;
}
BAB 6
#include <iostream>
#include <vector>
struct Barang {
std::string nama;
int jumlah;
};
int main() {
std::vector<Barang> gudang;
while (true) {
int pilihan;
if (pilihan == 1) {
Barang barang;
} else if (pilihan == 2) {
std::string namaBarang;
int jumlahBarang;
std::cout << "Masukkan jumlah barang yang akan dihapus (maksimal 2): ";
if (gudang[i].nama == namaBarang) {
gudang[i].jumlah -= jumlahBarang;
barangDitemukan = true;
if (gudang[i].jumlah == 0) {
gudang.erase(gudang.begin() + i);
break;
} else {
std::cout << "Jumlah barang yang dimasukkan melebihi jumlah yang ada di gudang." <<
std::endl;
barangDitemukan = true;
break;
if (!barangDitemukan) {
} else if (pilihan == 3) {
break;
} else {
std::cout << "Pilihan tidak valid. Silakan pilih menu yang sesuai." << std::endl;
return 0;