Anda di halaman 1dari 22

Nama : Ida Bagus Widnyana Prawitra NIM : 1104505016

PRAKTIKUM BAHASA PEMROGRAMAN KOMPUTER


MODUL I ARRAY DAN STATEMENT CONTROL 1.1 Tujuan 1. Memahami dasar-dasar pemrograman C++. 2. Memahami penggunaan tipe data array dalam pembuatan program. 3. Memahami penggunaan statement control pada C++. 4. Memahami tujuan dan mekanisme pengurutan data dan pencarian data. Tugas Pendahuluan 1. Jelaskan tentang array dan deklarasi array dalam C++ serta tipe data yang mungkin digunakan dalam array. 2. Berikan contoh deklarasi array dalam C++ lalu hitung keperluan memorynya. 3. Jelaskan apa yang dimaksud dengan statement control. Berikan pemaparan anda secara jelas beserta contoh programnya. 4. Jelaskan mekanisme metode pengurutan dan pencarian berikut serta berikan contoh pengurutan data yang dilakukan dengan metode tersebut. a. Quick Sort b. Binary Search c. Sequential Search 5. Buatlah algoritma, flowchart dan program perkalian matriks beserta validasinya. Trace flowchart anda. 6. Buatlah algoritma, flowchart dan program menentukan invers matriks beserta validasinya. Trace flowchart anda. Jawaban 1. Array merupakan koleksi data dimana setiap elemen memakai nama dan tipe yang sama serta setiap elemen diakses dengan membedakan indeks array-nya. Berikut adalah contoh variabel bernama c yang mempunyai lokasi memori yang semuanya bertipe int. C[0] = -45; C[1] = 6; C[2] = 0; C[3] = 72; C[4] = 1543;

1.2

1.3

C[5] = 43; C[6] = 4; Masing-masing nilai dalam setiap lokasi mempunyai identitas berupa nama c dan nomor indeks yang dituliskan di dalam tanda kurung [..]. sebagai contoh, 72 adalah nilai dari c[3] Deklarasi Array Variable array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat. Dengan demikian, deklarasi untuk variabel array c di atas adalah : Int c[7]; Perlu diperhatikan bahwa C++ secara otomatis menyediakan lokasi memori yang sesuai dengan yang dideklarasikan, dimana nomor indeks selalu dimulai dari 0. Nilai suatu variabel array dapat juga diinisialisasi secara langsung pada saat deklarasi, misalnya; Int c[7] = {-45, 0, 6, 72, 1543, 43, 4} Berarti setiap lokasi memori dari variabel array c langsung diisi dengan nilai-nilai yang dituliskan didalam tanda kurung kurawal. Banyaknya lokasi memori dapat secara otomatis disediakan sesuai degan banyaknya nilai yang akan dimasukkan, seperti contoh berikut yang tentunya membuat variabel array dengan 10 lokasi memori: Int x []={10, 15 12, 5, 13, 9, 6, 17, 25, 31}; Untuk memperjelas gambaran anda tentang array perhatikan contoh aplikasi variabel array, yaitu program untuk menghitung jumlah setiap elemen dalam suatu array. Sebagai gambaran dari program tersebut, dapat dibuat sebuah algoritma sebagai berikut: 1. Tentukan elemen array sebanyak yang diinginkan (dalam hal ini, elemen array tersebut berjumlah 12 buah) 2. Tentukan nilai awal indeks, batas akhir indeks dan kenaikannya (dalam hal ini, nilai awal indeks adalah 0, batas akhir indeks adalah jumlah elemen array diatas yaitu 12 dikurangi dengan 1, kenaikannya adalah 1) 3. Lakukan perulangan sesuai dengan langkah 2 4. Lakukan penjumlahan masing-masing elemen array sampai batas akhir indeks terpenuhi 5. Tampilkan penjumlahan semua elemen array 6. Selesai. Sedangkan implementasi dalam program dapat dilihat berikut ini.

Contoh Program array

Gambar 1.1 Contoh Program Array

Bila program diatas dijalankan, akan muncul hasil : Total setiap elemen array adalah 383,Adapun keterangan dari program diatas adalah sebagai berikut : Hasil penjumlahan setiap elemen array diperoleh dari jumlah data atau elemen array sebanyak 12 buah yang sudah didefinisikan pada awal program yaitu #define SIZE 12. Kemudian setiap elemen array dari a[0] yang berisi data, a[1] yang berisi data 3 di jumlahkan sampai dengan a[11] yang berisi data 45. Proses penjumlahan dilakukan pada loop dimulai dari 0 sampai data yang terakhir atau elemen terakhir. 2. Untuk mengetahui keperluan memory dalam sebuah array kita hendaknya mendeklarasikan array tersebut. Contoh :
#include <iostream>

using namespace std;

int main() { int X[10]={1,2,3,4,5,6,7,8,9,10}; cout<<"Menampilkan nilai pada array : "<<endl; for(int i=0; i<10; i++) Kode Program 1.1 Deklarasi Array Dan Menampilkan Nilai Pada Array

Pada contoh program diatas, tipe data yang digunakan adalah tipe integer dimana memiliki ukuran memory sebesar 4 byte atau 32 bite, pada array X memiliki ukuran sebesar 10, maka memory yang digunakan sebesar 4x10 yaitu 40 byte, atau 32x10 yaitu 320 bit. 3. Statement kontrol pada bahasa pemrograman C++ sangat diperlukan untuk membuat program dengan kondisi bersyarat atau proses pemilihan sesuai dengan kondisi yang digunakan. Berdasarkan satu atau beberapa kondisi, dapat ditentukan satu atau sejumlah aksi yang akan dilakukan. Dengan adanya struktur pemilihan, program dapat berjalan dengan jalur yang berbeda, berdasarkan hasil pengecekan kondisi yang dipenuhi. Untuk itu, bahasa pemrograman C++ menyediakan beberapa struktur kontrol, yaitu : a. if Pernyataan if (if statement) akan memeriksa suatu persyaratan dan menentukan apakah syarat tersebut benar atau salah, kemudian melakukan pekerjaan sesuai dengan nilai pernyataan tersebut. Statemen if dengan satu kasus merupakan bentuk yang paling sederhana karena hanya melibatkan satu kondisi yang akan diperiksa. sintaksnya dapat ditulis sebagai berikut: If (kondisi) statemen; Flowchart: Salah kondisi Benar statemen

contoh penulisan programnya:

#include <iostream> using namespace std; int main ( ) { int nilai; cout <<"masukkan sebuah bilangan: "; cin>>nilai; if (nilai>0) cout <<"bilangan yang anda masukkan adalah bilangan positif"; return 0; } Kode program 1.2 Program Statemen If

b. ifelse Penjelasannya, bila sebuah kondisi terpenuhi maka program akan melakukan statemen pertama dan bila tidak terpenuhi maka program akan melakukan statemen lain. sintaksnya dapat ditulis sebagai berikut: If (kondisi) { Statemen pertama; } else { Statemen kedua; } Flowchart: True Statemen pertama contoh penulisan programnya:
#include <iostream> using namespace std; int main() { int nilai; cout <<"masukkan sebuah bilangan: "; cin>>nilai; if (nilai>0){ cout <<"bilangan yang anda masukkan adalah bilangan positif";

kondisi

false Statemen kedua

}else{ if (nilai==0) cout <<"bilangan yang anda masukkan adalah nol"; else cout <<"bilangan yang anda masukkan adalah bilangan negatif"; } return 0; } Kode program 1.3 Program If-Else

c. switch Pernyataan switch adalah pernyataan yang digunakan untuk menjalankan salah satu pernyataan dari beberapa kemungkinan pernyataan, berdasarkan nilai dari sebuah ungkapan dan nilai penyeleksian. Pernyataan ifelse if jamak dapat dibangun dengan pernyataan switch. sintaksnya dapat ditulis sebagai berikut: switch (ekspresi) { case value1 : statement1; break; case value2 : statement2; break; case valueN : statementN; break; default : statement_alternatif; break; } Contoh penulisan programnya :
#include <iostream> using namespace std; int main ( ) { int bil; cout <<"masukkan sebuah bilangan (1-7): "; cin>>bil; switch (bil) { case 1: cout <<"hari ke-"<<bil<<" : adalah minggu"; break; case 2: cout <<"hari ke-"<<bil<<" : adalah senin"; break; case 3: cout <<"hari ke-"<<bil<<" : adalah selasa"; break; case 4: cout <<"hari ke-"<<bil<<" : adalah rabu"; break; case 5: cout <<"hari ke-"<<bil<<" : adalah kamis"; break; case 6: cout <<"hari ke-"<<bil<<" : adalah jumat"; break;

case 7: cout <<"hari ke-"<<bil<<" : adalah sabtu"; break; default: cout <<"tidak terdapat nama hari ke-"<<bil; } return 0; } Kode program 1.4 Program Switch

4. Quick Sort adalah Algoritma sortir yang efisien yang ditulis oleh C.A.R. Hoare pada 1962. Dasar strateginya adalah memecah dan menguasai. Quick sort dimulai dengan menscan daftar yang disortir untuk nilai median. Nilai ini, yang disebut tumpuan (pivot), kemudian dipindahkan ke satu sisi pada daftar dan butir-butir yang nilainya lebih besar dari tumpuan di pindahkan ke sisi lain. Algoritma Quick Sort: a. Divide Memilah rangkaian data menjadi dua sub-rangkaian A[pq-1] dan A[q+1r] dimana setiap elemen A[pq-1] adalah kurang dari atau sama dengan A[q] dan setiap elemen pada A[q+1r] adalah lebih besar atau sama dengan elemen pada A[q]. A[q] disebut sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian dari prosedur pemisahan. b. Conquer Mengurutkan elemen pada sub-rangkaian secara rekursif Pada algoritma quick sort, langkah kombinasi tidak di lakukan karena telah terjadi pengurutan elemen elemen pada sub array. Contoh program Quick Sort Mengunakan C++
Partition(A, p, r) x = A[p]; //pivot=elemen posisi pertama i = p ; //inisialisasi j = r ; repeat while(A[j] > x) j--; while(A[i] < x) i++; if (i < j){ Swap(A, i, j); j--;

i++ } else return j; until i >= j Kode program 1.5 Quick Sort

Sequential Search adalah Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana. Pencarian berurutan menggunakan prinsip sebagai berikut : data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan. Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari. Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada. Pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula. Algoritma pencarian berurutan dapat dituliskan sebagai berikut : 1i0 2 ditemukan false 3 Selama (tidak ditemukan) dan (i <= N) kerjakan baris 4 4 Jika (Data[i] = x) maka ditemukan true, jika tidak i i + 1 5 Jika (ditemukan) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan Contoh Program
int SequentialSearch(int x) { int i = 0; bool ditemukan = false; while ((!ditemukan) && (i < Max)) { if(Data[i] == x) ditemukan = true; else i++; } if(ditemukan) return i; else return -1; } Kode program 1.6 Program Sequential Search

Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan maka fungsi diatas akan mengembalikan nilai 1. Pencarian Biner (Binary Search) adalah Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus Prinsip dari pencarian biner dapat dijelaskan sebagai berikut : mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data yang dicari dibandingkan dengan data tengah. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah 1. Jika lebih besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1. Algoritma Binary Search 1. L 0 2. R N - 1 3. ditemukan false 4. Selama (L <= R) dan (tidak ditemukan) kerjakan baris 5 sampai 8 5. m (L + R) / 2 6. Jika (Data[m] = x) maka ditemukan true 7. Jika (x < Data[m]) maka R m 1 8. Jika (x > Data[m]) maka L m + 1 9.Jika (ditemukan) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan. Contoh Program
int BinarySearch(int x) { int L = 0, R = Max-1, m; bool ditemukan = false; while((L <= R) && (!ditemukan)) { m = (L + R) / 2; if(Data[m] == x) ditemukan = true; else if (x < data[m]) R = m - 1; else L = m + 1; }

if(ditemukan) return m; else return -1; } Kode program 1.7 Program Binary Search

Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan maka fungsi diatas akan mengembalikan nilai 1. 5. a. Algoritma 1. Mulai. 2. Mendeklarasikan array berdimensi 2 bertipe integer yaitu array A, B dan C dengan nilai elemen maksimum atau ukuran array yang ditentukan. 3. Mendeklarasikan ib, ik, baris1, kolom1, baris2, kolom2. 4. Meng-input-kan baris1 yang menunjuk pada baris matriks A. 5. Meng-input-kan kolom1 yang menunjuk pada kolom matriks A. 6. Meng-input-kan baris2 yang menunjuk pada baris matriks B. 7. Meng-input-kan kolom2 yang menunjuk pada kolom matriks B. 8. Pengecekan nilai kolom1 dengan baris2, jika nilai keduanya tidak sama (IF kolom1 != baris2), maka proses tidak dapat dieksekusi . Tetapi jika sama maka proses perkalian matriks dijalankan. 9. Mencetak hasil matriks yaitu array C. 10. Tanyakan apakah ingin mengulang. 11. Jika ya, maka akan kembali ke proses 4. 12. Jika tidak, maka program dihentikan. 13. Selesai.

b.

Flowchart

c.

Gambar 1.2 Flowchart perkalian matriks

c.

Program
#include <iostream> #include <conio.h> #include <cstdlib> #include <cstring>

using namespace std;

int A[10][10], B[10][10], C[10][10]; int baris1, baris2, kolom1, kolom2; int ib, ik, huruf; char pil; char val[100];

//================================================ void judul() { cout<< "==========================="<<endl; cout<< "=PROGRAM PERKALIAN MATRIKS="<<endl; cout<< "==========================="<<endl; cout<<endl; } //===========================================

int validasi() { do { huruf=0; cin>>val; for(int i=0; i<strlen(val); i++) { if(isdigit(val[i])==0) { huruf++; } } if(huruf !=0) { cout<<"Input hanya angka. Ulangi !"<<endl; } }while(huruf!=0); return 0; } //=============================================== int tampilkan_matriks() { judul(); cout<< "Input orde Matriks A."<<endl; cout<< "Baris : "; validasi(); baris1=atoi(val); cout<< "Kolom : "; validasi(); kolom1=atoi(val);

cout<<endl; cout<< "Input orde Matriks B."<<endl; cout<< "Baris : "; validasi(); baris2=atoi(val); cout<< "Kolom : "; validasi(); kolom2=atoi(val); cout<< "=========================================="<<endl; cout<< "Input nilai Matriks A."<<endl; for(ib=0; ib<baris1; ib++) { for(ik=0; ik<kolom1; ik++) { cout << "baris ke-["<<ib+1<<"] dan kolom ke-["<<ik+1<<"] = "; cin>>A[ib][ik]; } } cout<<endl; cout<< "Input nilai Matriks B."<<endl; for(ib=0; ib<baris2; ib++) { for(ik=0; ik<kolom2; ik++) { cout << "baris ke-["<<ib+1<<"] dan kolom ke-["<<ik+1<<"] = "; cin >> B[ib][ik]; } } cout << "=========================================="<<endl; cout<<"Matriks A."<<endl; for(ib=0; ib<baris1; ib++) {

for(ik=0; ik<kolom1; ik++) { cout<<A[ib][ik]<<" "; } cout<<endl; } cout<<endl; cout<<"Matriks B"<<endl; for(ib=0; ib<baris2; ib++) { for(ik=0; ik<kolom2; ik++) { cout<<B[ib][ik]<<" "; } cout<<endl; } return 0; } //=============================================== int perkalian_matriks() { if(kolom1 != baris2) { cout << "Perkalian Matriks tidak dapat dilakukan karena tidak sesuai dengan kaidah perkalian matriks."<<endl; cout << "Baris 1 harus sama dengan kolom2. Silahkan mengulang."<<endl; tampilkan_matriks();

getch(); system("CLS"); } else { cout<<"Matriks A * Matriks B = "<<endl; for(ib=0; ib<baris1; ib++) {

for(ik=0; ik<kolom2; ik++) { C[ib][ik]=0; for(int j=0; j<kolom1; j++) { B[j][ik]); } } } cout<<endl; for(ib=0; ib<baris1; ib++) { for(ik=0; ik<kolom2; ik++) { cout<<C[ib][ik]<<" "; } cout<<endl; } C[ib][ik]=C[ib][ik] + (A[ib][j] *

} return 0; } //=========================================== int main() { ulangi: tampilkan_matriks(); cout<< "=========================================="<<endl; perkalian_matriks(); cout<< "=========================================="<<endl; tanya: cout<< "Ulang lagi? (Y/T)"<<endl; cout<< "Pilihan Anda : "; cin>>pil; if(pil=='y' || pil=='Y') { getch(); system("CLS"); goto ulangi; } else if (pil=='t' || pil=='T') { cout<< "=========================================="<<endl; cout<<"Terima Kasih Telah Menggunakan Program Ini."<<endl; } else

{ cout<<"Input hanya y/t. Ulangi !"<<endl; goto tanya; } return 0; } Kode program 1.8 Program Perkalian Matriks

Trace flowchart perkalian matriks: Input: Matriks A Baris ke-1, Kolom ke-1 : 1 Baris ke-1, Kolom ke-2 : 1 Baris ke-1, Kolom ke-3 : 1 Baris ke-2, Kolom ke-1 : 2 Baris ke-2, Kolom ke-2 : 4 Baris ke-2, Kolom ke-3 : 8 Baris ke-3, Kolom ke-1 : 3 Baris ke-3, Kolom ke-2 : 9 Baris ke-3, Kolom ke-3 : 27 Matriks B Baris ke-1,Kolom ke-1 : 1 Baris ke-1,Kolom ke-1 : 3 Baris ke-1,Kolom ke-1 : 5 Baris ke-2,Kolom ke-2 : 2 Baris ke-2,Kolom ke-2 : 4 Baris ke-2,Kolom ke-2 : 6 Baris ke-3,Kolom ke-3 : 3 Baris ke-3,Kolom ke-3 : 6 Baris ke-3,Kolom ke-3 : 9 Proses: Matriks C matriksC[0][0] = 1x1 + 1x2 + 1x3 = 6 matriksC[0][1] = 1x3 + 1x4 + 1x6 = 13 matriksC[0][2] =1x5 + 1x6 + 1x9 = 20 matriksC[1][0] = 2x1 + 4x2 + 8x3 = 34 matriksC[1][1] = 2x3 + 4x4 + 8x6 = 70 matriksC[1][2] = 2x5 + 2x6 + 2x9 = 106 matriksC[2][0] = 3x1 + 9x2 + 27x3 = 102

matriksC[2][1] = 3x3 + 9x4 + 27x6 = 207 matriksC[2][2] = 3x5 + 9x6 + 27x9 = 312 Hasil:

6. a. Algoritma program invers matriks: 1. Mulai 2. Inisialisasi i untuk baris dan j untuk kolom 3. Mengisi matriks dengan nilai yang diinginkan, dengan menggunakan perulangan : i=0 untuk baris dan j=0 untuk kolom dengan batas i&j<1 Mencari determinan dengan cara : det=(matrik[0][0]*matrik[1][1])(matrik[1][0]*matrik[0][1]) 4. Mencari hasil bagi untuk matriks itu sendiri dengan cara : Hasil bagi=1/det. 5. Hasil bagi itu di kalikan dengan masing masing matriks 6. Menampilkan matriks invers yang sudah di kali 7. Selesai b. Flowchart program invers matriks:

Gambar 1.3 flowchart invers matriks

c. Listing program perkalian matriks:


#include #include #include #include #include <iostream> <conio.h> <iomanip> <stdlib.h> <cstring>

using namespace std; int false(char *kata) { int e,banyak; banyak=strlen(kata); for (e=0;e<banyak;e++) { if (!isdigit(kata[e])) { return 0; } } return 1; } int main() { int d,e,check; char kata[5]; float hasilbagi,determinan,a,b,c,d; int matriks[2][2]; for(d=0;d<=1;d++) { for(e=0;e<=1;e++) { retry: cout<<"matriks["<<d<<"]["<<d<<"]= "; cin>>kata; matriks[d][e]=atoi(kata); check=false(kata); if (!check) { cout<<"input false"<<endl; goto ulang; } } } for(d=0;d<=1;d++) { for(e=0;e<=1;e++) { cout<<setw(4)<<matriks[d][e]; } cout<<endl; det=(matriks[0][0]*matriks[1][1])(matriks[1][0]*matriks[0][1]); cout<<"\n maka determinanya adalah ="; cout<<determinan<<endl; hasilbagi=1/determinan; a=hasilbagi*matriks[1][1];

} }

b=hasilbagi*(-matriks[0][1]); c=hasilbagi*(-matriks[1][0]); d=hasilbagi*matriks[0][0]; cout<<"jadi matriks inversnya adalah =\n"; cout<<"["<<a<<" "<<b<<"]"<<endl; cout<<"["<<c<<" "<<d<<"]"<<endl; return 0;

Kode Program 1.9 Contoh Program Invers Matriks

Trace flowchart invers matriks: Input : matrik 0,0 =2 Matrik 0,1 =4 Matrik 1,0 =6 Matrik 1,1 =8 Proses : det=(matrik[0][0]*matrik[1][1])-(matrik[1][0]*matrik[0][1]) Det = (2 x 8) (8 x 4) = -8 hasilbagi=1/det = 1/-8 = -0,125 a=hasilbagi*matrik[1][1] = -0,125 x 8 = -1 b=hasilbagi*(-matrik[0][1]) = -0,125 x (-4) = -0.5 c=hasilbagi*(-matrik[1][0]) = -0,125 x (-6) = -0.75 d=hasilbagi*matrik[0][0] = -0,125 x 1 = -0.25 :

Hasil