Anda di halaman 1dari 12

LAPORAN TUGAS PEMROGRAMAN

Dosen : Faizah, S.Kom., M.Kom

Disusunoleh :

1. Muhammad Mukharir (17/409442/PA/17749)


2. YosephineFianti F. (17/409513/PA/17820)
3. FisnaBungaMeliani (17/411320/PA/17840)
4. Tiara RizkiPratiwi (17/411327/PA/17847)
5. AchyaRizkiElyasa (17/412609/PA/17928)
6. Bara Samudra Syuhada (17/412713/PA/18032)

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM


UNIVERSITAS GADJAH MADA
YOGYAKARTA
2017
Soal :
Diketahuijumlahpenduduk di suatunegarasaatiniadalah307.357.870,dengankomposisi :
usia< 20 tahun = 15%, usia 20-50 tahun = 45% danusia> 50 tahun = 40%.

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 :

Karena terjadipertambahanusiamakadiubahpenyimpanan array-


nyaberdasarkanusia. 1 tahun = 31,536,000 detik, bayilahirtiap 7 detikmakadalam 1
tahun, bayilahir = 31,536,000/ 7 = 4,505,142
imigran = tiap 35 detikimigranmasukdenganusia 20 50
catatan = usia 20 - 50, index array-nyamulaidari 19 49
setiap 13 detikterjadikematiandenganusia random
end
Deskripsi :

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

usia[i]= usia20_50/31 usia[i]= usia50/25


usia[i]= usia20/19

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

j++ j++ yes j++ yes


yes

usia20+= usia[j] usia20_50+= usia[j] usia50+= usia[j]

persen_tumbuh= 100*(usia20 + usia20_50 + usia50-jumlah) /jumlah


jumlah= usia20 + usia20_50 + usia50
persen20= 100*usia20/jumlah
persen20_50= 100*usia20_50/jumlah
persen50= 100 - persen20 - persen20_50

output
persen_tumbuh
jumlah
persen20
persen20_50
persen50

end

Anda mungkin juga menyukai