Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1...

44
Catatan Kuliah Pemprograman Komputer II disusun oleh Nanda Arista Rizki, M.Si. PROGRAM STUDI STATISTIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS MULAWARMAN 2018

Transcript of Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1...

Page 1: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Catatan Kuliah

Pemprograman Komputer II

disusun oleh

Nanda Arista Rizki, M.Si.

PROGRAM STUDI STATISTIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS MULAWARMAN

2018

Page 2: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Daftar Isi

Daftar Isi ii

1 Pengenalan Bahasa C++ 1

1.1 Menampilkan Hasil Pada Layar . . . . . . . . . . . . . . . . . . . . . 1

1.2 Jenis-Jenis Tipe Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Menggunakan Header cmath . . . . . . . . . . . . . . . . . . . . . . 8

1.4 Pengkondisian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.5 Perulangan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.6 Instruksi goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.7 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.8 Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.9 Membuat Header File . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2 Aplikasi Matematik 25

2.1 Bilangan Biner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.2 Faktor Persekutuan Terbesar (FPB) . . . . . . . . . . . . . . . . . . . 26

2.3 Mencari FPB Menggunakan Metode Euclid . . . . . . . . . . . . . . . 28

2.4 Faktor Bilangan Prima . . . . . . . . . . . . . . . . . . . . . . . . . . 30

i

Page 3: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

DAFTAR ISI ii

2.5 Bilangan Acak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.6 Distribusi Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.7 Membangkitkan Peubah Acak . . . . . . . . . . . . . . . . . . . . . . 37

Page 4: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

BAB 1

Pengenalan Bahasa C++

1.1 Menampilkan Hasil Pada Layar

Bahasa C++ adalah bahasa pemprograman komputer yang diciptakan oleh Bjarne

Stroustrup, yang merupakan perkembangan dari bahasa C. Bjarne Stroustrup per-

tama kali mengembangkan C++ pada awal 1980-an. Bahasa C++ adalah bahasa

pemprograman dengan tingkat lebih tinggi dari bahasa C, karena bahasa C++ ber-

sifat Object Oriented Programming (OOP) dan memberikan tambahan fungsi baru

dari bahasa C. Perbedaannya dengan bahasa C, pada bahasa C++ lebih menguta-

makan data dibandingkan prosesnya (langkah-langkah prosedural).

Perintah-perintah bahasa C++ yang diberikan kepada compiler untuk me-

lakukan definisi, memasukkan file library, dan lain-lain; menggunakan tanda ”#”.

Header iostream dibutuhkan untuk memanggil perintah membaca input dari ke-

yboard dan menampilkannya pada layar. Selain iostream , beberapa header yang

dapat digunakan pada bahasa C++, antara lain cstdio (untuk perintah dalam

bahasa C seperti printf dan scanf ), cmath (untuk operasi-operasi matematika

seperti trigonometri), cstring (untuk memanipulasi string), dan lain sebagainya.

Perintah main() adalah fungsi utama pada program C++. Pernyataan di-

akhiri dengan titik-koma ”;”. Blok berada dalam kurung kurawal ”{ }”. Kalimat

(komentar) yang ditulis setelah tanda ”//” tidak akan dieksekusi. Komentar yang

lebih dari 1 baris, dapat menggunakan tanda ”/* */”. Untuk lebih jelasnya, ikuti

1

Page 5: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

latihan berikut:

Latihan 1:

1 #include <iostream>

2 using namespace std;

3 /*

4 Program dalam bahasa C++ untuk menampilkan kalimat pada layar.

5 Gunakan perintah cout <<

6 */

7

8 int main() {9 cout << "Hallo, saat ini sedang belajar bahasa C++";

10 cout << endl;

11 cout << "Semoga bisa mahir dalam \"Bahasa Pemprograman\", baik C ...

maupun C++.";

12 return 0;

13 }

Perintah cout mengirimkan informasi yang ingin ditulis pada layar komputer. Per-

hatikan juga tanda ”<<” yang selalu berada di kanan perintah cout. Cara lain

untuk menampilkan hasil yang sama yaitu mengubah perintah-perintah pada fungsi

utama seperti berikut.

Latihan 2:

1 #include <iostream>

2 using namespace std;

3

4 int main() {5 cout << "Hallo, saat ini sedang belajar bahasa C++" << endl

6 << "Semoga bisa mahir dalam \"Bahasa Pemprograman\", baik C ...

maupun C++.";

7 return 0;

8 }

Perintah untuk membaca input dari keyboard yaitu menggunakan ”cin >>”. Per-

hatikan bahwa tanda yang digunakan untuk perintah cin berbeda dengan yang

Pemprograman Komputer II 2 Nanda Arista Rizki, M.Si.

Page 6: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

digunakan untuk perintah cout . Tanda ”<<” dalam perintah cout dapat diarti-

kan sebagai penyalur data dari sintaks dalam jendela command ke jendela output.

Sebaliknya, penggunaan ”>>” dalam perintah cin diperlukan ketika ingin menghu-

bungkan suatu ketikan keyboard dari jendela output ke sistem command yang ingin

diolah.

Latihan 3:

1 #include <iostream>

2 using namespace std;

3

4 int main() {5 string nama;

6 int nim;

7 cout << "Nama = "; cin >> nama;

8 cout << "NIM = "; cin >> nim;

9 system("cls"); //menghapus tampilan

10 cout << "Nama Saya " << nama << " dan NIM Saya " << nim << endl;

11 system("pause"); //menahan hasil

12 return 0;

13 }

Perintah system(”cls”) dan system(”pause”) masing-masing adalah perintah

untuk menghapus tampilan layar dan menahan hasil layar (seperti perintah getch

dalam bahasa C).

1.2 Jenis-Jenis Tipe Data

Bahasa C++ mengenal 4 tipe data, yaitu integer, float, karakter/teks, dan boolean.

Tipe int (integer) digunakan untuk bilangan bulat. Berikut adalah latihan untuk

menggunakan tipe int untuk melakukan perhitungan sederhana.

Latihan 4:

1 #include <iostream>

Pemprograman Komputer II 3 Nanda Arista Rizki, M.Si.

Page 7: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

2 using namespace std;

3

4 int main() {5 system("cls");

6 int x;

7 int y;

8

9 x = 3;

10 y = 4;

11

12 cout << "x=" << x << endl;

13 cout << "y=" << y << endl;

14 cout << "x+y=" << x+y << endl;

15 return 0;

16 }

Pada Latihan 4, variabel-variabel yang didefinisikan menggunakan tipe data int

adalah x dan y. Selanjutnya adalah mengenal batas nilai tipe int .

Latihan 5:

1 #include <iostream>

2 using namespace std;

3

4 int main() {5 int juta = 1000000;

6 int triliun = juta * juta;

7

8 cout << "Jika menggunakan tipe variabel \"int\", maka " << juta ...

<< " kuadrat adalah "

9 << triliun << "." << endl;

10 return 0;

11 }

Selanjutnya, ubahlah tipe int (pada Latihan 5) menjadi long , long long , float ,

atau long double . Perhatikan perbedaan hasilnya pada layar komputer.

Selain bilangan, tipe data pada bahasa C++ yaitu karakter dan teks. Perintah

untuk mendefinisikan tipe data karakter adalah char yang diikuti dengan variabel-

Pemprograman Komputer II 4 Nanda Arista Rizki, M.Si.

Page 8: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

nya, sedangkan untuk tipe teks menggunakan string .

Latihan 6:

1 #include <iostream>

2 using namespace std;

3

4 int main() {5 char x;

6 x = 'A';

7 cout << x << endl;

8 }

Tipe data selanjutnya adalah boolean, yang merepresentasikan logika yang ber-

nilai benar (1) atau salah (0). Bahasa C++ menyediakan operator logika untuk

menyatakan dan, atau, tidak; dimana masing-masing dinyatakan dalam bentuk

”&&”, ”||”, dan ”!”. Operator perbandingan pada dua variabel yang menghasilkan

nilai dengan tipe boolean yaitu ”==”, ”! =”, ”<”, ”<=”, ”>”, dan ”>=”.

Latihan 7:

1 #include <iostream>

2 using namespace std;

3

4 int main()

5 {6 int a=1;

7 int b=2;

8

9 cout << (a>b) << endl;

10 cout << (a≤b) << endl;

11 cout << (a!=b) << endl;

12 cout << (a>0 && b≥0) << endl;

13 }

Suatu program dikatakan efisien jika memiliki ukuran file yang kecil. Selan-

jutnya adalah program untuk mengetahui ukuran berbagai tipe data (dalam satuan

Pemprograman Komputer II 5 Nanda Arista Rizki, M.Si.

Page 9: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

byte).

Latihan 8:

1 #include <iostream>

2 using namespace std;

3 /*

4 Menampilkan ukuran berbagai tipe data dalam satuan byte.

5 */

6 int main() {7 // Tipe−tipe integer:

8 cout << "Ukuran tipe \"short\" adalah " << sizeof(short)

9 << " byte" << endl;

10 cout << "Ukuran tipe \"int\" adalah " << sizeof(int)

11 << " byte" << endl;

12 cout << "Ukuran tipe \"long\" adalah " << sizeof(long)

13 << " byte" << endl;

14 // Nilai long long mungkin tidak tersedia di beberapa komputer

15 cout << "Ukuran tipe \"long long\" adalah " << sizeof(long long)

16 << " byte" << endl;

17

18 // Tipe karakter dan boolean:

19 cout << "Ukuran tipe \"char\" adalah " << sizeof(char) << " ...

byte" << endl;

20 cout << "Ukuran tipe \"bool\" adalah " << sizeof(bool) << " ...

byte" << endl;

21

22 // Tipe−tipe bilangan real:

23 cout << "Ukuran tipe \"float\" adalah " << sizeof(float)

24 << " byte" << endl;

25 cout << "Ukuran tipe \"double\" adalah " << sizeof(double)

26 << " byte" << endl;

27 // Nilai long double mungkin tidak tersedia di beberapa komputer

28 cout << "Ukuran tipe \"long double\" adalah " << sizeof(long double)

29 << " byte" << endl;

30

31 return 0;

32 }33 //Hasilnya bisa berbeda, tergantung komputer yang digunakan

Pemprograman Komputer II 6 Nanda Arista Rizki, M.Si.

Page 10: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Setelah mengetahui ukuran masing-masing tipe, kemudian adalah mengetahui batas-

batas (nilai ekstrim) dari tipe data integer dan real.

Latihan 9:

1 #include <iostream>

2 #include <climits> // minimum & maksimum ukuran tipe integer

3 #include <cfloat> // minimum & maksimum ukuran tipe real

4 using namespace std;

5

6 int main() {7 cout << "Nilai maksimum tipe \"short\" adalah " << SHRT MAX << endl;

8 cout << "Nilai minimum tipe \"short\" adalah " << SHRT MIN << endl;

9

10 cout << "Nilai maksimum tipe \"int\" adalah " << INT MAX << endl;

11 cout << "Nilai minimum tipe \"int\" adalah " << INT MIN << endl;

12

13 cout << "Nilai maksimum tipe \"long\" adalah " << LONG MAX << endl;

14 cout << "Nilai minimum tipe \"long\" adalah " << LONG MIN << endl;

15

16 // Nilai long long mungkin tidak tersedia di beberapa komputer

17 cout << "Nilai maksimum tipe \"long long\" adalah " << LLONG MAX ...

<< endl;

18 cout << "Nilai minimum tipe \"long long\" adalah " << LLONG MIN ...

<< endl;

19

20 cout << "Nilai positif terkecil tipe \"float\" adalah "

21 << FLT MIN << endl;

22 cout << "Nilai epsilon terkecil tipe \"float\" adalah "

23 << FLT EPSILON << endl;

24 cout << "Nilai maksimum tipe \"float\" adalah "

25 << FLT MAX << endl;

26

27 cout << "Nilai positif terkecil tipe \"double\" adalah "

28 << DBL MIN<< endl;

29 cout << "Nilai epsilon terkecil tipe \"double\" adalah "

30 << DBL EPSILON << endl;

31 cout << "Nilai maksimum tipe \"double\" adalah "

32 << DBL MAX << endl;

33

Pemprograman Komputer II 7 Nanda Arista Rizki, M.Si.

Page 11: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

34 // Tipe long double mungkin tidak terdefinisi pada beberapa sistem

35 cout << "Nilai positif terkecil tipe \"long double\" adalah "

36 << LDBL MIN<< endl;

37 cout << "Nilai epsilon terkecil tipe \"long double\" adalah "

38 << LDBL EPSILON << endl;

39 cout << "Nilai maksimum tipe \"long double\" adalah "

40 << LDBL MAX << endl;

41

42 return 0;

43 }44 // Untuk beberapa komputer, menghasilkan output yang berbeda

1.3 Menggunakan Header cmath

Header cmath berguna dalam membuat program bahasa C++ yang menggunakan

fungsi-fungsi matematik. Fungsi-fungsi tersebut antara lain: abs , acos , acosh ,

asin , asinh , atan , atanh , cbrt , ceil , cos , cosh , erf , exp, floor , hypot , log ,

log10 , pow , sin , sinh , sqrt , tan , dan tanh . Selain itu, juga ada beberapa

konstanta-konstanta yang dapat digunakan (perhatikan Tabel 1.1). Namun, jika

ingin menggunakan konstanta-konstanta ini, maka ” USE MATH DEFINES”

harus didefinisikan terlebih dahulu sebelum menuliskan header cmath.

Tabel 1.1: Konstanta-Konstanta Pada Header cmath.h

Sintak NilaiM E eM LOG2E log2eM LOG10E log10eM LN2 ln 2M LN10 ln 10M PI πM PI 2 π/2M PI 4 π/4M 1 PI 1/πM 2 PI 2/πM 2 SQRTPI 2/

√π

M SQRT2√

2

M SQRT1 2 1/√

2

Pemprograman Komputer II 8 Nanda Arista Rizki, M.Si.

Page 12: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Berikut adalah contoh penggunaan header cmath.

Latihan 10:

1 #include <iostream>

2 #define USE MATH DEFINES

3 #include <cmath>

4 using namespace std;

5

6 int main() {7 cout << "sin(30) = " << sin(30*M PI/180) << endl;

8 cout << "cos(30) = " << cos(30*M PI/180) << endl;

9 cout << "tan(30) = " << tan(30*M PI/180) << endl;

10 cout << "asin(1/2) = " << asin(0.5)*180/M PI << endl;

11 cout << "acos(1/2) = " << acos(0.5)*180/M PI << endl;

12 cout << "atan(1/2) = " << atan(0.5)*180/M PI << endl;

13

14 cout << "erf(0,5) = " << erf(0.5) << endl;

15 cout << "exp(2) = " << exp(2) << endl;

16 cout << "ln(e) = " << log(M E) << endl;

17 cout << "log(100) = " << log10(100) << endl;

18 cout << "3ˆ2 = " << pow(3,2) << endl;

19 cout << "sqrt(9) = " << sqrt(9) << endl;

20 cout << "(27)ˆ(1/3) = " << cbrt(27) << endl;

21 cout << "|−8| = " << abs(−8) << endl;

22 cout << "ceil(1,5) = " << ceil(1.5) << endl;

23 cout << "floor(1,5) = " << floor(1.5) << endl;

24 cout << "sqrt(3ˆ2+4ˆ2) = " << hypot(3,4) << endl;

25 return 0;

26 }

1.4 Pengkondisian

Sepertihalnya bahasa C, pengkondisian dalam bahasa C++ juga menggunakan per-

intah if-else dan switch-case . Secara umum, struktur untuk perintah if-else-if

adalah sebagai berikut:

Pemprograman Komputer II 9 Nanda Arista Rizki, M.Si.

Page 13: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

1 if (ekspresi){2 pernyataan−pernyataan;3 }4 else if (ekspresi){5 pernyataan−pernyataan;6 }7 else {8 pernyataan−pernyataan;9 }

Perintah if-else-if digunakan untuk menyeleksi sebuah kondisi yang bernilai

benar atau salah. Pernyataan pada masing-masing if akan dijalankan hanya jika

kondisi di dalam logika if masing-masing bernilai benar. Lebih jelasnya, ikuti la-

tihan berikut.

Latihan 11:

1 #include <iostream>

2 using namespace std;

3 int main()

4 {5 long bil=0;

6 cout << "Masukan bilangan : ";

7 cin >> bil;

8 if(bil <0)

9 cout << bil << " adalah bilangan negatif " << endl;

10 else

11 cout << bil << " adalah bilangan non negatif" << endl;

12 return 0;

13 }

Perintah kondisi selanjutnya adalah switch-case . Berbeda dengan perintah

pengkondisian if-else-if , yang memanfaatkan logika true dan false (dua kemungki-

nan); perintah switch-case dapat digunakan untuk memilih dengan kemungkinan

yang lebih dari dua. Secara umum, struktur untuk perintah switch-case adalah

sebagai berikut:

Pemprograman Komputer II 10 Nanda Arista Rizki, M.Si.

Page 14: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

1 switch (ekspresi)

2 {3 case nilai konstanta1 :

4 statemen;

5 break;

6

7 case nilai konstanta2 :

8 statemen;

9 break;

10

11 default :

12 statemen alternatif;

13 }

Contoh penggunaan kondisi switch-case adalah sebagai berikut.

Latihan 12:

1 #include <iostream>

2 using namespace std;

3

4 int main()

5 {6 char huruf;

7 cout << "ketikkan sebuah huruf, lalu tekan [ENTER]" << endl;

8 cin >> huruf;

9

10 switch(huruf)

11 {12 case 'a':

13 {14 cout << "yang Anda ketik adalah a"; break;

15 }16 case 'i':

17 {18 cout << "yang Anda ketik adalah i"; break;

19 }20 case 'u':

21 {

Pemprograman Komputer II 11 Nanda Arista Rizki, M.Si.

Page 15: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

22 cout << "yang Anda ketik adalah u"; break;

23 }24 case 'e':

25 {26 cout << "yang Anda ketik adalah e"; break;

27 }28 case 'o':

29 {30 cout << "yang Anda ketik adalah o"; break;

31 }32 default:

33 cout << "yang Anda ketik adalah huruf konsonan"; endl;

34 }35 return 0;

36 }

Contoh lain untuk penggunaan kondisi switch-case adalah sebagai berikut.

Latihan 13:

1 #include <iostream>

2 #include <cmath>

3 using namespace std;

4

5 int main()

6 {7 int bil1,bil2;

8 cout << "ketikkan sebuah bilangan, lalu tekan [ENTER]" << endl;

9 cin >> bil1;

10 bil2=floor(log10(bil1));

11

12 switch(bil2)

13 {14 case 1:

15 {16 cout << "yang Anda ketik adalah puluhan"; break;

17 }18 case 2:

19 {20 cout << "yang Anda ketik adalah ratusan"; break;

Pemprograman Komputer II 12 Nanda Arista Rizki, M.Si.

Page 16: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

21 }22 case 3:

23 {24 cout << "yang Anda ketik adalah ribuan"; break;

25 }26 }27 return 0;

28 }

1.5 Perulangan

Perintah perulangan proses dalam sebuah program bahasa C++ adalah for , while ,

dan do. Struktur untuk perintah for adalah sebagai berikut:

1 for(inisialisasi; syarat; penambahan)

2 {3 statement;

4 }

Perulangan for digunakan jika telah diketahui jumlah perulangan yang diinginkan.

Lebih jelasnya, ikuti latihan berikut.

Latihan 14:

1 #include <iostream>

2 using namespace std;

3

4 int main()

5 {6 int i;

7 for (i=1; i≤100; i++) //pengulangan data dari 1 sampai 100

8 {9 if(i%10==0)

10 cout<<i<<endl; //tampilkan bilangan yang habis dibagi 10

11 }12 }

Pemprograman Komputer II 13 Nanda Arista Rizki, M.Si.

Page 17: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Struktur untuk perintah while adalah

1 while (syarat) {2 instruksi;

3 }

Instruksi atau perintah pada perulangan while dilakukan jika syaratnya terpenuhi.

Berikut contoh penggunaan untuk perulangan while .

Latihan 15:

1 #include <iostream>

2 using namespace std;

3

4 int main()

5 {6 int i=1;

7 while (i≤100)

8 {9 if(i%10==0)

10 cout<<i<<endl;

11 i++;

12 }13 }

Selanjutnya adalah perulangan do. Adapun strukturnya adalah sebagai berikut

1 do {2 instruksi;

3 }4 while (syarat);

Perulangan ini sama dengan perulangan while , namun hanya peletakannya saja

yang berbeda. Pada perulangan do, tanda ”;” juga melekat setelah perintah while .

Berikut adalah contoh penggunaannya:

Pemprograman Komputer II 14 Nanda Arista Rizki, M.Si.

Page 18: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Latihan 16:

1 #include <iostream>

2 using namespace std;

3

4 main()

5 {6 int i=1;

7 do

8 {9 if(i%10==0)

10 cout<<i<<endl;

11 i++;

12 }13 while (i≤100);

14 }

1.6 Instruksi goto

Bahasa C++ memiliki perintah goto yang digunakan untuk membuat lompatan

dalam program. Perintah ini mengarahkan eksekusi program ke pernyataan yang

diawali oleh sebuah label yang diakhiri dengan tanda titik dua ”:”. Secara umum,

penggunaan goto tidak dianjurkan karena dapat menyebabkan alur program susah

dipahami. Namun pada beberapa kasus sangat berguna. Misalnya pada pengkon-

disian switch-case , perintah goto digunakan untuk kembali ke menu utama.

Latihan 17:

1 #include <iostream>

2 using namespace std;

3 int main()

4 {5 int nilai=10;

6

7 tembus:

8 cout << nilai << ", ";

Pemprograman Komputer II 15 Nanda Arista Rizki, M.Si.

Page 19: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

9 nilai−−;10

11 if (nilai>0)

12 goto tembus;

13

14 cout << "selesai";

15 return 0;

16 }

Latihan 18:

1 #include <iostream>

2 using namespace std;

3 int main()

4 {5 int nilai=10;

6 int a;

7 int b;

8

9 for (a=1;a<10;a++)

10 for (b=1;b<10;b++)

11 if (a+b==10) goto kesini;

12

13 kesini:

14 cout << "a = " << a << ", b= " << b;

15 return 0;

16 }

Latihan 19:

1 #include <iostream>

2 using namespace std;

3

4 int main()

5 {6 int a;

7 int b;

8 int kali;

9 int tanda;

Pemprograman Komputer II 16 Nanda Arista Rizki, M.Si.

Page 20: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

10 char tanya;

11

12 cobalagi:

13 system("cls");

14 cout << "Masukkan bilangan pertama : "; cin >> a;

15 cout << "Masukkan bilangan kedua : "; cin >> b;

16

17 kali=a*b;

18 if(kali>0)

19 tanda=1;

20 else if(kali==0)

21 tanda=2;

22 else if(kali<0)

23 tanda=3;

24

25 switch(tanda)

26 {27 case 1:

28 {29 cout << "Hasil perkaliannya positif" << endl; break;

30 }31 case 2:

32 {33 cout << "Hasil perkaliannya 0" << endl; break;

34 }35 case 3:

36 {37 cout << "Hasil perkaliannya negatif" << endl; break;

38 }39 default:

40 cout << "Bilangan−bilangan yang Anda masukkan salah :(" ...

<< endl;

41 }42

43 tanyalagi:

44 cout << "Coba lagi (Y/N) ?";

45 cin >> tanya;

46 if (tanya=='Y' | | tanya=='y')

47 goto cobalagi;

48 else if (tanya=='N' | | tanya=='n')

49 cout << "Terimakasih :)" << endl;

50 else

Pemprograman Komputer II 17 Nanda Arista Rizki, M.Si.

Page 21: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

51 goto tanyalagi;

52 return 0;

53 }

1.7 Array

Untuk mendefinisikan variabel array harus diikuti banyaknya elemen pada variabel

tersebut. Misalnya ”int A[2];” digunakan untuk mendefinisikan variabel A dengan

2 elemen yang masing-masing bertipe integer. Berikut adalah latihan menggunakan

array.

Latihan 20:

1 #include <iostream>

2 #include <cmath>

3 using namespace std;

4

5 int main()

6 {7 int k;

8 float A[2];

9 float B[2];

10 float sum B;

11 double panjang A;

12

13 cout << "Program menghitung panjang vektor A di ruang Rˆ2" ...

<< endl;

14 for (k=0; k<2; k++)

15 {16 cout << "A[" << k+1 << "] = "; cin >> A[k];

17 }18

19 sum B=0;

20 for (k=0; k<2; k++)

21 {22 B[k]=A[k]*A[k];

23 sum B=sum B+B[k];

Pemprograman Komputer II 18 Nanda Arista Rizki, M.Si.

Page 22: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

24 }25

26 panjang A = sqrt(sum B);

27 cout << "Maka |A | = " << panjang A;

28 }

1.8 Fungsi

Pemanggilan kembali suatu instruksi dapat memanfaatkan suatu fungsi. Semua

variabel dan parameter dalam suatu fungsi bersifat lokal. Berikut adalah contoh

penggunaan fungsi:

Latihan 21:

1 #include <iostream>

2 using namespace std;

3

4 int fungsikuadrat(int a1, int a2, int a3, int a4);

5

6 int main(){7 int a;

8 int b;

9 int c;

10 int x;

11

12 cout << "Program membuat fungsi kuadrat" << endl;

13 cout << "a = "; cin >> a;

14 cout << "b = "; cin >> b;

15 cout << "c = "; cin >> c;

16 cout << "f(x) = " << a << "xˆ2+" << b << "x+" << c << endl;

17 cout << "masukkan nilai x : "; cin >> x;

18 cout << "f(" << x << ")= " << fungsikuadrat(a,b,c,x);

19 }20

21 int fungsikuadrat(int a1, int a2, int a3, int a4){22 return a1*a4*a4+a2*a4+a3;

23 }

Pemprograman Komputer II 19 Nanda Arista Rizki, M.Si.

Page 23: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Posisi suatu fungsi dapat diletakkan berada sebelum main().

Latihan 22:

1 #include <iostream>

2 using namespace std;

3

4 int bintang()

5 {6 char a='*';

7 cout << a;

8 }9

10 int main()

11 {12 int n;

13 int i;

14 int j;

15

16 cout << "n = "; cin >> n;

17 for (i=1; i≤n; i++)

18 {19 for (j=1; j≤i; j++)

20 {21 bintang();

22 }23 cout << endl;

24 }25 }

Fungsi rekursif adalah fungsi yang memanggil diri sendiri secara berulang-

ulang. Fungsi faktorial dan Fibonacci adalah contoh fungsi rekursif.

Latihan 23:

1 #include <iostream>

2 using namespace std;

3

4 int faktorial(int x);

Pemprograman Komputer II 20 Nanda Arista Rizki, M.Si.

Page 24: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

5

6 int main()

7 {8 int n;

9

10 cout << "Program membuat fungsi faktorial" << endl;

11 cout << "n = "; cin >> n;

12 cout << n <<"! = " << faktorial(n);

13 }14

15 int faktorial(int x)

16 {17 if (x<0)

18 cout << "Masukkan bilangan positif!";

19 else if(x==0)

20 return 1;

21 else

22 return x*faktorial(x−1);23 }

Latihan 24:

1 #include <iostream>

2 using namespace std;

3

4 int fibo(int x)

5 {6 if (x==0)

7 return 0;

8 else if (x==1)

9 return 1;

10 else

11 return fibo(x−1)+fibo(x−2);12 }13

14 int main()

15 {16 int n;

17

18 cout << "Program membuat fungsi Fibonacci" << endl;

19 cout << "n = "; cin >> n;

Pemprograman Komputer II 21 Nanda Arista Rizki, M.Si.

Page 25: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

20 cout << "Bilangan Fibonacci ke " << n << " adalah " << fibo(n);

21 }

1.9 Membuat Header File

Penggunaan suatu fungsi sangat berguna ketika ingin menduplikasi perintah yang

sama dalam suatu program. Namun dengan semakin banyaknya fungsi yang dibuat,

justru akan membuat program menjadi tidak efisien dan kesalahan dalam penulisan

sintaks menjadi sulit untuk dideteksi. Hal ini dapat diselesaikan dengan memisahnya

pada file lain yang disebut header file.

Header file adalah file utama yang digunakan untuk melengkapi sebuah pro-

gram dalam bahasa pemprograman C++. Header file ini berfungsi sebagai penghu-

bung antara program utama dengan perintah-perintah tertentu yang terdapat dalam

file tersebut. Beberapa contoh header file yang biasa digunakan dalam program-

program bahasa C++ yaitu conio.h , math.h , stdio.h , dan lain sebagainya. Da-

lam hal ini, walaupun header file hanya ditulis sekali, namun dapat dimasukkan

dalam banyak file yang diperlukan. Secara umum, header ada tiga yaitu header

yang memuat fungsi-fungsi, header yang hanya mendefinisi deklarasi-deklarasi, dan

header yang menggunakan keduanya.

Berikut ini adalah cara membuat file header yang memuat fungsi-fungsi. Ketik

sintak-sintak berikut ini, lalu save sebagai kalkul.h .

1 #ifndef KALKUL H

2 #define KALKUL H

3

4 double bagi(double a, double b)

5 {6 return a/b;

7 }8

9 int kali(int a, int b)

10 {11 return a*b;

12 }

Pemprograman Komputer II 22 Nanda Arista Rizki, M.Si.

Page 26: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

13

14 int tambah(int a, int b)

15 {16 return a+b;

17 }18

19 int kurang(int a, int b)

20 {21 return a−b;22 }23

24 #endif

Jika ingin memastikan bahwa header file yang dipakai tidak terulang berkali-kali,

maka gunakan #ifndef yang berarti ”if not define” dan diikuti oleh nama header -

nya. Hal ini berguna ketika ingin memerika apakah ada header file dengan nama

yang sama yang telah didefinisikan sebelumnya. Kemudian buatlah program untuk

memanggil file header seperti berikut:

Latihan 25:

1 #include <iostream>

2 #include "kalkul.h"

3 using namespace std;

4

5 int main() {6 int x;

7 int y;

8

9 cout << "x = "; cin >> x;

10 cout << "y = "; cin >> y;

11

12 cout << "x+y=" << tambah(x,y) << endl;

13 cout << "x−y=" << kurang(x,y) << endl;

14 cout << "x*y=" << kali(x,y) << endl;

15 cout << "x/y=" << bagi(x,y) << endl;

16 return 0;

17 }

Pemprograman Komputer II 23 Nanda Arista Rizki, M.Si.

Page 27: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Jenis header selanjutnya adalah header yang mendefinisi deklarasi-deklarasi.

Simpan file berikut dengan nama kalkul1.h .

1 #include <iostream>

2 #define tambah +

3 #define kurang −4 #define kali *

5 #define bagi /

6 #define modulo %

7 #define PI 3.14

8 #define setengah 0.5

9 using namespace std;

Selanjutnya panggil header kalkul1.h dengan program berikut:

Latihan 26:

1 // Program menghitung keliling dan luas setengah lingkaran

2 #include "kalkul1.h"

3

4 int main()

5 {6 float r;

7 float K;

8 float L;

9

10 cout << "r = "; cin >> r;

11 K=2 kali PI kali r;

12 L=PI kali r kali r;

13 cout << "Keliling = " << K << endl;

14 cout << "Luas setengah lingkaran = " << setengah kali L << endl;

15 }

Pemprograman Komputer II 24 Nanda Arista Rizki, M.Si.

Page 28: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

BAB 2

Aplikasi Matematik

2.1 Bilangan Biner

Sistem bilangan biner adalah sebuah sistem penulisan angka dengan menggunakan

dua simbol yaitu 0 dan 1. Misalnya penulisan 3, 21 dan 31 dalam sistem bilangan

biner masing-masing adalah 11, 10101, dan 11111. Nilai maksimal untuk bilangan

biner n angka adalah 2n−1. Sehingga pada sistem bilangan biner dengan 16 angka,

nilai maksimal yang dapat dikonversi adalah 65535. Berikut adalah latihan untuk

mengubah suatu bilangan bulat ke bilangan biner.

Latihan 27:

1 #include <iostream>

2 using namespace std;

3

4 void ke biner(unsigned short bil){5 for (int i = 15; i ≥ 0; i−−)6 if (bil & (1 << i))

7 cout << "1";

8 else

9 cout << "0";

10 }11

12 int main()

25

Page 29: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

13 {14 unsigned short nilai;

15 cout << "Masukan nilai antara 0 sampai 65535 : ";

16 cin >> nilai;

17 cout << "Bilangan biner dari " << nilai <<" adalah ";

18 ke biner(nilai);

19 cout << endl;

20 return 0;

21 }

Tipe data unsigned short adalah tipe short dengan nilai nonnegatif.

2.2 Faktor Persekutuan Terbesar (FPB)

Misalkan a, b ∈ Z. Ingin dicari nilai FPB dari a dan b. Hal pertama yang harus

diperhatikan bahwa jika a = b = 0, maka nilai FPB(0, 0) tidak terdefinisi. Sehingga

harus ada peringatan error jika nilai yang dimasukkan keduanya adalah nol. Untuk

mengantisipasi beberapa hal tersebut, maka sintak awal pada file fpb.h adalah

sebagai berikut:

1 #ifndef FPB H

2 #define FPB H

3

4 /*

5 Menghitung fpb dari dua bilangan bulat

6 a = bilangan pertama

7 b = bilangan kedua

8 return = fpb dari a dan b

9 */

10

11 long fpb(long a, long b) {12 // Jika a dan b adalah nol tampilkan peringatan error dan return 0

13 if ( (a==0) && (b==0) ) {14 cerr << "PERINGATAN: kedua bilangan tidak boleh NOL."

15 << endl;

16 return 0;

17 }18

Pemprograman Komputer II 26 Nanda Arista Rizki, M.Si.

Page 30: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

19 #endif

Perintah cerr dan cout menyampaikan kalimat pada layar. Perbedaannya adalah

cout biasa digunakan untuk output standar, sedangkan cerr untuk pesan-pesan

error. Selanjutnya berlaku

FPB(a, b) = FPB(−a, b) = FPB(a,−b) = FPB(−a,−b).

Sehingga sintak file fpb.h perlu ditambah beberapa baris berikut

1 // Memastikan bahwa masing−masing a dan b adalah nonnegatif.

2 if (a<0) {3 a = −a;4 }5 if (b<0) {6 b = −b;7 }

Misalnya b = 0, maka FPB(a, 0) = |a| untuk a 6= 0. Selanjutnya variabel t meng-

ecek semua kemungkinan dari 1 sampai a. Jika a mod t = 0 dan b mod t = 0 maka

FPB(a, b) = t. Sehingga file fpb.h perlu diperbaharui dengan sintaks berikut:

1 // Jika a=0 maka fpb=b

2 if (a==0) {3 return b;

4 }5

6 // Jika tidak, akan dicek semua kemungkinan dari 1 sampai a

7 long hasil;

8

9 for (long t=1; t≤a; t++) {10 if ( (a%t==0) && (b%t==0) ) {11 hasil = t;

12 }13 }14

15 return hasil;

16 }

Pemprograman Komputer II 27 Nanda Arista Rizki, M.Si.

Page 31: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Untuk menguji prosedur FPB, ketik latihan berikut.

Latihan 28:

1 #include "fpb.h"

2 #include <iostream>

3 using namespace std;

4

5 // Program untuk menguji prosedur fpb.

6 int main() {7 long a,b;

8

9 cout << "Masukkan bilangan pertama −−> ";

10 cin >> a;

11 cout << "Masukkan bilangan kedua −−> ";

12 cin >> b;

13

14 cout << "FPB dari " << a << " dan " << b << " adalah "

15 << fpb(a,b) << endl;

16 return 0;

17 }

2.3 Mencari FPB Menggunakan Metode Euclid

Seandainya ingin dicari nilai FPB dari bilangan yang sangat besar. Maka tidak

cukup besar untuk sebuah variabel bertipe long, namun dengan metode ’coba-

coba’ akan menghasilkan banyak sekali iterasi. Selanjutnya diperkenalkanlah metode

Euclid.

Preposisi: Misalkan a dan b adalah dua bilangan bulat positif dan misalkan

c = a mod b. Maka FPB(a, b) = FPB(b, c).

Bukti:

Misalkan a dan b adalah dua bilangan bulat positif dan c = a mod b. Artinya

a = qb + c dengan q, c ∈ Z dan 0 ≤ c < b. Perhatikan bahwa jika q adalah faktor

persekutuan dari a dan b, maka q juga faktor c karena c = a− qb. Sebaliknya jika q

adalah faktor persekutuan dari b dan c, maka q juga faktor dari a karena a = qb+ c.

Pemprograman Komputer II 28 Nanda Arista Rizki, M.Si.

Page 32: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Sehingga FPB(a, b) = FPB(b, c).

Sebagai contoh misalkan ingin dicari nilai FPB(80, 25). Berdasarkan prepo-

sisi, maka FPB(80, 25) = FPB(25, 5) karena 80 mod 25 = 5. Selanjutnya un-

tuk menemukan nilai FPB(25, 5), lakukan lagi preposisi. Sehingga FPB(25, 5) =

FPB(5, 0) karena 25 mod 5 = 0. Sampai pada langkah ini, preposisi sudah tidak

dapat lagi dilakukan karena 0 bukan bilangan positif. Sehingga diperoleh

FPB(80, 25) = FPB(25, 5) = FPB(5, 0) = 5.

Berikut adalah sintak lain untuk file fpb.h.

Latihan 29:

1 #ifndef FPB H

2 #define FPB H

3 #include <iostream>

4 using namespace std;

5

6 long fpb(long a, long b) {7 // Memastikan bahwa masing−masing a dan b adalah nonnegatif.

8 if (a<0) a = −a;9 if (b<0) b = −b;

10

11 // Jika a dan b adalah nol tampilkan peringatan error dan return 0

12 if ( (a==0) && (b==0) ) {13 cerr << "WARNING: kedua bilangan tidak boleh NOL."

14 << endl;

15 return 0;

16 }17

18 if (b==0) return a; // Jika b=0, maka FPB=a

19 if (a==0) return b; // Jika a=0, maka FPB=b

20

21 long c = a%b;

22 return fpb(b,c);

23 }24

25 #endif

Pemprograman Komputer II 29 Nanda Arista Rizki, M.Si.

Page 33: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

2.4 Faktor Bilangan Prima

Sebagai contoh faktor bilangan prima dari 60 yaitu 2, 3, dan 5 karena 60 = 22 · 3 · 5.

Dalam membuat program untuk membuat hasil faktor bilangan prima, memanfa-

atkan variabel array. Simpan sintak berikut sebagai faktor.h

1 //faktor.h

2 #ifndef FAKTOR H

3 #define FAKTOR H

4

5 long faktor(long n, long* daftar) {6 // tanda (*) mengindikasikan bahwa variabel daftar adalah array.

7

8 if (n==0) return −1;9 if (n<0) n = −n;

10 if (n==1) return 0;

11

12 // untuk n>1

13 int indeks = 0;

14 int d = 2; // pembagi bilangan

15

16 while (n>1) {17 while (n%d == 0) {18 daftar[indeks] = d;

19 ++indeks;

20 n /= d;

21 }22 ++d;

23 }24

25 return indeks;

26 }27

28 #endif

Latihan 30:

1 #include "faktor.h"

2 #include <iostream>

Pemprograman Komputer II 30 Nanda Arista Rizki, M.Si.

Page 34: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

3 using namespace std;

4

5 //Program untuk mengetes prosedur faktor bilangan prima.

6

7 int main() {8 long daftar[100];

9

10 for (long n=1; n≤100; n++) {11 int nfaktor = faktor(n,daftar);

12 cout << n << "\t";13

14 for (int k=0; k<nfaktor; k++) cout << daftar[k] << " ";

15 cout << endl;

16 }17 }

2.5 Bilangan Acak

Cara sederhana dalam membangkitkan bilangan acak adalah menggunakan Linear

Congruential Generator (LCG). Prosedur LCG menghasilkan barisan x0, x1, x2, . . .

yang dihitung dengan rumus

xn+1 = (axn + b) mod c,

dimana a, b, c adalah bilangan-bilangan positif yang telah ditentukan. Nilai awal x0

dinamakan seed. Nilai-nilai yang dihasilkan LCG adalah {0, 1, . . . , c − 1}. Berikut

adalah contoh program menggunakan LCG dengan seed x0 = 0, a = 17, b = 3, dan

c = 64.

Latihan 31:

1 #include <iostream>

2 using namespace std;

3

4 int acak(){5 static int state = 0;

Pemprograman Komputer II 31 Nanda Arista Rizki, M.Si.

Page 35: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

6 const long a = 17;

7 const long b = 3;

8 const long c = 64;

9

10 state = (a*state+b) % c;

11 return state;

12 }13

14 int main() {15 cout << "Membangkitkan Bilangan−Bilangan Acak" << endl;

16 cout << "Nilai−nilai modulo 2: ";

17 for (int k=0; k<20; k++) {18 cout << acak()%2 << " ";

19 }20 cout << endl;

21

22 cout << "Nilai−nilai modulo 4: ";

23 for (int k=0; k<20; k++) {24 cout << acak()%4 << " ";

25 }26 cout << endl;

27

28 return 0;

29 }

Alternatif lain untuk membuat bilangan-bilangan acak modulo 2 adalah mengganti

fungsi main() menjadi

1 int main() {2 cout << "Nilai−nilai modulo 2: ";

3 for (int k=0; k<20; k++) {4 double x = acak() / 64.;

5 cout << int(2*x) << " ";

6 }7 cout << endl;

8 return 0;

9 }

Cara lain untuk menghasilkan bilangan acak adalah dengan menggunakan per-

intah rand() yang termuat dalam library cstdlib. Perintah rand() menghasilkan

Pemprograman Komputer II 32 Nanda Arista Rizki, M.Si.

Page 36: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

nilai dari 0 sampai RAND MAX .

Latihan 32:

1 #include <iostream>

2 #include <cstdlib>

3 using namespace std;

4

5 int main(){6 int i;

7 for (i=1;i≤10;i++)

8 cout << rand() << endl;

9 }

Berikut adalah contoh header untuk membangkitkan bilangan acak uniform.

1 // uniform.h

2 #ifndef UNIFORM H

3 #define UNIFORM H

4

5 #include <cstdlib>

6 #include <ctime>

7 #include <cmath>

8 using namespace std;

9

10 // Menghasilkan bilangan acak [0,1]

11 double unif() {12 return rand() / double(RAND MAX);

13 }14

15 // Menghasilkan bilangan acak [a,b]

16 double unif(double a, double b) {17 return (b−a)*unif() + a;

18 }19

20 // Menghasilkan bilangan acak integer {1,2,...,n}.21 long unif(long a) {22 if (a < 0) a = −a;23 if (a==0) return 0;

Pemprograman Komputer II 33 Nanda Arista Rizki, M.Si.

Page 37: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

24 return long(unif()*a) + 1;

25 }26

27 // Mengembalikan pembangkit bilangan acak berdasarkan sistem

28 void seed() {29 srand(time(0));

30 }31

32 #endif

Selanjutnya adalah membuat suatu program untuk menguji header yang telah di-

buat.

Latihan 33:

1 #include <iostream>

2 #include "uniform.h"

3 using namespace std;

4

5 int main(){6 int i;

7 cout << "Contoh fungsi unif()" << endl;

8 for (i=1;i≤5;i++)

9 cout << unif() << endl;

10 cout << endl;

11

12 cout << "Contoh fungsi unif(1,3)" << endl;

13 for (i=1;i≤5;i++)

14 cout << unif(1,3) << endl;

15 cout << endl;

16

17 cout << "Contoh fungsi unif(8)" << endl;

18 for (i=1;i≤5;i++)

19 cout << unif(8) << endl;

20 }

Berikut adalah program yang menampilkan nilai peluang (empirik) dari dua bila-

ngan acak relatif prima.

Latihan 34:

Pemprograman Komputer II 34 Nanda Arista Rizki, M.Si.

Page 38: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

1 #include "uniform.h"

2 #include "fpb1.h"

3 #include <iostream>

4 using namespace std;

5

6 /* Membangkitkan bangaknya pasangan nilai (a dan b) dari himpunan

7 {1,2,...,n} dan menampilkan peluang kedua bilangan tersebut relatif

8 prima.

9 */

10

11 int main() {12 long n;

13 long replika; // Banyaknya percobaan

14 long a,b; // Nilai−nilai yang dipilih dari {1,2,...,n}15 long jumlah; // Banyaknya pasangan yang relatif prima

16

17 jumlah = 0;

18

19 cout << "Masukkan nilai n −−> ";

20 cin >> n;

21

22 cout << "Masukkan banyakya pasangan sampel −−> ";

23 cin >> replika;

24

25 for (long k=1; k≤replika; k++) {26 a = unif(n);

27 b = unif(n);

28 if (fpb(a,b) == 1) ++jumlah;

29 }30

31 cout << jumlah / (double(replika));

32

33 return 0;

34 }

Pemprograman Komputer II 35 Nanda Arista Rizki, M.Si.

Page 39: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

2.6 Distribusi Normal

Misalkan X adalah peubah acak berdistribusi Normal dengan parameter µ = 0 dan

σ = 1. Maka fungsi kepadatan peluang untuk X adalah sebagai berikut:

f(x) =1√2π

exp(−x2/2

).

Salah satu metode untuk memperoleh bilangan acak berdistribusi Normal adalah

metode Box-Muller. Didefinisikan

r = x2 + y2, µ =

√−2 log r

r, Z1 = µx, dan Z2 = µy.

Maka Z1 dan Z2 saling bebas dengan masing-masing berdistribusi N(0, 1). Berikut

adalah program membangkitkan bilangan acak berdistribusi Normal dengan metode

Box-Muller.

Latihan 35:

1 #include <iostream>

2 #include <cmath>

3 #include "uniform.h"

4 using namespace std;

5

6 double randn() {7 double x,y,r;

8 do {9 x = unif(−1.,1.);

10 y = unif(−1.,1.);11 r = x*x + y*y;

12 } while (r ≥ 1.);

13 double mu = sqrt(−2.0 * log(r) / r);

14 return mu*x;

15 }16

17 int main(){18 int i;

19 int n;

20

Pemprograman Komputer II 36 Nanda Arista Rizki, M.Si.

Page 40: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

21 cout << "Masukkan banyaknya bilangan acak −−> "; cin >> n;

22 for (i=1;i≤n;i++)

23 cout << randn() <<endl;

24 }

2.7 Membangkitkan Peubah Acak

Salah satu cara untuk membangkitkan suatu data yang mengikuti distribusi ter-

tentu antara lain adalah dengan menggunakan metode transformasi invers (inverse

transform method). Metode ini memanfaatkan fungsi distribusi dari peubah acak

yang diinginkan.

Misalkan F adalah fungsi distribusi dari distribusi tertentu. Maka invers dari

F didefinisikan sebagai berikut:

F−1(u) = inf{x ∈ R|F (x) ≥ u} ∀u ∈ (0, 1).

Gambar 2.1: Ilustrasi invers fungsi distribusi

Adapun algoritma metode transformasi invers adalah sebagai berikut:

1. Pilih distribusi yang diinginkan dan tentukan fungsi distribusinya.

Pemprograman Komputer II 37 Nanda Arista Rizki, M.Si.

Page 41: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

2. Bangkitkan data u yang berdistribusi uniform [0, 1].

3. Masukkan hasil bangkitan dari langkah ke (2) ke invers fungsi distribusi.

Misalkan X adalah peubah acak dengan fungsi kepadatan peluang sebagai

berikut:

f(x) =

{225x; untuk 0 < x < 5

0; untuk x lainnya.(2.1)

Maka

F (x) =x2

25untuk 0 < x < 5.

Selanjutnya hitung fungsi invers dari F , yaitu

F−1(u) = 5√u.

Adapun sintak untuk membangkitkan peubah acak dengan fungsi kepadatan pelu-

ang pada persamaan (2.1) adalah sebagai berikut:

Latihan 36:

1 #include <iostream>

2 #include "uniform.h"

3 #include <cmath>

4 using namespace std;

5

6 int main()

7 {8 float u;

9 int i;

10 int n;

11 double x;

12

13 cout << "Membangkitkan data dengan fungsi kepadatan ...

peluang:" << endl;

14 cout << "f(x)=2x/25; untuk 0<x<5" << endl;

15 cout << "f(x)=0; untuk x lainnya" << endl;

Pemprograman Komputer II 38 Nanda Arista Rizki, M.Si.

Page 42: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

16 cout << endl;

17 cout << "Masukkan ukuran data : "; cin >> n;

18 cout << "=============" << endl;

19 cout << "i u i x i" << endl;

20 cout << "−−−−−−−−−−−−−" << endl;

21 for (i=1;i≤n;i++)

22 {23 u=unif();

24 x=5*sqrt(u);

25 cout << i << " " << floor(u*1000)/1000 << " " << ...

floor(x*1000)/1000 << endl;

26 }27 cout << "=============" << endl;

28 }

Sehingga hasil simulasinya dapat dilihat pada Tabel (2.1).

Tabel 2.1: Simulasi Membangkitkan Peubah Acak

i ui xi1 0,167 2,0432 0,462 3,3983 0,501 3,5394 0,814 4,5115 0,683 4,1326 0,101 1,5897 0,613 3,9158 0,507 3,560

Berikut adalah beberapa distribusi yang dapat dijadikan latihan untuk membang-

kitkannya.

Tabel 2.2: Beberapa Distribusi Kontinu

No. Distribusi Domain f F1 Uniform(α, β) x ∈ [α, β] 1

b−ax−ab−a

2 Beta (α,1) α > 0, x ∈ [0, 1] αxα−1 · · ·3 Beta (1,β) β > 0, x ∈ [0, 1] β(1− x)β−1 · · ·4 Eksponensial(λ) λ > 0, x ≥ 0 λe−λx · · ·

5 Pareto(α, β) x ≥ β > 0, α > 0αβα

xα+1· · ·

Pemprograman Komputer II 39 Nanda Arista Rizki, M.Si.

Page 43: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Misalkan ingin membangkitkan data yang berdistribusi Beta (1,8), yaitu X.

fungsi kepadatan peluang untuk X adalah f(x) = 8(1 − x)7, sehingga diperoleh

F−1(u) = 1− (1− u)1/8. Selanjutnya bangkitkan data U ∼ U(0, 1). Lebih jelasnya

ikuti latihan berikut.

Latihan 37:

1 #include <iostream>

2 #include "uniform.h"

3 #include <cmath>

4 using namespace std;

5

6 int main()

7 {8 float u;

9 int i;

10 int n;

11 double x;

12

13 cout << "Membangkitkan data berdistribusi Beta (1,8)" << endl;

14 cout << "Masukkan ukuran data : "; cin >> n;

15 cout << "=============" << endl;

16 cout << "i u i x i" << endl;

17 cout << "−−−−−−−−−−−−−" << endl;

18 for (i=1;i≤n;i++)

19 {20 u=unif();

21 x=1−pow(1−u,0.125);22 cout << i << " " << floor(u*1000)/1000 << " " << ...

floor(x*1000)/1000 << endl;

23 }24 cout << "=============" << endl;

25 }

Pemprograman Komputer II 40 Nanda Arista Rizki, M.Si.

Page 44: Nanda Arista Rizki, M.Si. - math.fmipa.unmul.ac.idmath.fmipa.unmul.ac.id/nanda/pk2_stat.pdf · 1.1 Menampilkan Hasil Pada Layar Bahasa C++ adalah bahasa pemprograman komputer yang

Daftar Pustaka

[1] Eubank, R.L., dan Kupresanin, A. (2011). Statistical Computing in C++ and

R. CRC Press.

[2] Scheinerman, E. (2006). C++ for Mathematicians: An Introduction for Stu-

dents and Professionals. Chapman & Hall/CRC.

[3] Voss, J. (2013). An Introduction to Statistical Computing: A Simulation-based

Approach. John Wiley & Sons: London.

41