NO.1 :
C++ :
#include <iostream>
#define maks 10
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
int A[maks][maks], baris, kolom;
cout<<"input baris :"; cin>>baris;
cout<<"input kolom :"; cin>>kolom;
for(int i=0; i<baris; i++){
for(int j=0; j<kolom; j++){
cout<<"Masukan data ke ["<<i<<"] ["<<j<<"] : "; cin>>A[i][j];
}
}
cout<<"Isi Matriks A :\n";
for(int i=0; i<baris; i++){
for(int j=0; j<kolom; j++){
cout<<A[i][j]<<" ";
}
cout<<endl;
}
int m[baris],n;
cout<<"penghitungan vektor \n";
cout<<"berapa variabel : ";
cin>>m[kolom];
for(int z=0; z<kolom; z++){
cout<<"Masukan data ke ["<<z<<"] "" : "; cin>>m[z];
}
cout<<endl;
cout<<" vektor b : \n";
for(int z=0; z<kolom; z++){
cout<<m[z]<<"\n";
}
cout<<"perkalian matrik dan vektor \n";
for(int i=0; i<baris; i++){
for(int j=0; j<kolom; j++){
for(int z=0; z<kolom; z++){
n=A[i][j]*m[z];
cout<<n<<" ";
}
}
}
return 0;
}
NO.2
C++ :
#include"iostream"
using namespace std;
main(){ int i,j,n;
cout<<"masukkan ordo matriks : "; cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i==j) cout<<"1 ";
else cout<<"0 ";
}
cout<<endl;
}
}
NO.3
C++ :
#include"iostream"
using namespace std;
main(){ int i,j,m,n,o;
cout<<"Program transpose matriks C(m,n)\nMasukkan nilai m : ";
cin>>m; cout<<"masukkan nilai n : "; cin>>n;
int mat[m][n];
for(i=0;i<m;i++){
for(j=0;j<n;j++){
cout<<"nilai C("<<i+1<<","<<j+1<<")=";
cin>>mat[i][j];
}
cout<<endl;
}
system("cls");
cout<<"matriks diatas diilustrasikan seperti gambaran dibawah ini\n\n";
for(i=0;i<m;i++){
for(j=0;j<n;j++){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
o=m; m=n; n=o;
cout<<"\nTranspose matriksnya adalah seperti gambar dibawah ini\n\n";
for(j=0;j<m;j++){
for(i=0;i<n;i++){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
}
NO.4
C++ :
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void Masukan(int *q, int brs, int klm) {
int i, j;
for(i = 0; i < brs; i++) {
for(j = 0; j < klm; j++) {
cout << " Elemen [" << (i + 1) << "][" << (j + 1) << "]? ";
scanf("%d", (q + i * klm + j));
}
}
}
void Tampilkan(int *q, int brs, int klm) {
int i, j;
for(i = 0; i < brs; i++) {
cout << endl;
for(j = 0; j < klm; j++) {
cout <<" ";
cout << *(q + i * klm + j) << "\t";
}
}
cout << endl;
}
void Kali(int *p, int *q, int *z, int bA, int kA, int bB, int kB) {
int i, j, k;
for(i = 0; i < bA; i++) {
for(j = 0; j < kB; j++) {
*(z + i * bB + j) = 0;
for(k = 0; k < kA; k++) {
*(z + i * bB + j) += *(p + i * kA + k) * (*(q + k * kB + j));
}
}
}
}
int main() {
cout<<"\t\t\tPROGRAM : PERKALIAN MATRIKS DENGAN SKALAR\n";
awal:
int *a, *b, *c, brsA, klmA, brsB, klmB;
cout<<"\n SYARAT...!!!\n";
cout<<" Jumlah Kolom A HARUS SAMA dengan Baris B\n\n";
cout << " Jumlah Baris Matriks A? ";
cin >> brsA;
cout << " Jumlah Kolom Matriks A? ";
cin >> klmA;
cout << " Jumlah Baris Matriks B? ";
cin >> brsB;
cout << " Jumlah Kolom Matriks B? ";
cin >> klmB;
if(klmA != brsB) {
cout << " Perkalian TIDAK Dapat Dilakukan." << endl;
cout << " Jumlah Kolom A TIDAK Sama Dengan Jumlah Baris B." << endl;
} else {
a = (int *) malloc(brsA * klmA * 4);
b = (int *) malloc(brsB * klmB * 4);
c = (int *) malloc(brsA * klmB * 4);
cout << "\n Kordinat Inputan [y][x]" ;
cout << "\n Contoh: ordo 2x2" ;
cout << "\n [1][1]\t[1][2]\t" ;
cout << "\n [2][1]\t[2][2]\t" ;
cout << "\n\n Input Matriks A:\n" ;
cout << " ----------------\n";
Masukan(a, brsA, klmA);
cout << "\n Input Matriks B:\n" ;
cout << " ----------------\n";
Masukan(b, brsB, klmB);
cout << "\n Matriks A:" << endl;
Tampilkan(a, brsA, klmA);
cout << "\n Matriks B:" << endl;
Tampilkan(b, brsB, klmB);
Kali(a, b, c, brsA, klmA, brsB, klmB);
cout << "\n Matriks A x B:" << endl;
Tampilkan(c, brsA, klmB);
}
cout<<"\n\n Apakah Anda Ingin Mengulang [Y/N] ? " ;
char m ;
cin>>m;
if (m == 'y' || m== 'Y')
goto awal;
else if (m == 'n' || m== 'N')
{
goto akhir;
}
akhir:
cout<<"\n\n\t\t\t \"TERMA KASIH\"";
return 0;
}
NO.5
C++ :
#include"iostream"
using namespace std;
main(){ int i,j; float det,temp;
float mat[2][2], c[2][2], ci[2][2], ch[2][2];
for(i=0;i<2;i++){
for(j=0;j<2;j++){
cout<<"nilai C("<<i+1<<","<<j+1<<")=";
cin>>mat[i][j];
c[i][j]=mat[i][j];
}
cout<<endl;
}
cout<<"matriks diatas diilustrasikan seperti gambaran dibawah ini\n\n";
for(i=0;i<2;i++){
for(j=0;j<2;j++){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
mat[0][1]=-mat[0][1]; mat[1][0]=-mat[1][0];
temp=mat[0][0]; mat[0][0]=mat[1][1]; mat[1][1]=temp;
cout<<"\nadjoin dari matriks diatas adalah\n";
for(i=0;i<2;i++){
for(j=0;j<2;j++){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
det=mat[0][0]*mat[1][1]-mat[1][0]*mat[0][1];
det=1/(float)det;
cout<<"\nSedangkan untuk inversnya adalah sebagai berikut\n";
for(i=0;i<2;i++){
for(j=0;j<2;j++){
ci[i][j]=det*mat[i][j];
cout<<ci[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(int k=0;k<2;k++){
temp=c[i][k]*ci[k][j];
ch[i][j]=ch[i][j]+temp;
}
}
}
cout<<"\nhasil perkalian matriks asal dengan\nmatriks yang telah di invers adalah\n";
for(i=0;i<2;i++){
for(j=0;j<2;j++){
cout<<ch[i][j]<<" ";
}
cout<<endl;
}
Apa Itu Coding?? Pengertian Coding. Secara umum atau secara garis besar Coding jika di istilahkan ke dalam bahasa Indonesia adalah Pemrograman. Bahasa yang digunakan oleh OS(Operating System) dalam melakukan suatu tugas tertentu disebut Coding. Karena dalam komputer hanya mengenal yang namanya Bahasa Biner yaitu bilangan 1 dan 0, maka manusia sulit untuk mengerti bahasa ini jadi di buatlah bahasa tingkat tinggi yang dimengerti oleh manusia yang di sebut bahasa pemrograman hight level.
Selasa, 15 Mei 2018
WORKSHOP BAB 7
1.Buatlah algoritma dan subprogram yang cara kerjanya seperti procedure insert di atas. Misalkan : kata1 = “Algoritma Pemrograman”
kata2 = “dan “
Outputnya :
kata3 = “Algoritma dan Pemrograman”
=> Algoritma : "Program menyisipkan kata pada karakter"
Deklarasi :
a, b = string
c = integer
Deskripsi :
"Kalimat pertama"a;
"Kalimat kedua"b;
"Menyisipkan kata pada karakter ke"c;
a.insert(c, b+" ");
a;
#include <iostream>
#include <string.h>
#include <cstdlib>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv)
{
string a,b;int c;
cout<<"kalimat pertama : ";
getline(cin, a);
cout<<"kalimat kedua : ";
cin>>b;
cout<<a<<endl;
cout<<"Menyisipkan kata pada karakter ke : ";cin>>c;
a.insert(c, b+" ");
cout<<a;
return 0;
}
2. Buatlah algoritma dan program untuk mengubah string menjadi bergantian huruf besar dan kecil. Contoh :
Algoritma dan Pemrograman =>AlGoRiTmA dAn PeMrOgRaMaN
=> Algoritma : "Program merubah huruf besar dan kecil"
Deklarasi :
i, jum = integer
string[100] = karakter
Deskripsi :
"Masukan sembarang kalimat:"string[100];
if
string[0]>='a' and string[0]<='z';
string[0]=(char)string[0]-32;
end if;
for i=0 then i<(int)strlen(string) then i++;
if i%2==0
if string[jum]>='A') and string[jum]<='Z'
string[jum]=(char)string[jum]+32;
jum++;
end if;
end if;
end for;
for i=1 then string[i]!='\0' then i++;
if string[i]==' ' then d++;
if i-1-d)%2==0;
if string[i+1]>='a' and string[i+1]<='z'
string[i+1]=(char)(string[i+1]-32);
end if;
end if;
end if;
end for;
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
int main()
{
int i,jum;
char string[100];
cout<<"Masukan sembarang kalimat:\n";
cin.getline(string,100); //membaca spasi
//mengubah huruf awal menjadi huruf kapital
if((string[0]>='a')&& (string[0]<='z'))
string[0]=(char)string[0]-32;
//mengubah huruf setelah huruf awal menjadi huruf kecil
jum=1;int d=0;
for(i=0;i<(int)strlen(string);i++)
{
if(i%2==0){
if((string[jum]>='A')&& (string[jum]<='Z'))
string[jum]=(char)string[jum]+32;
jum++;}
}
//mengubah huruf setelah spasi menjadi huruf kapital
for(i=1;string[i]!='\0';i++)
{
if(string[i]==' ') d++;
if((i-1-d)%2==0)
{
if(string[i+1]>='a' && string[i+1]<='z')
string[i+1]=(char)(string[i+1]-32);
}
}
cout<<"Hasil Akhir : "<<string<<endl;
getch();
}
3. Buatlah algoritma dan program untuk menghitung jumlah kata dalam suatu kalimat.
=> Algoritma : "Program menghitung jumlah kata dalam suatu kalimat"
Deklarasi :
kalimat[100] = karakter
i, spaci = integer
Deskripsi :
" Masukan Sebuah Kalimat "kalimat,sizeof(kalimat);
for i=0 then kalimat[i] then i++;
if isspace (kalimat[i]) and ispunct (kalimat[i]);
spasi++;
end if;
" Jumlah Kata"
spasi +1
" Kata yang anda masukan adalah";
for i=0 then kalimat[i] then i++
if(isspace (kalimat[i]) || ispunct (kalimat[i]))
spasi++;
end if;
kalimat[i];
end for;
#include<stdio.h>
#include<iostream>
#include<ctype.h>
using namespace std;
int main()
{
char kalimat[100];
int i, spasi=0;
cout << "\n\t\t - Program Menghitung Kata Dalam Sebuah Kalimat -\n";
cout << "\t==================================================================\n\n";
cout << "\t Masukan Sebuah Kalimat : ";
cin.getline(kalimat, sizeof(kalimat));
for(i=0; kalimat[i]; i++)
{
if(isspace (kalimat[i]) || ispunct (kalimat[i]))
{
spasi++;
}
}
cout << "\t Jumlah Kata = " << spasi +1 << "\n\n";
cout << "\t Kata yang anda masukan adalah : \n";
cout << "\t ";
for(i=0; kalimat[i]; i++)
{
if(isspace (kalimat[i]) || ispunct (kalimat[i]))
{
spasi++;
cout << "\n";
cout << "\t";
}
cout << kalimat[i];
}
cout << "\n";
cout << "\t==================================================================\n\n";
cout << "\n";
getchar();
}
kata2 = “dan “
Outputnya :
kata3 = “Algoritma dan Pemrograman”
=> Algoritma : "Program menyisipkan kata pada karakter"
Deklarasi :
a, b = string
c = integer
Deskripsi :
"Kalimat pertama"a;
"Kalimat kedua"b;
"Menyisipkan kata pada karakter ke"c;
a.insert(c, b+" ");
a;
#include <iostream>
#include <string.h>
#include <cstdlib>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv)
{
string a,b;int c;
cout<<"kalimat pertama : ";
getline(cin, a);
cout<<"kalimat kedua : ";
cin>>b;
cout<<a<<endl;
cout<<"Menyisipkan kata pada karakter ke : ";cin>>c;
a.insert(c, b+" ");
cout<<a;
return 0;
}
2. Buatlah algoritma dan program untuk mengubah string menjadi bergantian huruf besar dan kecil. Contoh :
Algoritma dan Pemrograman =>AlGoRiTmA dAn PeMrOgRaMaN
=> Algoritma : "Program merubah huruf besar dan kecil"
Deklarasi :
i, jum = integer
string[100] = karakter
Deskripsi :
"Masukan sembarang kalimat:"string[100];
if
string[0]>='a' and string[0]<='z';
string[0]=(char)string[0]-32;
end if;
for i=0 then i<(int)strlen(string) then i++;
if i%2==0
if string[jum]>='A') and string[jum]<='Z'
string[jum]=(char)string[jum]+32;
jum++;
end if;
end if;
end for;
for i=1 then string[i]!='\0' then i++;
if string[i]==' ' then d++;
if i-1-d)%2==0;
if string[i+1]>='a' and string[i+1]<='z'
string[i+1]=(char)(string[i+1]-32);
end if;
end if;
end if;
end for;
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
int main()
{
int i,jum;
char string[100];
cout<<"Masukan sembarang kalimat:\n";
cin.getline(string,100); //membaca spasi
//mengubah huruf awal menjadi huruf kapital
if((string[0]>='a')&& (string[0]<='z'))
string[0]=(char)string[0]-32;
//mengubah huruf setelah huruf awal menjadi huruf kecil
jum=1;int d=0;
for(i=0;i<(int)strlen(string);i++)
{
if(i%2==0){
if((string[jum]>='A')&& (string[jum]<='Z'))
string[jum]=(char)string[jum]+32;
jum++;}
}
//mengubah huruf setelah spasi menjadi huruf kapital
for(i=1;string[i]!='\0';i++)
{
if(string[i]==' ') d++;
if((i-1-d)%2==0)
{
if(string[i+1]>='a' && string[i+1]<='z')
string[i+1]=(char)(string[i+1]-32);
}
}
cout<<"Hasil Akhir : "<<string<<endl;
getch();
}
3. Buatlah algoritma dan program untuk menghitung jumlah kata dalam suatu kalimat.
=> Algoritma : "Program menghitung jumlah kata dalam suatu kalimat"
Deklarasi :
kalimat[100] = karakter
i, spaci = integer
Deskripsi :
" Masukan Sebuah Kalimat "kalimat,sizeof(kalimat);
for i=0 then kalimat[i] then i++;
if isspace (kalimat[i]) and ispunct (kalimat[i]);
spasi++;
end if;
" Jumlah Kata"
spasi +1
" Kata yang anda masukan adalah";
for i=0 then kalimat[i] then i++
if(isspace (kalimat[i]) || ispunct (kalimat[i]))
spasi++;
end if;
kalimat[i];
end for;
#include<stdio.h>
#include<iostream>
#include<ctype.h>
using namespace std;
int main()
{
char kalimat[100];
int i, spasi=0;
cout << "\n\t\t - Program Menghitung Kata Dalam Sebuah Kalimat -\n";
cout << "\t==================================================================\n\n";
cout << "\t Masukan Sebuah Kalimat : ";
cin.getline(kalimat, sizeof(kalimat));
for(i=0; kalimat[i]; i++)
{
if(isspace (kalimat[i]) || ispunct (kalimat[i]))
{
spasi++;
}
}
cout << "\t Jumlah Kata = " << spasi +1 << "\n\n";
cout << "\t Kata yang anda masukan adalah : \n";
cout << "\t ";
for(i=0; kalimat[i]; i++)
{
if(isspace (kalimat[i]) || ispunct (kalimat[i]))
{
spasi++;
cout << "\n";
cout << "\t";
}
cout << kalimat[i];
}
cout << "\n";
cout << "\t==================================================================\n\n";
cout << "\n";
getchar();
}
WORKSHOP BAB 6
1. Menghitung ganjil dan genap
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
int main(int argc, char** argv) {
int g;
cout<<“———————————–“<<endl;
cout<<“Menentukan Nilai Ganjil dan Genap”<<endl;
cout<<“———————————–“<<endl;
cout<<“Masukan nilai g : “;
cin>>g;
if (g % 2==0)
cout<<“Bilangan Genap”<<endl;
else
cout<<“Bilangan Ganjil”<<endl;
cout<<“————————————“<<endl;
return 0;
}
Analisis
Untuk membuat program C++ yang menentukan bilangan ganjil atau bilangan genap, terlebih dahulu kita harus tahu bagaimana membedakan bilangan ganjil dan genap. Contoh bilangan ganjil adalah 1, 3, 5, 7, 9 dan seterusnya. Contoh bilangan genap adalah 2, 4, 6, 8 dan seterusnya. Sebelum bisa menentukan bilangan ganjil dan genap, anda harus mengetahui operator sisa pembagian (MOD) / modulus.
Analisis kasusnya:
Kasus 1. Jika x mod 2 = 0, maka tulis genap
Kasus 2. Jika x mod 2 = 1, maka tulis ganjil
algoritman
prosedur GanjilGenap(input/output n : integer)
{Program Menampilkn Bilangan Ganjil atau Genap}
Deskripsi :
N: integer } Pendeklarasian variabel yang akan digunakan
Algoritma :
Read (n) => untuk input
If (n mod 2 = 0) then
Write (“bilangan genap”)
Else
Write (“bilangan ganjil”)
End else
End if
2. Menghitung luas persegi panjang
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class persegi {
public :
persegi ();
void input();
void proses();
private :
int p;
int l;
int hasil;
};
persegi::persegi(){
cout<<“=================================\n”;
cout<<“Menghitung Luas Persegi Panjang\n”;
cout<<“=================================\n”;
}
void persegi::input (){
cout<<“Masukkan Panjang : “;
cin>>p;
cout<<“Masukkan Lebar : “;
cin>>l;
}
void persegi::proses(){
hasil = p*l;
cout<<“Luas : “<<hasil;
}
int main(int argc, char** argv) {
persegi Prsg;
Prsg.input();
Prsg.proses();
return 0;
}
Analisis
Untuk menghitung luas persegi panjang pada C++ kita harus mengetahui dahulu rumus luas persegi panjang, setelah kita tau rumus nya, barulah kita akan membuat program C++ Menghitung Luas Persegi Panjang. Di situ saya misalkan inputan panjang 4 dan lebar 3 untuk menghitung luas persegi panjang dengan rumus yaitu (PxL) panjang kali lebar.
L=PxL
L=4×3
L=12 cm2
algoritman :
prosedur Luas(input p : integer, l : integer, output hasil : hasil)
{mencari luas persegi panjang dan di cetak di piranti keluaran}
Deklarasi :
P : integer
L : integer
Hasil : integer
Deskripsi :
Read (p) → untuk input
Read (l) → untuk input
Hasil ← p*l
3. Menghitung keliling persegi panjang
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class persegi {
public :
persegi ();
void input();
void proses();
private :
int p;
int l;
int hasil;
};
persegi::persegi(){
cout<<“=================================\n”;
cout<<“Menghitung Keliling Persegi Panjang\n”;
cout<<“=================================\n”;
}
void persegi::input (){
cout<<“Masukkan Panjang : “;
cin>>p;
cout<<“Masukkan Lebar : “;
cin>>l;
}
void persegi::proses(){
hasil = 2*(p+l);
cout<<“Keiling : “<<hasil;
}
int main(int argc, char** argv) {
persegi Prsg;
Prsg.input();
Prsg.proses();
return 0;
}
Analisis
Untuk menghitung Keliling persegi panjang pada C++ kita harus mengetahui rumus keliling persegi panjang, barulah kita akan membuat program C++ Menghitung Keliling Persegi Panjang. Di situ saya misalkan inputan panjang 3 dan lebar 2 untuk menghitung keliling persegi panjang dengan rumus yaitu 2x(P+L).
K=2x(P+L)
K=2x(3+2)
K=2×5
K=10 cm
Algoritma
prosedur Keliling(input p : integer, l : integer, output hasil : hasil)
{mencari keliling persegi panjang dan di cetak di piranti keluaran}
Deklarasi :
P : integer
L : integer
Hasil : integer
Deskripsi :
Read (p) → untuk input
Read (l) → untuk input
Hasil ← 2*(p+l)
Tampilkan output
4. Menghitung volum lingkaran
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class lingkaran {
public :
lingkaran ();
void input();
void proses();
private :
int r;
float volume;
};
lingkaran::lingkaran(){
cout<<“=================================\n”;
cout<<“Menghitung Volume Lingkaran \n”;
cout<<“=================================\n”;
}
void lingkaran::input (){
cout<<“Masukkan Jari-Jari : “;
cin>>r;
}
void lingkaran::proses(){
volume=(4/(float)3)*(22/(float)7)*r*r*r;
cout<<“Volume : “<<volume;
}
int main(int argc, char** argv) {
lingkaran Lkrn;
Lkrn.input();
Lkrn.proses();
return 0;
}
Analisis
Pada dasarnya sebuah lingakran memiliki sebuah jari-jari, untuk menghitung sebuah Luas lingkaran makan kita akan gunakan ketetapan phi yang sudah ditetapkan dari sebuah perjanjian yaitu dengan phi 22/7 atau 3,14. untuk membuat program mencari luas saya menetapkan phi 3,14 dan inputan manual untuk jari-jarinya. berikut ini rumus mencari luas lingkran:
L=phi*r*r
Contoh:
L=3,14*7*7
L=153,86 cm2
Algoritma
prosedur Lingkaran(input r : integer)
{mencari Luas lingkaran dengan inputan jar-jarinya dan di cetak di piranti keluaran}
Deklarasi :
R : integer
Volume : float
Diskripsi :
Read (r) → untuk input
volume← (4/(float)3)*(22/(float)7)*r*r*r
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
int main(int argc, char** argv) {
int g;
cout<<“———————————–“<<endl;
cout<<“Menentukan Nilai Ganjil dan Genap”<<endl;
cout<<“———————————–“<<endl;
cout<<“Masukan nilai g : “;
cin>>g;
if (g % 2==0)
cout<<“Bilangan Genap”<<endl;
else
cout<<“Bilangan Ganjil”<<endl;
cout<<“————————————“<<endl;
return 0;
}
Analisis
Untuk membuat program C++ yang menentukan bilangan ganjil atau bilangan genap, terlebih dahulu kita harus tahu bagaimana membedakan bilangan ganjil dan genap. Contoh bilangan ganjil adalah 1, 3, 5, 7, 9 dan seterusnya. Contoh bilangan genap adalah 2, 4, 6, 8 dan seterusnya. Sebelum bisa menentukan bilangan ganjil dan genap, anda harus mengetahui operator sisa pembagian (MOD) / modulus.
Analisis kasusnya:
Kasus 1. Jika x mod 2 = 0, maka tulis genap
Kasus 2. Jika x mod 2 = 1, maka tulis ganjil
algoritman
prosedur GanjilGenap(input/output n : integer)
{Program Menampilkn Bilangan Ganjil atau Genap}
Deskripsi :
N: integer } Pendeklarasian variabel yang akan digunakan
Algoritma :
Read (n) => untuk input
If (n mod 2 = 0) then
Write (“bilangan genap”)
Else
Write (“bilangan ganjil”)
End else
End if
2. Menghitung luas persegi panjang
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class persegi {
public :
persegi ();
void input();
void proses();
private :
int p;
int l;
int hasil;
};
persegi::persegi(){
cout<<“=================================\n”;
cout<<“Menghitung Luas Persegi Panjang\n”;
cout<<“=================================\n”;
}
void persegi::input (){
cout<<“Masukkan Panjang : “;
cin>>p;
cout<<“Masukkan Lebar : “;
cin>>l;
}
void persegi::proses(){
hasil = p*l;
cout<<“Luas : “<<hasil;
}
int main(int argc, char** argv) {
persegi Prsg;
Prsg.input();
Prsg.proses();
return 0;
}
Analisis
Untuk menghitung luas persegi panjang pada C++ kita harus mengetahui dahulu rumus luas persegi panjang, setelah kita tau rumus nya, barulah kita akan membuat program C++ Menghitung Luas Persegi Panjang. Di situ saya misalkan inputan panjang 4 dan lebar 3 untuk menghitung luas persegi panjang dengan rumus yaitu (PxL) panjang kali lebar.
L=PxL
L=4×3
L=12 cm2
algoritman :
prosedur Luas(input p : integer, l : integer, output hasil : hasil)
{mencari luas persegi panjang dan di cetak di piranti keluaran}
Deklarasi :
P : integer
L : integer
Hasil : integer
Deskripsi :
Read (p) → untuk input
Read (l) → untuk input
Hasil ← p*l
3. Menghitung keliling persegi panjang
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class persegi {
public :
persegi ();
void input();
void proses();
private :
int p;
int l;
int hasil;
};
persegi::persegi(){
cout<<“=================================\n”;
cout<<“Menghitung Keliling Persegi Panjang\n”;
cout<<“=================================\n”;
}
void persegi::input (){
cout<<“Masukkan Panjang : “;
cin>>p;
cout<<“Masukkan Lebar : “;
cin>>l;
}
void persegi::proses(){
hasil = 2*(p+l);
cout<<“Keiling : “<<hasil;
}
int main(int argc, char** argv) {
persegi Prsg;
Prsg.input();
Prsg.proses();
return 0;
}
Analisis
Untuk menghitung Keliling persegi panjang pada C++ kita harus mengetahui rumus keliling persegi panjang, barulah kita akan membuat program C++ Menghitung Keliling Persegi Panjang. Di situ saya misalkan inputan panjang 3 dan lebar 2 untuk menghitung keliling persegi panjang dengan rumus yaitu 2x(P+L).
K=2x(P+L)
K=2x(3+2)
K=2×5
K=10 cm
Algoritma
prosedur Keliling(input p : integer, l : integer, output hasil : hasil)
{mencari keliling persegi panjang dan di cetak di piranti keluaran}
Deklarasi :
P : integer
L : integer
Hasil : integer
Deskripsi :
Read (p) → untuk input
Read (l) → untuk input
Hasil ← 2*(p+l)
Tampilkan output
4. Menghitung volum lingkaran
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class lingkaran {
public :
lingkaran ();
void input();
void proses();
private :
int r;
float volume;
};
lingkaran::lingkaran(){
cout<<“=================================\n”;
cout<<“Menghitung Volume Lingkaran \n”;
cout<<“=================================\n”;
}
void lingkaran::input (){
cout<<“Masukkan Jari-Jari : “;
cin>>r;
}
void lingkaran::proses(){
volume=(4/(float)3)*(22/(float)7)*r*r*r;
cout<<“Volume : “<<volume;
}
int main(int argc, char** argv) {
lingkaran Lkrn;
Lkrn.input();
Lkrn.proses();
return 0;
}
Analisis
Pada dasarnya sebuah lingakran memiliki sebuah jari-jari, untuk menghitung sebuah Luas lingkaran makan kita akan gunakan ketetapan phi yang sudah ditetapkan dari sebuah perjanjian yaitu dengan phi 22/7 atau 3,14. untuk membuat program mencari luas saya menetapkan phi 3,14 dan inputan manual untuk jari-jarinya. berikut ini rumus mencari luas lingkran:
L=phi*r*r
Contoh:
L=3,14*7*7
L=153,86 cm2
Algoritma
prosedur Lingkaran(input r : integer)
{mencari Luas lingkaran dengan inputan jar-jarinya dan di cetak di piranti keluaran}
Deklarasi :
R : integer
Volume : float
Diskripsi :
Read (r) → untuk input
volume← (4/(float)3)*(22/(float)7)*r*r*r
5. Menhitung keliling lingkaran
dengan c++
#include
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */
using namespace std;
class lingkaran {
public :
lingkaran ();
void input();
void proses();
private :
int r;
float keliling;
};
lingkaran::lingkaran(){
cout<<“=================================\n”;
cout<<“Menghitung Keliling Lingkaran\n”;
cout<<“=================================\n”;
}
void lingkaran::input (){
cout<<“Masukkan Jari-Jari : “;
cin>>r;
}
void lingkaran::proses(){
keliling=2*(22/(float)7)*r;
cout<<“Keliling : “<<keliling;
}
int main(int argc, char** argv) {
lingkaran Lkrn;
Lkrn.input();
Lkrn.proses();
return 0;
}
Analisis
Pada dasarnya sebuah lingakran memiliki sebuah jari-jari, untuk menghitung sebuah kelilingf lingkaran makan kita akan gunakan ketetapan phi yang sudah ditetapkan yaitu dengan phi 22/7 atau 3,14. untuk membuat program mencari luas saya menetapkan phi 3,14 dan inputan manual untuk jari-jarinya. berikut ini rumus mencari luas lingkran:
k=2*phi*r
Contoh:
k=2*3.14*7
k=43,96 cm
Algoritma
prosedur keliling(input r : integer)
{mencari keliling lingkaran dengan inputan jar-jarinya dan di cetak di piranti keluaran}
Deklarasi :
R : integer
Volume : float
Diskripsi :
Read (r) → untuk input
Keliling ← 2*(22/(float)7)*r
6. Menghitung luas segitiga
dengan c++
#include
using namespace std;
class segitiga {
public :
segitiga ();
void input();
void proses();
private :
int a;
int t;
int hasil;
};
segitiga::segitiga(){
cout<<“=================================\n”;
cout<<“\n\nLuas Segitiga Siku-siku : \n”<<endl;
cout<<“=================================\n”;
}
void segitiga::input (){
cout<<“Masukkan Alas : “;
cin>>a;
cout<<“Masukkan Tinggi : “;
cin>>t;
}
void segitiga::proses(){
hasil = (a*t)/2;
cout<<“Luas : “<<hasil;
}
main ()
{
segitiga Sgtg;
Sgtg.input();
Sgtg.proses();
return 0;
}
Analisis
untuk menghitung luas segitiga kita harus memberikan inputan alas dan tinggi, karena pada dasarnya segitiga hanya memiliki alas dan tinggi, berikut ini adalah rumus untuk mencari luas segitiga:
Luas=1/2*a*t
contoh soal
misalkan alas=5 dan tinggi 7
luas=1/2*5*7
luas=17,5 cm
Algoritma
prosedur Segitiga(input a : integer, input t : integer )
{mencari luas segitiga dengan menginputkan alas dan tinggi ke piranti keluaran}
Deklarasi :
A : integer
T : integer
Hasil : integer
Diskripsi :
Read (a) → untuk input
Read (t) → untuk input
Hasil ← a*t/2
7. Menghitung keliling segitiga
dengan c++
#include
#include
using namespace std;
class segitiga {
public :
segitiga ();
void input();
void proses();
private :
int a;
int b;
int c;
int keliling;
};
segitiga::segitiga(){
cout<<“=================================\n”;
cout<<“Menghitung Keliling Segitiga\n”;
cout<<“=================================\n”;
}
void segitiga::input (){
cout<<“Masukkan Panjang Sisi A = “;
cin>>a;
cout<<“Masukkan Panjang Sisi B = “;
cin>>b;
cout<<“Masukkan Panjang Sisi C = “;
cin>>c;
}
void segitiga::proses(){
keliling=a+b+c;;
cout<<“Keliling : “<<keliling;
}
int main(int argc, char *argv[]){
segitiga sgtga;
sgtga.input();
sgtga.proses();
return 0;
}
Analisis
untuk mencari keliling segitiga kita akan memberikan sebuah inputan sisi, dimana segitiga memiliki tiga sisi, dan untuk mencari keliling segitiga yaitu dengan cara S+S+S. berikut contoh pengerjaan mencari keliling segitiga
Keliling=S+S+S
Keliling=3+5+3
Keliling=11 cm
Algoritma
prosedur Segitiga(input sia : integer, sib : integer, sic : integer )
{mencari keliling segitiga dengan menginputkan sisi sebanyak tiga kali ke piranti keluaran}
Deklarasi :
A : integer
B : integer
C: integer
Keliling: integer
Diskripsi :
Read (a) → untuk input
Read (b) → untuk input
Read (c) → untuk input
Keliling ← a+b+c
8. Menghitung tinggi segitiga
dengan c++
#include
using namespace std;
class segitiga {
public :
segitiga ();
void input();
void proses();
private :
int l;
int a;
int tinggi;
};
segitiga::segitiga(){
cout<<“=================================\n”;
cout<<“Menghitung Tinggi Segitiga\n”;
cout<<“=================================\n”;
}
void segitiga::input (){
cout<<“masukkan luas segitiga : “;
cin>>l;
cout<<“masukkan nilai alas segitiga : “;
cin>>a;
}
void segitiga::proses(){
tinggi = 2*l/a;
cout<<“Tinggi : “<<tinggi;
}
int main(int argc, char** argv) {
segitiga sgtga;
sgtga.input();
sgtga.proses();
return 0;
}
algoritman
{Mencari Tinggi Segitiga}
Deklarasi :
L : integer
A : integer
Tinggi : integer
Diskripsi :
Read (l) → untuk input
Read (a) → untuk input
Hasil ← 2*l/a
9. Menghitung kombinasi
dengan c++
#include
#include
using namespace std;
int main(){
int i,r, n, C, x;
int fak_n=1;
int fak_x=1;
int fak_r=1;
cout<<“Masukan nilai r: “;cin>>r;
cout<<“Masukan nilai n: “;cin>>n;
x=n-r;
for (i=1; i<=x; i++){
fak_x = fak_x * i;}
for (i=1; i<=n; i++){
fak_n = fak_n * i;}
for (i=1; i<=r; i++){
fak_r = fak_r * i;}
cout<<“\nFaktor dari “<<n<<” adalah\t : “<<fak_n;
cout<<“\nFaktor dari “<<r<<” adalah\t : “<<fak_r;
cout<<“\nFaktor dari n-r (“<<x<<“) adalah: “<<fak_x;
C= fak_n /(fak_x *fak_r);
cout<<“\n\nMari kita hitung : “<<fak_n<<” / (“<<fak_r<<” X “<<fak_x<<“)”;
cout<<“\n\nMaka Kombinasinya: “<<C;
getch();
return 0;
}
10. Menghitung permutasi
dengan c++
cara 1.
#include
#include
using namespace std;
int main(){
int i,r, n, P, x;
int fak_n=1;
int fak_x=1;
cout<<“Masukkan nilai r: “;cin>>r;
cout<<“Masukkan nilai n: “;cin>>n;
x=n-r;
for (i=1; i<=x; i++){
fak_x = fak_x * i;}
for (i=1; i<=n; i++){
fak_n = fak_n * i;}
cout<<“\nFaktor dari “<<n<<” adalah: “<<fak_n;
cout<<“\nFaktor dari n-r (“<<x<<“) adalah: “<<fak_x;
P= fak_n /(fak_x);
cout<<“\n\nMaka Permutasinya: “<<P; getch();
return 0;
}
cara ke 2
#include
#include
using namespace std;
class kombinatorial{
public:
void permutasi();
void combinasi();
private:
int i,n,r,p,t,a,b,c;
};
void kombinatorial::permutasi(){
cout<<“PERMUTASI”<<endl;
cout<<“\nMasukan n:”;cin>>n;
cout<<“\nMasukan r:”;cin>>r;
a=1;
b=1;
for(i=n;i>0;i–)
{
a *=i;
}
t=n-r;
if(t!=0)
{
for(i=t;i>0;i–)
{
b *=i;
}
}
if(t!=0)
{
p=a/b;
cout<<“\nHasil:”<<p<<endl;
}
else
{
cout<<a<<endl;
}
cout<<“====================================”<<endl;
}
void kombinatorial::combinasi(){
cout<<“\nCOMBINASI”<<endl;
cout<<“\nMasukan n:”;cin>>n;
cout<<“\nMasukan r:”;cin>>r;
a=1;
b=1;
c=1;
for(i=n;i>0;i–)
{
a *=i;
}
t=n-r;
if(t!=0)
{
for(i=t;i>0;i–)
{
b *=i;
}
}
for(i=r;i>0;i–)
{
c *=i;
}
if(t!=0)
{
p=a/(b*c);
cout<<“\nHasil:”<<p<<endl;
}
else
{
cout<<a<<endl;
}
}
int main(int argc, char *argv[])
{
kombinatorial x;
x.permutasi();
cout<<endl;
x.combinasi();
cout<<endl;
system(“PAUSE”);
return EXIT_SUCCESS;
}
ALGORITMA BUBBLE SORT
Algoritma Bubble Sort
Membandingkan data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika tidak sesuai maka tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data ke-i). Apa maksudnya tidak sesuai? Jika kita menginginkan algoritme menghasilkan data dengan urutan ascending (A-Z) kondisi tidak sesuai adalah data ke-i > data ke-i+1, dan sebaliknya untuk urutan descending (A-Z).Membandingkan data ke-(i+1) dengan data ke-(i+2). Kita melakukan pembandingan ini sampai data terakhir. Contoh: 1 dgn 2; 2 dgn 3; 3 dgn 4; 4 dgn 5 … ; n-1 dgn n.Selesai satu iterasi, adalah jika kita sudah selesai membandingkan antara (n-1) dgn n. Setelah selesai satu iterasi kita lanjutkan lagi iterasi berikutnya sesuai dengan aturan ke-1. mulai dari data ke-1 dgn data ke-2, dst.Proses akan berhenti jika tidak ada pertukaran dalam satu iterasi.
Contoh Kasus Bubble Sort
Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan kita ingin mengurutkan data ini (ascending) dengan menggunakan bubble sort. Berikut ini adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3, 2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2, 6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai
Analisis Algoritma Bubble Sort
Tujuan dari analisis algoritma adalah untuk mengetahui efisiensi dari algoritma. Dalam hal ini dilakukan pembandingan antara dua atau lebih algoritma pengurutan.Tahap analisis adalah melakukan pengecekan program untuk memastikan bahwa program telah benar secara logika maupun sintak (tahap tracing atau debugging). Tahap selanjutnya yaitu menjalankan program untuk mengetahui running time atau waktu komputasi dalam hal ini
termasuk jumlah langkah. Data uji yang digunakan adalah data yang tidak terurut atau data random, terurut membesar/, dan terurut mengecil.
Salah satu cara untuk menganalisa kecepatan algoritma sorting saat running time adalah dengan menggunakan notasi Big O. Algoritma sorting mempunyai kompleksitas waktu terbaik, terburuk, dan rata-rata. Dengan notasi Big O, kita dapat mengoptimalkan penggunaan algoritma sorting. Sebagai contoh, untuk kasus dimana jumlah masukan untuk suatu pengurutan banyak, lebih baik digunakan algoritma sorting seperti quick sort, merge sort, atau heap sortkarena kompleksitas waktu untuk kasuk terburuk adalah O(n log n). Hal ini tentu akan sangatberbeda jika kita menggunakan algoritma sorting insertion sort atau bubble sort dimana waktu yang dibutuhkan untuk melakukan pencarian akan sangat lama. Hal ini disebabkan kompleksitas waktu terburuk untuk algoritma sorting tersebut dengan jumlah masukan yang banyak adalah O(n2).
Kompleksitas Algoritma Bubble Sort
Kompleksitas Algoritma Bubble Sort dapat dilihat dari beberapa jenis kasus, yaitu worst-case, average-case, dan best-case.
Ø Kondisi Best-Case
Dalam kasus ini, data yang akan disorting telah terurut sebelumnya, sehingga proses perbandingan hanya dilakukan sebanyak (n-1) kali, dengan satu kali pass.
Proses perbandingan dilakukan hanya untuk memverifikasi keurutan data. Contoh Best-Case dapat dilihat pada pengurutan data “1 2 3 4” di bawah ini.
Pass Pertama
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Dari proses di atas, dapat dilihat bahwa tidak terjadi penukaran posisi satu kalipun, sehingga tidak dilakukan pass selanjutnya. Perbandingan elemen dilakukan sebanyak tiga kali. Proses perbandingan pada kondisi ini hanya dilakukan sebanyak (n-1) kali. Persamaan Big-O yang diperoleh dari proses ini adalah O(n). Dengan kata lain, pada kondisi Best-Case algoritma Bubble Sort termasuk pada algoritma
lanjar.
Ø Kondisi Worst-Case
Dalam kasus ini, data terkecil berada pada ujung array. Contoh Worst-Case dapat dilihat pada pengurutan data “4 3 2 1” di bawah ini.
Pass Pertama
(4 3 2 1) menjadi (3 4 2 1)
(3 4 2 1) menjadi (3 2 4 1)
(3 2 4 1) menjadi (3 2 1 4)
Pass Kedua
(3 2 1 4) menjadi (2 3 1 4)
(2 3 1 4) menjadi (2 1 3 4)
(2 1 3 4) menjadi (2 1 3 4)
Pass Ketiga
(2 1 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Pass Keempat
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Dari langkah pengurutan di atas, terlihat bahwa setiap kali melakukan satu pass, data terkecil akan bergeser ke arah awal sebanyak satu step. Dengan kata lain, untuk menggeser data terkecil dari urutan keempat menuju urutan pertama, dibutuhkan pass sebanyak tiga kali, ditambah satu kali pass untuk memverifikasi. Sehingga jumlah proses pada kondisi best case dapat dirumuskan sebagai berikut. Jumlah proses = n2+n (3)
Dalam persamaan (3) di atas, n adalah jumlah elemen yang akan diurutkan. Sehingga notasi Big-O yang didapat adalah O(n2). Dengan kata lain, pada kondisi worst-case, algoritma Bubble Sort termasuk dalam kategori algoritma kuadratik.
Ø Kondisi Average-Case
Pada kondisi average-case, jumlah pass ditentukan dari elemen mana yang mengalami penggeseran ke kiri paling banyak. Hal ini dapat ditunjukkan oleh proses pengurutan suatu array, misalkan saja (1 8 6 2). Dari (1 8 6 2), dapat dilihat bahwa yang akan mengalami proses penggeseran paling banyak adalah elemen 2, yaitu sebanyak dua kali.
Pass Pertama
(1 8 6 2) menjadi (1 8 6 2)
(1 8 6 2) menjadi (1 6 8 2)
(1 6 8 2) menjadi (1 6 2 8)
Pass Kedua
(1 6 2 8) menjadi (1 6 2 8)
(1 6 2 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
Pass Ketiga
(1 2 6 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
Dari proses pengurutan di atas, dapat dilihat bahwa untuk mengurutkan diperlukan dua buah passing, ditambah satu buah passing untuk memverifikasi. Dengan kata lain, jumlah proses perbandingan dapat dihitung sebagai berikut. Jumlah proses = x2+x (4) Dalam persamaan (4) di atas, x adalah jumlah penggeseran terbanyak. Dalam hal ini, x tidak pernah lebih besar dari n, sehingga x dapat dirumuskan sebagai
Dari persamaan (4) dan (5) di atas, dapat disimpulkan bahwa notasi
big-O nya adalah O(n2). Dengan kata lain, pada kondisi average case algoritma Bubble Sort termasuk dalam algoritma kuadratik.
Implementasi dalam Pseudo-Code
Setiap algoritma akan memiliki implementasi yang berbeda, tergantung dari bahasa program yang dipakai. Oleh karena itu berikut ini adalah pseudo-code dari algoritma bubblesort, untuk memudahkan implementasi bubblesort pada bahasa apapun.
procedure bubbleSort( A : list of
sortable items ) defined as:
do
swapped := false
for each i in 0 to length(A) - 2
inclusive do:
if A[i] > A[i+1] then
swap( A[i], A[i+1] )
swapped := true
end if
end for
while swapped
end procedure
Membandingkan data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika tidak sesuai maka tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data ke-i). Apa maksudnya tidak sesuai? Jika kita menginginkan algoritme menghasilkan data dengan urutan ascending (A-Z) kondisi tidak sesuai adalah data ke-i > data ke-i+1, dan sebaliknya untuk urutan descending (A-Z).Membandingkan data ke-(i+1) dengan data ke-(i+2). Kita melakukan pembandingan ini sampai data terakhir. Contoh: 1 dgn 2; 2 dgn 3; 3 dgn 4; 4 dgn 5 … ; n-1 dgn n.Selesai satu iterasi, adalah jika kita sudah selesai membandingkan antara (n-1) dgn n. Setelah selesai satu iterasi kita lanjutkan lagi iterasi berikutnya sesuai dengan aturan ke-1. mulai dari data ke-1 dgn data ke-2, dst.Proses akan berhenti jika tidak ada pertukaran dalam satu iterasi.
Contoh Kasus Bubble Sort
Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan kita ingin mengurutkan data ini (ascending) dengan menggunakan bubble sort. Berikut ini adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3, 2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2, 6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai
Analisis Algoritma Bubble Sort
Tujuan dari analisis algoritma adalah untuk mengetahui efisiensi dari algoritma. Dalam hal ini dilakukan pembandingan antara dua atau lebih algoritma pengurutan.Tahap analisis adalah melakukan pengecekan program untuk memastikan bahwa program telah benar secara logika maupun sintak (tahap tracing atau debugging). Tahap selanjutnya yaitu menjalankan program untuk mengetahui running time atau waktu komputasi dalam hal ini
termasuk jumlah langkah. Data uji yang digunakan adalah data yang tidak terurut atau data random, terurut membesar/, dan terurut mengecil.
Salah satu cara untuk menganalisa kecepatan algoritma sorting saat running time adalah dengan menggunakan notasi Big O. Algoritma sorting mempunyai kompleksitas waktu terbaik, terburuk, dan rata-rata. Dengan notasi Big O, kita dapat mengoptimalkan penggunaan algoritma sorting. Sebagai contoh, untuk kasus dimana jumlah masukan untuk suatu pengurutan banyak, lebih baik digunakan algoritma sorting seperti quick sort, merge sort, atau heap sortkarena kompleksitas waktu untuk kasuk terburuk adalah O(n log n). Hal ini tentu akan sangatberbeda jika kita menggunakan algoritma sorting insertion sort atau bubble sort dimana waktu yang dibutuhkan untuk melakukan pencarian akan sangat lama. Hal ini disebabkan kompleksitas waktu terburuk untuk algoritma sorting tersebut dengan jumlah masukan yang banyak adalah O(n2).
Kompleksitas Algoritma Bubble Sort
Kompleksitas Algoritma Bubble Sort dapat dilihat dari beberapa jenis kasus, yaitu worst-case, average-case, dan best-case.
Ø Kondisi Best-Case
Dalam kasus ini, data yang akan disorting telah terurut sebelumnya, sehingga proses perbandingan hanya dilakukan sebanyak (n-1) kali, dengan satu kali pass.
Proses perbandingan dilakukan hanya untuk memverifikasi keurutan data. Contoh Best-Case dapat dilihat pada pengurutan data “1 2 3 4” di bawah ini.
Pass Pertama
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Dari proses di atas, dapat dilihat bahwa tidak terjadi penukaran posisi satu kalipun, sehingga tidak dilakukan pass selanjutnya. Perbandingan elemen dilakukan sebanyak tiga kali. Proses perbandingan pada kondisi ini hanya dilakukan sebanyak (n-1) kali. Persamaan Big-O yang diperoleh dari proses ini adalah O(n). Dengan kata lain, pada kondisi Best-Case algoritma Bubble Sort termasuk pada algoritma
lanjar.
Ø Kondisi Worst-Case
Dalam kasus ini, data terkecil berada pada ujung array. Contoh Worst-Case dapat dilihat pada pengurutan data “4 3 2 1” di bawah ini.
Pass Pertama
(4 3 2 1) menjadi (3 4 2 1)
(3 4 2 1) menjadi (3 2 4 1)
(3 2 4 1) menjadi (3 2 1 4)
Pass Kedua
(3 2 1 4) menjadi (2 3 1 4)
(2 3 1 4) menjadi (2 1 3 4)
(2 1 3 4) menjadi (2 1 3 4)
Pass Ketiga
(2 1 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Pass Keempat
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Dari langkah pengurutan di atas, terlihat bahwa setiap kali melakukan satu pass, data terkecil akan bergeser ke arah awal sebanyak satu step. Dengan kata lain, untuk menggeser data terkecil dari urutan keempat menuju urutan pertama, dibutuhkan pass sebanyak tiga kali, ditambah satu kali pass untuk memverifikasi. Sehingga jumlah proses pada kondisi best case dapat dirumuskan sebagai berikut. Jumlah proses = n2+n (3)
Dalam persamaan (3) di atas, n adalah jumlah elemen yang akan diurutkan. Sehingga notasi Big-O yang didapat adalah O(n2). Dengan kata lain, pada kondisi worst-case, algoritma Bubble Sort termasuk dalam kategori algoritma kuadratik.
Ø Kondisi Average-Case
Pada kondisi average-case, jumlah pass ditentukan dari elemen mana yang mengalami penggeseran ke kiri paling banyak. Hal ini dapat ditunjukkan oleh proses pengurutan suatu array, misalkan saja (1 8 6 2). Dari (1 8 6 2), dapat dilihat bahwa yang akan mengalami proses penggeseran paling banyak adalah elemen 2, yaitu sebanyak dua kali.
Pass Pertama
(1 8 6 2) menjadi (1 8 6 2)
(1 8 6 2) menjadi (1 6 8 2)
(1 6 8 2) menjadi (1 6 2 8)
Pass Kedua
(1 6 2 8) menjadi (1 6 2 8)
(1 6 2 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
Pass Ketiga
(1 2 6 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
(1 2 6 8) menjadi (1 2 6 8)
Dari proses pengurutan di atas, dapat dilihat bahwa untuk mengurutkan diperlukan dua buah passing, ditambah satu buah passing untuk memverifikasi. Dengan kata lain, jumlah proses perbandingan dapat dihitung sebagai berikut. Jumlah proses = x2+x (4) Dalam persamaan (4) di atas, x adalah jumlah penggeseran terbanyak. Dalam hal ini, x tidak pernah lebih besar dari n, sehingga x dapat dirumuskan sebagai
Dari persamaan (4) dan (5) di atas, dapat disimpulkan bahwa notasi
big-O nya adalah O(n2). Dengan kata lain, pada kondisi average case algoritma Bubble Sort termasuk dalam algoritma kuadratik.
Implementasi dalam Pseudo-Code
Setiap algoritma akan memiliki implementasi yang berbeda, tergantung dari bahasa program yang dipakai. Oleh karena itu berikut ini adalah pseudo-code dari algoritma bubblesort, untuk memudahkan implementasi bubblesort pada bahasa apapun.
procedure bubbleSort( A : list of
sortable items ) defined as:
do
swapped := false
for each i in 0 to length(A) - 2
inclusive do:
if A[i] > A[i+1] then
swap( A[i], A[i+1] )
swapped := true
end if
end for
while swapped
end procedure
Langganan:
Komentar (Atom)
WORKSHOP BAB 9
NO.1 : C++ : #include <iostream> #define maks 10 using namespace std; /* run this program using the console pauser or add your o...
-
BAB 2 1. Buatlah program yang meminta user memasukkan jam, menit dan detik kemudian menampilkannya dengan format jam:menit:deti...
-
BAB 4 Kasus 4.1. Tentukanlah bilangan terbesar antara dua bilangan bulat. Algoritma 4.1. Algoritma Maksimum {Menentukan nilai terbe...
-
BAB 3 . 1. Buatlah analisis dan algoritma untuk mencari titik tengah sebuah garis yang ujung titiknya adalah : A(x1,y...