Anda di halaman 1dari 3

Nama : SANTY FITRIANI

Kelas/ No. Absen : XI-F/34

PENUGASAN 2
1. Membuat pseudecode dari suproblem 3 (Memilih Tempat Pelaksanaan Donor Darah)
procedure Memilih_Tempat_Pelaksanaan_Donor_Darah(DDS, kode_golongan, kebutuhan_darah)
inisialisasi total_darah = 0
inisialisasi desa_darah sebagai dictionary untuk menyimpan volume darah per desa

urutkan DDS berdasarkan stok darah dari terbesar ke terkecil

untuk setiap desa, stok_darah in DDS:


jika kebutuhan_darah <= 0:
keluar dari loop

jika stok_darah > 0:


jika stok_darah >= kebutuhan_darah:
desa_darah[desa] = kebutuhan_darah
total_darah = total_darah + kebutuhan_darah
kebutuhan_darah = 0
lainnya:
desa_darah[desa] = stok_darah
total_darah = total_darah + stok_darah
kebutuhan_darah = kebutuhan_darah - stok_darah

jika total_darah >= kebutuhan_darah:


cetak "Kebutuhan darah dipenuhi dengan surplus", total_darah - kebutuhan_darah, "ml"
untuk setiap desa, darah in desa_darah:
cetak "Desa", desa, ":", darah, "ml"
lainnya:
cetak "Kebutuhan darah masih kurang", kebutuhan_darah - total_darah, "ml"

Pseudocode di atas menggambarkan langkah-langkah yang diambil oleh algoritma dalam


memilih tempat pelaksanaan donor darah untuk memenuhi kebutuhan darah dengan
meminimumkan jumlah desa yang dikunjungi.

2. Program masukan
1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main() {
7 int N, M;
8 cout << "Masukkan jumlah pendonor DDS (1-1000): ";
9 cin >> N; // jumlah DDS
10 cout << "Masukkan jumlah desa (1-10): ";
11 cin >> M; // jumlah desa
12
13 vector<vector<vector<int>>> pendonor (M, vector<vector<int>>(4, vector<int>(2, 0)));
14 cout << "Masukkan kode desa, golongan darah (1-4), dan volume darah (0-500 ml ): " <<
endl;
15 for (int i = 0; i < N; i++) {
16 int kodeDesa, golonganDarah, volumeDarah;
17 cin >> kodeDesa >> golonganDarah >> volumeDarah;
18 pendonor[kodeDesa - 1][golonganDarah - 1][0]++;
19 pendonor[kodeDesa - 1][golonganDarah - 1][1] += volumeDarah;
20 }
21
22 //Menampilkan banyaknya pendonor dan total volume darah pada masing-masing desa
23 cout << "Berikut banyaknya pendonor dan total volume darahnya pada masing-masing
desa: " << endl;
24 for (int i = 0; i < M; i++) {
25 cout << "Desa " << i + 1 << ":" << endl;
26 for (int j = 0; j < 4; j++) {
27 string golongan;
28 if (j == 0) golongan = "A";
29 else if (j == 1) golongan = "B";
30 else if (j == 2) golongan = "AB";
31 else golongan = "0";
32
33 cout << golongan << ": " << pendonor[1][j][0] << " " << pendonor[i][j][1] << endl;
34 }
35 }
36
37 // Meminta informasi kebutuhan darah tambahan
38 int kodeGolonganDarah, tambahanVolumeDarah;
39 cout << "Masukkan kode golongan darah yang habis dan volume darah yang dibutuhkan
(dalam ml): " << endl;
40 cin >> kodeGolonganDarah >> tambahanVolumeDarah;
41
42 // Proses pencarian solusi
43 vector<int> desaTerpilih;
44 int sisaVolume = tambahanVolumeDarah;
45
46 for (int i = 0; i < M; i++) {
47 for (int j = i + 1; j < M; j++) {
48 if (pendonor[i][kodeGolonganDarah - 1][1] + pendonor[j][kodeGolonganDarah –
1][1] >= sisaVolume) {
49 desaTerpilih.push_back(i + 1);
50 desaTerpilih.push_back(j + 1);
51 sisaVolume = 0;
52 break;
53 }
54 }
55 if (sisaVolume == 0) {
56 break;
57 }
58 }
59
60 // Output hasil pencarian solusi
61 if (sisaVolume == 0) {
62 cout << "Desa yang akan dilaksanakan bakti golongan darah";
63 if (kodeGolonganDarah == 1) {
64 cout << "A";
65 } else if (kodeGolonganDarah == 2) {
66 cout << "B";
67 } else if (kodeGolonganDarah == 3) {
68 cout << "0";
69 } else {
70 cout << "AB";
71 }
72 cout << " beserta jumlah darah yang dibutuhkan:" << endl;
73 for (int i = 0; i < desaTerpilih.size(); i++) {
74 cout << "Desa " << desaTerpilih[i] << " : " << pendonor [desaTerpilih [i] –
1][kodeGolonganDarah - 1][1] << " ml" << endl;
75 }
76 cout << "Kebutuhan darah dipenuhi dengan surplus " << (pendonor [desaTerpilih[0]
- 1][kodeGolonganDarah - 1][1] + pendonor [desaTerpilih[1] –
1][kodeGolonganDarah - 1][1]) - tambahanVolumeDarah << " ml" << endl;
77 } else {
78 cout << "Kebutuhan darah masih kurang " << sisaVolume << "ml" << endl;
79 }
80
81 return 0;
82 }

Anda mungkin juga menyukai