Anda di halaman 1dari 18

BAB 1

Soal No 1

#include <iostream>

#include <cstring>

void reverseSentence(char* sentence) {

int length = strlen(sentence);

char* start = sentence;

char* end = sentence + length - 1;

// Memutar setiap kata dalam kalimat

while (start < end) {

char temp = *start;

*start = *end;

*end = temp;

start++;

end--;

int main() {

const int MAX_LENGTH = 100;

char sentence[MAX_LENGTH];

std::cout << "Masukkan kalimat: ";


std::cin.getline(sentence, MAX_LENGTH);

reverseSentence(sentence);

std::cout << "Kalimat terbalik: " << sentence << std::endl;

return 0;

Penjelasan

Dalam program ini, kita menggunakan fungsi reverseSentence untuk membalikkan


kalimat yang diberikan. Fungsi ini menggunakan pointer untuk memanipulasi
karakter-karakter dalam kalimat.

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.

Kemudian, kita memanggil fungsi reverseSentence dengan menggunakan


sentence sebagai argumen. Fungsi ini akan membalikkan karakter-karakter dalam
kalimat.

Terakhir, kita mencetak kalimat terbalik yang dihasilkan.

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>

void doubleValues(int& a, int& b, int& c) {

a *= 2;

b *= 2;

c *= 2;
}

int main() {

int a, b, c;

std::cout << "Masukkan nilai a: ";

std::cin >> a;

std::cout << "Masukkan nilai b: ";

std::cin >> b;

std::cout << "Masukkan nilai c: ";

std::cin >> c;

doubleValues(a, b, c);

std::cout << "Nilai a setelah di-double: " << a << std::endl;

std::cout << "Nilai b setelah di-double: " << b << std::endl;

std::cout << "Nilai c setelah di-double: " << c << std::endl;

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() {

const int MAX_SIZE = 20;

int numbers[MAX_SIZE];

int count = 0;

int sum = 0;

// Mengisi larik dengan bilangan ganjil yang habis dibagi 5

for (int i = 1; i <= 100; i += 2) {

if (i % 5 == 0) {

numbers[count] = i;

count++;

sum += i;

// Menghitung rata-rata deret

double average = static_cast<double>(sum) / count;

// Menampilkan hasil

std::cout << "Bilangan ganjil antara 1 sampai 100 yang habis dibagi 5:" << std::endl;

for (int i = 0; i < count; i++) {

std::cout << numbers[i] << " ";

}
std::cout << std::endl;

std::cout << "Jumlah bilangan: " << count << std::endl;

std::cout << "Jumlah deret: " << sum << std::endl;

std::cout << "Rata-rata deret: " << average << 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() {

const int DETIK_PER_MENIT = 60;

const int DETIK_PER_JAM = 3600;

const int TARIF_PER_DETIK = 130;

int durasiJam, durasiMenit, durasiDetik;

// Input durasi rental

std::cout << "Masukkan durasi rental (jam menit detik): ";

std::cin >> durasiJam >> durasiMenit >> durasiDetik;

// Menghitung total durasi dalam detik

int totalDurasiDetik = durasiJam * DETIK_PER_JAM + durasiMenit * DETIK_PER_MENIT +


durasiDetik;

// Menghitung total biaya

int totalBiaya = totalDurasiDetik * TARIF_PER_DETIK;

// Menampilkan hasil

std::cout << "Total durasi rental: " << durasiJam << " jam " << durasiMenit << " menit " <<
durasiDetik << " detik" << std::endl;

std::cout << "Total biaya: Rp " << totalBiaya << 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>

char getNilaiHuruf(double nilaiAkhir) {

if (nilaiAkhir > 85)

return 'A';

else if (nilaiAkhir > 70)

return 'B';

else if (nilaiAkhir > 55)

return 'C';

else if (nilaiAkhir > 40)

return 'D';

else
return 'E';

double hitungNilaiAkhir(double tugas, double kuis, double mid, double uas) {

double nilaiAkhir = 0.1 * tugas + 0.2 * kuis + 0.3 * mid + 0.4 * uas;

return nilaiAkhir;

int main() {

double tugas, kuis, mid, uas;

// Input nilai

std::cout << "Masukkan nilai tugas: ";

std::cin >> tugas;

std::cout << "Masukkan nilai kuis: ";

std::cin >> kuis;

std::cout << "Masukkan nilai mid: ";

std::cin >> mid;

std::cout << "Masukkan nilai uas: ";

std::cin >> uas;

// Menghitung nilai akhir

double nilaiAkhir = hitungNilaiAkhir(tugas, kuis, mid, uas);


// Menampilkan hasil

std::cout << "Nilai akhir: " << nilaiAkhir << std::endl;

std::cout << "Nilai huruf: " << getNilaiHuruf(nilaiAkhir) << std::endl;

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.

Fungsi getNilaiHuruf digunakan untuk menentukan nilai huruf berdasarkan nilai


akhir yang diberikan. Fungsi ini mengembalikan nilai huruf berdasarkan kondisi yang
ditentukan.

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>

using namespace std;

class TodoList {

private:

stack<string> tasks;

stack<string> undoStack;

stack<string> redoStack;

public:

void addTask(const string& task) {

tasks.push(task);

undoStack.push("add");

redoStack = stack<string>(); // Mengosongkan redo stack

void undo() {

if (undoStack.empty()) {

cout << "Tidak ada aksi undo yang tersedia." << endl;

return;

}
string action = undoStack.top();

undoStack.pop();

if (action == "add") {

string task = tasks.top();

tasks.pop();

redoStack.push("add");

cout << "Aktivitas '" << task << "' telah dihapus." << endl;

} else if (action == "remove") {

string task;

cout << "Aktivitas yang dihapus: ";

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;

string action = redoStack.top();

redoStack.pop();
if (action == "add") {

string task = tasks.top();

tasks.pop();

undoStack.push("add");

cout << "Aktivitas '" << task << "' telah ditambahkan kembali." << endl;

} else if (action == "remove") {

string task = tasks.top();

tasks.pop();

undoStack.push("remove");

cout << "Aktivitas '" << task << "' telah dihapus kembali." << endl;

void printTasks() {

if (tasks.empty()) {

cout << "Tidak ada aktivitas dalam daftar." << endl;

return;

cout << "Daftar Aktivitas:" << endl;

stack<string> reversedTasks = tasks;

while (!reversedTasks.empty()) {

cout << reversedTasks.top() << endl;

reversedTasks.pop();

}
};

int main() {

TodoList todoList;

while (true) {

cout << "\nMenu:" << endl;

cout << "1. Tampilkan Daftar Aktivitas" << endl;

cout << "2. Tambah Aktivitas" << endl;

cout << "3. Undo" << endl;

cout << "4. Redo" << endl;

cout << "5. Keluar" << endl;

int choice;

cout << "Pilih menu (1/2/3/4/5): ";

cin >> choice;

cin.ignore(); // Mengabaikan newline character

switch (choice) {

case 1:

todoList.printTasks();

break;

case 2: {

string task;

cout << "Masukkan nama aktivitas: ";

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

std::cout << "Menu: " << std::endl;

std::cout << "1. Tambah Barang" << std::endl;

std::cout << "2. Hapus Barang" << std::endl;

std::cout << "3. Keluar" << std::endl;

std::cout << "Pilih menu (1-3): ";

int pilihan;

std::cin >> pilihan;

if (pilihan == 1) {

Barang barang;

std::cout << "Masukkan nama barang: ";

std::cin >> barang.nama;

std::cout << "Masukkan jumlah barang: ";

std::cin >> barang.jumlah;


gudang.push_back(barang);

std::cout << "Barang berhasil ditambahkan ke dalam gudang." << std::endl;

} else if (pilihan == 2) {

std::string namaBarang;

int jumlahBarang;

std::cout << "Masukkan nama barang yang akan dihapus: ";

std::cin >> namaBarang;

std::cout << "Masukkan jumlah barang yang akan dihapus (maksimal 2): ";

std::cin >> jumlahBarang;

bool barangDitemukan = false;

for (int i = 0; i < gudang.size(); i++) {

if (gudang[i].nama == namaBarang) {

if (gudang[i].jumlah >= jumlahBarang) {

gudang[i].jumlah -= jumlahBarang;

std::cout << "Barang berhasil dihapus dari gudang." << std::endl;

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

std::cout << "Barang tidak ditemukan dalam gudang." << std::endl;

} else if (pilihan == 3) {

break;

} else {

std::cout << "Pilihan tidak valid. Silakan pilih menu yang sesuai." << std::endl;

std::cout << std::endl;

return 0;

Anda mungkin juga menyukai