fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_map>
  4. #include <iomanip>
  5. #include <string>
  6.  
  7. const long long VOL_PER_DONOR = 450; // volume darah per donor dalam ml
  8.  
  9. // Struktur data penyimpan data donor: desa dan golongan darah
  10. struct DataDonor {
  11. int ID_Desa;
  12. char GolonganDarah;
  13. };
  14.  
  15. // Struktur hasil per golongan darah: jumlah pendonor dan volume total
  16. struct HasilGolongan {
  17. int Pendonor = 0;
  18. long long Volume_ml = 0;
  19. };
  20.  
  21. // Tipe data hasil detail per golongan darah (map golongan darah ke hasil)
  22. using HasilDetail = std::unordered_map<char, HasilGolongan>;
  23. // Tipe data sistem data donor darah sosial per desa
  24. using SistemDataDDS = std::unordered_map<int, std::vector<DataDonor>>;
  25.  
  26. // Fungsi hitung dan tampilkan hasil untuk satu desa
  27. void HitungDanTampilkanDDS(int ID_Desa, const SistemDataDDS& DataDDS) {
  28. auto it = DataDDS.find(ID_Desa);
  29. if (it == DataDDS.end()) {
  30. std::cout << "Desa ID " << ID_Desa << " tidak ditemukan." << std::endl;
  31. return;
  32. }
  33.  
  34. HasilDetail hasil;
  35.  
  36. // Hitung jumlah pendonor per gol darah
  37. for (const auto& donor : it->second) {
  38. char gol = std::toupper(donor.GolonganDarah);
  39. hasil[gol].Pendonor++;
  40. }
  41.  
  42. // Tampilkan hasil
  43. std::cout << "\n--- HASIL DESA ID: " << ID_Desa << " ---" << std::endl;
  44. std::cout << std::left << std::setw(10) << "GOL"
  45. << std::setw(12) << "JUMLAH"
  46. << "VOLUME (ml)" << std::endl;
  47. std::cout << "--------------------------------" << std::endl;
  48.  
  49. for (const auto& pair : hasil) {
  50. long long volume = pair.second.Pendonor * VOL_PER_DONOR;
  51. std::string gol_str = (pair.first == 'X') ? "AB" : std::string(1, pair.first);
  52. std::cout << std::left << std::setw(10) << gol_str
  53. << std::setw(12) << pair.second.Pendonor
  54. << volume << std::endl;
  55. }
  56. std::cout << "--------------------------------" << std::endl;
  57. }
  58.  
  59. // Program utama demonstrasi penggunaan
  60. int main() {
  61. SistemDataDDS data_sistem;
  62.  
  63. // Contoh data desa 101 dan 202
  64. data_sistem[101] = {{101, 'A'}, {101, 'B'}, {101, 'A'}, {101, 'O'}, {101, 'X'}}; // X = AB
  65. data_sistem[202] = {{202, 'O'}, {202, 'O'}, {202, 'B'}, {202, 'X'}};
  66.  
  67. // Tampilkan hasil per desa
  68. HitungDanTampilkanDDS(101, data_sistem);
  69. HitungDanTampilkanDDS(202, data_sistem);
  70.  
  71. return 0;
  72. }
  73.  
Success #stdin #stdout 0s 5292KB
stdin
8
3
3 1 150
1 2 250
3 1 300
1 3 450
2 2 200
3 4 350
1 4 500
2 1 500
stdout
--- HASIL DESA ID: 101 ---
GOL       JUMLAH      VOLUME (ml)
--------------------------------
AB        1           450
O         1           450
A         2           900
B         1           450
--------------------------------

--- HASIL DESA ID: 202 ---
GOL       JUMLAH      VOLUME (ml)
--------------------------------
AB        1           450
O         2           900
B         1           450
--------------------------------