Tugas Kelompok Pemrograman
Tugas Kelompok Pemrograman
Disusunoleh :
Berdasarkanhasilsensus, diketahuibahwa :
1. Setiap 7 detik, 1 bayilahir
2. Setiap 13 detik, 1 orang meninggal dunia
3. Setiap 35 detik, 1 imigranmasukkenegaratersebut
Jikadiketahuibahwa :
1. 1 tahun = 365 hari
2. 1 hari = 24 jam
3. 1 jam = 60 menit
4. 1 menit = 60 detik
5. Rata-rata usiaharapanhidup di negaratersebutadalah 75 tahun
Berikutiniadalah programdarisuatupenyelesaianmasalahdiatas:
#include<iostream>
#include<string.h>
#include<sstream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
void HITUNG_PENDUDUK (intselisih_tahun);
void INPUT_CHECK_SAVE (string &waktu, int&simpan_waktu);
// Deklarasimenjadivariabel global agar dapatdigunakan di seluruh main program
dan
subprogram
// Menggunakan array denganukuran 75
yaituuntukmengetahuipertumbuhanusiapenduduk,
karena
// usiaharapanhidupnya 75 tahunmakadibuat array denganukuran 75
float usia[75];
intpada_tahun;
intmain(){
srand(time(0));
for (inti=0; i<75; i++) usia[i] = 0;
cout<< " Program MemprediksiJumlahPendudukpadaTahunMendatang\n\n"
<< "Diketahui :\n Jumlahpenduduk di suatunegarasaatini (tahun 2017) adalah
307.357.870\n "
<< "Dengankomposisi : \n usia<20 tahun = 15 % \n usia 20-50 tahun = 45
% \n usia>50 tahun = 40 % \n\n";
// digunakantipe data float karenajikamenggunakan integer (int) akanmemengaruhi
hasilakhirperhitungandanketepatannya
float jumlah = 307357870;
float usia20 = 46103680.5 ;
float usia20_50 = 138311041.5 ;
float usia50 = 122943148 ;
// mencaribanyakpenduduktiapusia :
// cari rata-rata usiapenduduktiap interval usia
// denganmembagi total pendudukpada interval denganpanjang interval
float rata1_19 = usia20/19, rata20_50 = usia20_50/31, rata50 = usia50/25;
for (inti=0; i<19 ;i++) usia[i] = rata1_19;
for (inti=19; i<50; i++) usia[i] = rata20_50;
for (inti=50; i<75; i++) usia[i] = rata50;
intselisih_tahun;
string waktu;
cout<< "Masukkan tahun yang akan di prediksi (selisih max = 100 tahun) : ";
INPUT_CHECK_SAVE (waktu, selisih_tahun);
// menghitungdinamikapenduduktiapusia
HITUNG_PENDUDUK (selisih_tahun);
// Karena terjadidinamikapendudukmakadilakukanperhitunganulangdengan
// menginisialisasipendudukawalmenjadi 0;
usia20 = 0; usia20_50 = 0; usia50 = 0;
// menghitungpenduduktiap interval
for (inti=0; i<19; i++) usia20 += usia[i];
for (inti=19; i<50; i++) usia20_50 += usia[i];
for (inti=50; i<75; i++) usia50 += usia[i];
// persentasepertumbuhanpenduduk
float persen_tumbuh = 100 * (usia20 + usia20_50 + usia50 - jumlah)/jumlah;
// menghitung total penduduksetelahberubah
jumlah = usia20 + usia20_50 + usia50;
// menghitungprosentasependuduktiapusia
float persen20 = 100 * usia20 /jumlah ;
float persen20_50 = 100 * usia20_50/jumlah;
float persen50 = 100 - persen20 - persen20_50;
cout<<endl
<< fixed <<setprecision(0)
<< "Jumlahpendudukdalam " <<selisih_tahun<< " tahun yang akandatang
adalah " <<jumlah<<endl
<< fixed <<showpoint<<setprecision(2)
<< "Prosentasepertumbuhanpendudukselama " <<selisih_tahun<< " tahun
adalah " <<persen_tumbuh<< " %\n"
<< "Komposisipendudukpadatahun " <<pada_tahun<< " adalahsbb :\n"
<<setw(10) << persen20 << " % usia< 20 tahun\n"
<<setw(10) << persen20_50 << " % usia 20 - 50 tahun\n"
<<setw(10) << persen50 << " % usia> 50 tahun \n\n";
}
//***********************************************************************************
********************//
void HITUNG_PENDUDUK(intselisih_tahun){
for (inti=selisih_tahun; i>0; i--) {
// Karena terjadipertambahanusiamakadiubahpenyimpanan array-nya
berdasarkanusia
for (int j=74; j>0; j--){
usia[j] = usia[j-1];
}
// 1 tahun = 31,536,000 detik
// bayilahirtiap 7 detik
// makadalam 1 tahun, bayilahir = 31,536,000/ 7 = 4,505,142
usia[0] = 4505142;
// imigran = tiap 35 detikimigranmasukdenganusia 20 - 50
// catatan = usia 20 - 50, index array-nyamulaidari 19 - 49
for (inti = 35; i<=31536000; i+=35) {
intusia_imigran = rand() % 31 + 19;
usia[usia_imigran]++;
}
// setiap 13 detikterjadikematiandenganusia random
for (inti = 13; i<=31536000; i+=13){
intmati = rand() % 75;
usia[mati]--;
}
}
}
//***********************************************************************************
********************//
void INPUT_CHECK_SAVE (string &waktu, int&simpan_waktu){
cin>>waktu;
intpanjangStr = waktu.size();
bool sesuai = false;
// pengecekandibawahinimaksutdnya :
// bahwatahunsaatiniharusnyahanyamemiliki4 digit (panjang string = 4) selainitu
ditolak
// saatiniadalahtahun 2017, karenarentangprediksimaksimalnya 100 makatahun
maksimal = 2117
// makapasti digit ke 1 masukkantahunadalah 2 (waktu[0] == 2) mewakili 2000
// dan digit ke 2 masukkantahunadalah 0 atau 1 mewakili 0 - 100,
// karenarentang-nyahanya 2017 - 2117, terlihatbahwa digit keduanyapasti 1 atau 0
// jadidigunakanpengecekanpada digit kedua (waktu[1] == '1' || waktu[1] == '0')
if (panjangStr == 4 &&waktu[0] == '2' && (waktu[1] == '1' || waktu[1] == '0')){
// mengecekkarakter digit ke 3 dan 4
// jikaadakarakter yang bukansebuahangkamakadiulang
for (inti=2; i<panjangStr; i++){
switch (waktu[i]){
case '0' :sesuai = true; break;
case '1' :sesuai = true; break;
case '2' :sesuai = true; break;
case '3' :sesuai = true; break;
case '4' :sesuai = true; break;
case '5' :sesuai = true; break;
case '6' :sesuai = true; break;
case '7' :sesuai = true; break;
case '8' :sesuai = true; break;
case '9' :sesuai = true; break;
}
// jikaada char yang bukansebuahangkamakadiulang
if (!(sesuai))
goto REPEAT;
// kembalikan false untukpengecekanselanjutnya
sesuai = false;
}
// setelahdicekapakahselisihtahunmemenuhidanmasukanberupasebuah
bilanganasli
// yaitumengubahbilanganasli yang tadinya string kedalambentuktipe data
integer (bilanganasli)
// menggunakan object yang tersediadari library <sstream>
istringstream convert(waktu);
convert >>simpan_waktu;
pada_tahun = simpan_waktu;
// Dikurang 2017 karenauntukmencariselisihtahunsaatini (2017) dengan
tahunmendatang
simpan_waktu -= 2017;
// catatan = makstahunprediksiyaitu 2117 (maksselisih = 100 tahun)
if (!(0 <= simpan_waktu&&simpan_waktu<= 100))
goto REPEAT;
}
else {
REPEAT :
cout<<endl;
cout<< "Waktuprediksi yang Andamasukkantidakmemenuhisyarat (2017 -
2117)\n"
<< "Silakanmasukkanulangtahun yang akandiprediksi : ";
INPUT_CHECK_SAVE (waktu, simpan_waktu);
}
}
//***********************************************************************************
********************//
Deskripsi :
Algoritmainidigunakanuntukmenghitungpenduduk.
Langkah :
Algoritma ini digunakan untuk mengecek apakah waktu yang diinputkan memenuhi syarat atau
tidak, yaitu 2017-2117.
Langkah :
Pertama input tahun yang akan dimasukan, jika angka pertamanya adalah 2 dan angka keduanya
adalah 0 atau 1 maka lanjut ke tahap berikutnya, jika tidak maka input ulang tahun yang akan
dimasukan. Selanjutnya, untuk mengecek waktu yang kita inputkan memenuhisyaratatautidak,
angka yang kitainputkandikurangidengan 2017. Jikasetelahdikurangi 2017 hasilnyaadalah 1
sampai 100 berartiwaktu yang kitainputkanmemenuhisyarat.
Start
variabel global
Intpada_tahun
float usia [75]
variabellokal
Float jumlah=3073557870
Float usia20= 46103680,5
Float usia20_50= 138311041,5
Float usia50= 122943148
Inti,j
Float persen20
Float persen20_50
Float persen50
Float persen_tumbuh
intselisih_tahun
string waktu
Input pada_tahun
i=0
no no no
i<19 i<50 i<75
i++ yes
i++ yes
i++ yes
input_check_save(waktu,selisih_tahun)
hitung_penduduk(selisih_tahun)
usia20=0
usia20_50=0
usia50=0
j=0
no
j<19 j<50 no j<75 no
output
persen_tumbuh
jumlah
persen20
persen20_50
persen50
end