Showing posts with label CPP. Show all posts
Showing posts with label CPP. Show all posts

Tuesday, May 18, 2021

Penjelasan Tipe Data Lengkap dan Contohnya di C++

 TIPE DATA C++



Hai semua, kembali dengan saya, postingan mengenai pembelajaran bahasa pemrogaman C++. kali ini saya akan membagikan kepada kalian apa itu tipe data, yang tentunya sangat berguna pada pembeljaran bahasa C++ ini. oke langsung saja ke materinya.

Tipe Data adalah jenis data berdasarkan isi dan sifatnya. Misalnya bisa kita analogikan dengan contoh kasus sehari hari yaitu galon air hanya khusus dibuat untuk menampung jenis benda dengan jenis tertentu, pada kasus ini benda yang dimaksud adalah air, sedangkan tong sampah hal ini digunakan untuk menampung sampah. jika belum tahu simak pembahasan berikut ini.
Adapun jenis tipe tipe data dasar pemrogaman, diantara lain:

Sunday, May 16, 2021

Apa Itu C++ ? Pengertian C++ lengkap

Pengenalan Bahasa C++



Halo sobat blogger, pada hari ini saya ingin membagi ilmu saya ketika saya belajar pertama kali belajar bahasa pemrogaman. Di postingan ku kali ini saya akan mengenalkan apa itu Bahasa C++.

Bahasa C++ merupakan bahasa pemrogaman komputer yang dibuat oleh Bjarne Stroustrup, dimana bahasa C++ merupakan perkembangan dari bahasa C, yang dikembangkan di Bong Labs (Dennis Ritchie) pada awal tahun 1970-an. C++ dikembangkan pada awal 1980-an. itulah sedikit pengetahuan tentang bahasa pemrogaman yang akan saya bahas.

Tuesday, August 13, 2019

Pengertian Sequential Search dan Implementasinya

Sequential search adalah algoritma pencarian dengan menelusuri urut dari awal sampai akhir. Algoritma sequential search biasanya diimplementasikan oleh angka. Namun untuk teks string juga dapat diimplementasikan dengan algoritma ini.

Biasanya dalam java sudah terdapat library khusus yang digunakan untuk melakukan pencarian. Namun untuk bahasa tingkat tinggi seperti pascal, kayaknya belum memiliki library searching.

Searching dengan sequential search memiliki worst case apabila angka yang dicari berada di akhir array atau angka yang dicari tidak terdapat pada array. Sedangkan best case searching ini ketika angka yang dicari berada paling depan atau awal array.

Bagaimana cara kerja searching dengan mengurutkan dari awal sampai bilangan terakhir? Searching ini membandingkan angka yang dicari dengan angka yang berada dalam array satu per satu sampai angka yang dicari didapatkan.

Searching ini dapat digunakan tanpa terlebih dahulu mengurutkannya. Berbeda dengan algoritma binary search yang saat kita mau melakukan pencarian kita harus menggunakan angka yang sudah terurut.

Source code Sequential Search


Di bawah ini adalah source code untuk sequential search dengan menggunakan bahasa C++. Untuk mengubahnya ke dalam bahasa lain anda hanya perlu mengubah beberapa syntax. Karena algoritma akan bersifat universal untuk semua bahasa pemrograman yang digunakan.


Penjelasan


Kita memiliki angka-angka dalam array 1 dimensi. Untuk mencari panjang array kita gunakan operasi yang berada pada variable n.

Sebelum melakukan pencarian kita ingin menampilkan bilangan-bilangan yang berada pada variable angka. Kita menggunakan looping sebanyak n untuk melakukannya.

Untuk mengetahui angka yang dicari sudah ketemu atau belum kita gunakan variable boolean ketemu. Variable temp digunakan untuk melakukan looping sampai akhir dari array angka.

Dengan cara menghentikan perulangan saat ketemu membuat program menjadi ringan karena kita sudah tidak perlu lagi mencarinya sampai akhir array angka. Namun Cari ini tidak dapat digunakan untuk mencari dua nilai pada array yang sama.

Output


10 20 30 40 50 60 70 80 90 100
angka 5 tidak berada dalam array

Baca Juga: Pengertian Array dan penggunaannya dalam C++

Untuk mencari dua atau lebih nilai yang sama dapat dengan mudah mengedit program diatas dengan melakukan pencarian sampai akhir array. Cobalah untuk mengedit algoritma diatas agar dapat digunakan untuk mencari dua atau lebih nilai yang sama.

Tuesday, August 6, 2019

Penjelasan lengkap quick sort C++

Seperti merge sort, quick sort juga membagi masalah menjadi beberapa masaah yang berbeda. Algoritma quick sort menggunakan pivot yang letaknya terserah dengan pemrogram.

Baca juga: Penjelasan lengkap merge sort C++

Quick sort bekerja dengan menukarkan bagian yang lebih besar dari pivot di letakkan disebelah kanan pivot sementara bagian yang lebih kecil dari pivot diletakkan disebelah kiri pivot.

Pivot dapat berada dimanapun. Pivot dapat berada diawal, diakhir, ditengah atau diambil secara random. Penentuan pivot tergantung dari programmer yang membuat algoritma tersebut berjalan.

Quick sort memiliki kompleksitas O(n log n). log disini menggunakan basis 2, Dibandingkan dengan insertion sort, selection sort, dan bubble sort; algoritma quick sort harusnya memiliki kecepatan yang lebih cepat. Ini akan terasa jika anda mengurutkan bilangan yang sangat banyak.

Baca juga: Pengertian algoritma komputer

Bagaimana quick sort bekerja. Quick sort bekerja seperti deskripsi dibawah ini.

  1. Ambil sembarang angka sebagai pivot.
  2. Gunakan variable i adalah awal dari array dikurangi 1, dan j adalah awal dari array.
  3. Bandingkan j dengan pivot,
  4. Apabila j lebih kecil sama dengan dari pivot, tambahkan i dan tukar array[i] dan array[j].
  5. Bagi angka diantara pivot menjadi dua bagian,
  6. ulangi langkah 2 sampai terurut.

Worst case quick sort


Semua algoritma memiliki worst case, begitu juga dengan quick sort. Algoritma ini memiliki worst case ketika proses partisi selalu mengambil bilangan terbesar atau terkecil sebagai pivot. Apabila pivot diambil diakhir array quick sort akan mengalami worst case saat mengurutkan bilangan yang sudah terurut.

Contoh sorting quick sort


Disini kita menggunakan array index terakhir sebagai pivot
arr[5] = {10, 30, 50, 20, 40};

awal = 0, akhir = 4, pivot = arr[akhir] = 40;
Menginisialisasi i = awal - 1 = -1;

Melakukan perulangan dari j = low sampai dengan high - 1
untuk j = 0 : arr[j] <= pivot, lakukan i++ dan tukar array[i] dengan array[j]
i = 0
Karena i dan j sama, maka pertukaran akan menghasilkan nilai yang sama.
arr[] = {10, 30, 50, 20, 40}

untuk j = 1 : arr[j] <= pivot, lakukan i++ dan tukar array[i] dengan array [j]
i = 1
Karena i dan j sama, maka pertukaran akan menghasilkan nilai yang sama.
arr[] = {10, 30, 50, 20, 40}

untuk j = 2 : arr[j] <= pivot, karena tidak dipenuhi lanjutkan ke perulangan selanjutnya.
i = 1
arr[] = {10, 30, 50, 20, 40}

untuk j = 3 : arr[j] <= pivot, lakukan i++ dan tukar array[i] dengan array [j]
i = 2
arr[] = {10, 30, 20, 50, 40}

Setelah ini kita selesai melakukan perulangan selanjutnya kita menukar letak pivot. Pivot ditukar dengan arr[i + 1} dan arr[akhir] (atau pivot).
arr[5] = {10, 20, 30, 40, 50};

Sekarang pivot telah diletakkan pada tempat yang semestinya. Jika belum terurut lakukan hal tersebut di bagian kiri pivot dan bagian kanan pivot.

Source code quick sort


Sebelum melihat kode program, saya sarankan untuk mencoba membuatnya terlebih dahulu. Jika sudah silakan lihat kode program dibawah ini.

>

Itu tadi adalah penjelasan mengenai algoritma quick sort. Algoritma quick sort sebenarnya dapat berbeda-beda. Namun ciri dari quick sort adalah peletakkan bilangan yang lebih kecil disebelah kiri pivot dan bilangan yang lebih besar disebelah kanan pivot. 

Apabila ada yang ditanyakan tinggalkan di kolom komentar.

Wednesday, July 31, 2019

Penjelasan lengkap merge sort C++

Penjelasan lengkap merge sort C++
Merge sort adalah algoritma sorting yang berdasarkn dengan cara membagi dan menggabungkan. Berbeda dengan selection sort, insertion sort, dan bubble sort, algoritma merge sort memiliki kompleksitas yang lebih kecil yakni O(n log n).

Algoritma ini membagi bilangan atau array sampai tidak dapat dibagi kembali dan mengurutkannya setiap bagian. Dengan cara ini kita dapat memperoleh jumlah perbandingan yang lebih sedikit daripada sorting menggunakan selection sort, bubble sort dan insertion sort.

Bagaimana merge sort bekerja


Algoritma merge sort bekerja seperti deskripsi dibawah ini:

  1. Bagi array bilangan sampai tidak dapat dibagi kembali,
  2. Urutkan bilangan yang telah dibagi,
  3. Gabungkan kembali bilangan yang telah dibagi,
  4. Array bilangan akan terurut.

Deskripsi diatas agak sulit untuk dibayangkan bagaimana komputer melakukannya untuk itu lihatlah contoh dari sorting dibawah ini dengan algoritma merge sort.


Kita memiliki array bilangan 38, 27, 43, 3, 9, 82, 10. Bilangan tersebut dibagi menjadi dua sehingga array yang terbentuk menjadi 38, 27, 43, 3 dan 9, 82, 10. Array bilangan tersebut masih dapat dibagi kembali, jadi kita harus membagi array tersebut sampai tidak dapat dibagi kembali. Pada bagian ini kita melakuakan pembagian (divide).

Setelah menjadi array yang tidak dapat dibagi, kita gabungkan dengan mengurutkannya. Mekanisme pengurutan sama dengan cara menggabungkan dua array yang telah terurut. Misalnya bagian pertama bandingkan 38 dan 27, maka gabungan array dua bilangan tersebut adalah 27, dan 38. Kemudian pada tingkat selanjutnya (baris ke 5 dan 6), kita memiliki 27, 38 dan 3, dan 43. Bandingkan array bilangan 27 dan 3, karena 3 lebih kecil kita masukkan array baru yakni gabungan dari array sebelumnya. Kemudian bandingkan kembali 27 dengan 43, karenaa 27 lebih kecil kita taruh di sebelah kanan 3. Kemudian kita bandingkan kembali 38 dan 43, karena 38 lebih kecil dari 43, maka kita taruh angka 38 di samping kanan angka 27. Karena salah satu array telah habis kita hanya perlu memasukkannya. Bagian ini biasa disebut dengan penggabungan (conquer).

Dengan cara diatas kita tidak perlu membandingkan setiap angka untuk memperoleh hasil yang terurut. Pada array 2 yang dibandingkan dengan array 2 maksimal kita hanya melakukan perbandingan 3 kali. Dengan cara ini kita akan memperoleh jumlah perbandingan yang lebih sedikit.

Bagaimana membagi array


Untuk membagi array menjadi dua bagian kita menggunakan rekursif. Apa itu fungsi rekursif ? Fungsi rekursif adalah fungsi yang mengacu pada dirinya sendiri. Singkatnya kita melakukan pemanggilan fungsi pada fungsi tersebut. Untuk memahami algoritma merge sort, cobalah untuk memahami bagaimana rekursif bekerja.

Untuk membagi array menjadi dua bagian lihatlah potongan program dibawah ini:

void mergeSort(int arr[], int a, int z)
{ 
    if (a < z) 
    { 
        int m = a+(z-l)/2; 
  
        mergeSort(arr, a, m); 
        mergeSort(arr, m+1, z); 
  
        merge(arr, a, m, z); 
    } 
} 

Fungsi diatas digunakan untuk membagi array menjadi dua bagian. arr[] merupakan bilangan yang akan kita urutkan. Variabel a adalah index paling kiri dari arr[] dan variabel z adalah index paling kanan dalam arr[].

Cara kerja fungsi tersebut adalah jika index kiri lebih kecil dari index kanan, kita membagi menjadi 2 dengan cara m = a +(z-1)/2. Setelah itu kita gunakan rekursif untuk membagi kembali dengan memanggil fungsi dirinya sendiri. Hal ini akan terus dilakukan sampai index kiri (variabel a) lebih besar atau sama dengan index kanan (variabel z). Tapi perlu diingat komputer akan menyelesaikan perintah yang berada pada fungsi paling kecil (fungsi yang memanggil fungsi terlebih dahulu). Untuk lebih jelasnya cobalah untuk melakukan debug pada proses algoritma diatas.

Bagaimana menggabung dua array terurut


Untuk menggabung dua array yang sudah terurut kita hanya perlu membandingkan kedua array, kemudian memasukkannya dalam array baru sampai salah satu array habis. Sisanya dapat dimasukkan tanpa melakukan perbandingan kembali. Lihatlah potongan program dibawah ini:

void merge(int arr[], int a, int m, int z)
{ 
    int q, w, e; 
    int n1 = m - a + 1; 
    int n2 =  z - m; 
  
    int L[n1], R[n2]; 
  
    for (i = 0; i < n1; i++) 
        L[i] = arr[l + i]; 
    for (j = 0; j < n2; j++) 
        R[j] = arr[m + 1+ j]; 
  
    q = 0;
    w = 0;
    e = a;
    while (q < n1 && w < n2) 
    { 
        if (L[q] <= R[w]) 
        { 
            arr[e] = L[q]; 
            q++; 
        } 
        else
        { 
            arr[e] = R[w]; 
            w++; 
        } 
        e++; 
    } 
  
    while (q < n1) 
    { 
        arr[e] = L[q]; 
        q++; 
        e++; 
    } 
  
    while (w < n2) 
    { 
        arr[e] = R[w]; 
        w++; 
        e++; 
    } 
} 

Parameter arr[] adalah array yang akan dibandingkan, parameter a adalah index kiri dari sub array sebelumnya dan paramater m adalah index kanan dari sub array dengan m+1 adalah index kiri dari sub array lainnya, dan parameter z adalah index kanan sub array.

Singkatnya
arr[] adalah array yang akan di sorting
sub array pertama arr[a .. m]
sub array kedua arr[m+1 .. z]

Pada bagian pendeklarasian variabel q, w, e digunakan untuk penunjuk array dari dua array yang nanti akan dibagi. Variabel n1 adalah panjang array pertama dan variabel n2 adalah panjang array kedua. Array pada arr[] dipindahkan dengan index a sampai m, dan index m+1 sampai z. Copy arr[] ke dalam array L dan array R.

Setelah melakukan copy data kita bandingkan dengan mekanisme apabila L[0] lebih kecil dari R[0] value atau nilai L[0] kita masukkan dalam array arr[], index e dan index array L (dalam contoh diatas q) ditambahkan. Sementara itu jika value R lebih kecil dari value L value dari R kita masukkan dalam arr[], index arr[] (dalam contoh diatas e) dan index R[] (dalam contoh diatas w) ditambahkan. Proses ini akan terus berulang sampai salah satu array habis. Setelah itu kita copykan array yang belum habis ke dalam array hasil (dalam contoh arr[]).

Dengan melakukan hal diatas pada setiap bagian, kita akan memperoleh array terurut dengan melakukan sesedikit mungkin perbandingan.

Source code merge sort


#include<stdlib.h>
#include<stdio.h> 
#include<iostream>
using namespace std;
  
void merge(int arr[], int a, int m, int z) 
{ 
    int q, w, e; 
    int n1 = m - a + 1; 
    int n2 =  z - m; 
  
    int L[n1], R[n2]; 
  
    for (i = 0; i < n1; i++) 
        L[i] = arr[l + i]; 
    for (j = 0; j < n2; j++) 
        R[j] = arr[m + 1+ j]; 
  
    q = 0;
    w = 0; 
    e = a; 
    while (q < n1 && w < n2) 
    { 
        if (L[q] <= R[w]) 
        { 
            arr[e] = L[q]; 
            q++; 
        } 
        else
        { 
            arr[e] = R[w]; 
            w++; 
        } 
        e++; 
    } 
  
    while (q < n1) 
    { 
        arr[e] = L[q]; 
        q++; 
        e++; 
    } 
  
    while (w < n2) 
    { 
        arr[e] = R[w]; 
        w++; 
        e++; 
    } 
} 
  
void mergeSort(int arr[], int a, int z) 
{ 
    if (a < z) 
    { 
        int m = a+(z-l)/2; 
  
        mergeSort(arr, a, m); 
        mergeSort(arr, m+1, z); 
  
        merge(arr, a, m, z); 
    } 
} 
  
void printArray(int A[], int size) 
{ 
    int i; 
    for (i=0; i < size; i++) 
    cout << A[i] << " "; 
    cout << endl;
} 
  
int main() 
{ 
    int arr[] = {12, 11, 13, 5, 6, 7}; 
    int arr_size = sizeof(arr)/sizeof(arr[0]); 
  
    cout << "\nSebelum sorting\n";
    printArray(arr, arr_size); 
  
    mergeSort(arr, 0, arr_size - 1); 
  
    cout << "\nSorted array is \n";
    printArray(arr, arr_size); 
    return 0; 
} 

Output dari program diatas


Sebelum sorting
12 11 13 5 6 7

Sorted array is
5 6 7 11 12 13


Setelah anda mempelajari ini, diharapkan anda paham dengan cara kerja dari algoritma diatas. Karena saya percaya orang yang paham dapat membuatnya sendiri meskipun dengan cara yang sedikit berbeda tetapi memiliki hasil dan kompleksitas yang sama. 

Monday, July 29, 2019

Penjelasan lengkap insertion sort C++

Insertion sort adalah salah satu algoritma mengurutkan bilangan yang hampir sama dengan cara kita mengurutkan kartu saat bermain kartu di tangan kita. Insertion sort memiliki kompleksitas O(n2)  sama seperti algoritma pengurutan bubble sort dan selection sort.

Saat bermain kartu kita biasanya memindahkan kartu agar terurut dari yang paling lemah hingga paling kuat. Saat terdapat kartu yang lebih lemah kita menyisipkannya di bagian paling kiri, namun ketika terdapat kartu yang lebih kuat, kita menyisipkannya di bagian kanan. Dengan melakukannya sebanyak n kali, kita memperoleh kartu yang terurut sempurna.

Untuk anda yang masih bingung apa yang dilakukana dalam insertion sort baca deskripsi berikut ini:


  1. Lihat kartu bagian kiri,
  2. Bandingkan kartu dengan kartu sebelumnya bagian kiri,
  3. Apabila sampai dengan kartu lebih keci, sisipkan kartu disebelah kiri kartu pembanding,
  4. Ulangi sampai kartu terurut sempurna.



Best case dari insertion sort apabila kartu telah terurut sempurna. Pikirkan saat anda mendapat kartu yang sudah terurut, anda tidak perlu mengurutkan kembali bukan. Karena itu kartu yang sudah terurut adalah best case dari insertion sort.

Worst case dari insertion sort apabila kartu terurut terbalik. Kompleksitas dari sorting dengan kasus seperti ini akan mendekati n2 . Jika kita bayangkan kartu ditangan dengan urutan terbalik, kita dengan mudah untuk mengurutkan dengan membalikkannya. Namun tidak dengan insertion sort. Akan terjadi banyak sekali pertuaran dengan kartu lainnya.

Menukar nilai dua variabel


Setelah mengerti bagaimana insertion sort bekerja, kita harus menukar letak array. Bagaimana cara melakukannya? Perhatikan potongan program dibawah ini!

temp = bil[i];
bil[i] = bil[0];
bil[0] = temp;

Misalkan i adalah index dengan nilai yang telah dibandingkan, temp adalah variabel yang digunakan untuk menyimpan sementara nilai dari bilangan paling kecil / minimum. Dengan menyimpan sementara variabel yang digunakan untuk menukar nilai kita dapat menukarkannya layaknya menukar wadah segelas kopi dengan segelas susu.

Dengan deskripsi dan cara menukar nilai diatas seharusnya. Silakan mencoba membuat insertion sort dari deskripsi diatas. Jika ada kesulitan berikut ini source code insertion sort bahasa C++.

Source code insertion sort C++


Berikut ini adalah kode program dari insertion sort.

#include <iostream>
using namespace std;

int main() {
int bil[] = {98, 21, 43, 34, 23, 65, 86, 21, 43, 1};
int n = sizeof bil / sizeof(int);
int temp;
int j;
for(int i = 1; i < n; i++){
temp = bil[i];
j = i - 1;
while(j >= 0 && bil[j] > temp){
bil[j+1] = bil[j];
j = j - 1;
}
bil[j+1] = temp;
}
for(int i = 0; i < n; i++)
cout << bil[i] << " ";
}

 Kode program diatas menggunakan while karena kita menginginkan berhenti disaat yang belum kita ketahui, dalam artian jika salah satu kondisi diatas program akan berhenti melakukan looping.

Insertion sort jarang digunakan karena kompleksitasnya yang n2 . Program biasanya dibuat dari  sorting yang lebih cepat dengan kompleksitas yang lebih rendah. Algoritma sorting yang memiliki kompleksitas yang sama dengan insertion sort seperti bubble sort dan selection sort. Sementara itu algoritma sorting yang memiliki kompleksitas lebih rendah yakni O(n log n) ada algoritma merge sort, quick sort dan heap sort.

Baca juga : Penjelasan lengkap bubble sort

Baca juga : Penjelasan lengkap selection sort

Algoritma insertion sort akan melakukan n kali perbandingan jika bilangan sudah terurut. 

Monday, July 22, 2019

Penjelasan lengkap Bubble Sort

Pernahkah anda mengurutkan bilangan acak? Bagaimana cara yang anda gunakan untuk mengurutkan bilangan acak tersebut? Jika anda membandingkan dua bilangan dan menukarkan bagian kiri dengan bilangan yang lebih kecil, anda tanpa sadar sudah melakukan algoritma yang biasa disebut dengan bubble sort.

Bubble sort adalah algoritma / cara mengurutkan bilangan acak menjadi bilangan yang terurut dengan membandingkan kedua bilangan bersebelahan. Dengan cara membandingkan kedua bilangan bersebelahan sebanyak n2 anda akan mendapatkan bilangan yang terurut.

Algoritma bubble sort memiliki kompleksitas O(n2) sama seperti dengan algoritma sorting selection sort dan insertion sort. Namun worst case atau kejadian terburuknya jika selalu menukarkannya. Sedangkan best case atau kejadian terbaiknya jika sudah terurut. Bilangan yang sudah terurut akan memiliki kompleksitas n.

Baca juga : Penjelasan lengkap Selection Sort

Algoritma Bubble Sort


Untuk lebih paham dan mengerti mengenai cara kerja bubble sort lakukan langkah-langkah pengurutan sebagai berikut:

  1. Bandingkan dua bilangan dari kiri,
  2. Jika bilangan kedua lebih besar dari bilangan pertama, tukar posisi kedua bilangan tersbut,
  3. Jika tidak lebih besar dari bilangan kedua, lakukan langkah 1 kembali sampai bilangan menjadi terurut.

Contoh dari sorting bubble sort lihat gambar diatas. Menurut saya bubble sort lebih baik dari selection sort karena data yang sudah terurut hanya melakukan perbendingan sebanyak n kali. Sedangkan algoritma selection sort tetap melakukan perbandingan sebanyak n2 .

Cara menukar nilai dua variabel


Untuk memahami bagaimana bubble sort bekerja, terlebih dahulu anda harus bisa melakukan penukaran dua variabel yang berbeda. Cara yang digunakan untuk melakukan penukaran sama dengan cara yang digunakan jika kita menggunakan variabel biasa. Lihatlah cara menukar kedua nilai dibawah ini.

temp = bil[i];
bil[i] = bil[j];
bil[j] = temp;

Dengan menggunakan variabel temp sebagai variabel sementara untuk menyimpan nilai, kita dapat dengan mudah melakukan penukaran menjadi bilangan yang kita inginkan.

Sebenarnya terdapat cara lain untuk menukarkan variabel, cara yang lain ini menggunakan konsep matematika penjumlahan dan pengurangan. Cara menukarkan dua variabel yang biasa digunakan adalah cara seperti diatas dengan menggunakan variabel temp sebagai variabel sementara.

Source code bubble sort bahasa C++


Sebelum melihat source code dibawah ini, ada baiknya anda mencoba membuatnya sendiri terlebih dahulu. Kita tidak akan pernah bisa jika kita enggan untuk mencoba dan melakukan kesalahan. Kesalahan dalam membuat program pasti sering dialami programmer, sekalipun itu programmer yang sudah pro.

#include <iostream>
using namespace std;

int main() {
int bil[] = {98, 21, 43, 34, 23, 65, 86, 21, 43, 1};
int n = sizeof bil / sizeof(int);
int temp;
for(int i = 0; i < n; i++){
for(int j = 0; j < n-1; j++){
if(bil[j] > bil[j+1]){
temp = bil[j];
bil[j] = bil[j+1];
bil[j+1] = temp;
}
}
}
for(int i = 0; i < n; i++)
cout << bil[i] << " ";
}

 Program diatas adalah program yang biasa digunakan dalam pembelajaran sorting. Untuk membuat aplikasi web, aplikasi PC, dan aplikasi mobile algoritma bubble sort jarang digunakan karena kompleksitas algoritma tersebut adalah n2 .

Algoritma yang biasa digunakan untuk membuat program adalah algoritma yang memiliki kompleksitas O(n log(n)), seperti algoritma merge sort, quick sort, heap sort dan lain sebagainya.

Bubble sort diatas bisa disempurnakan apabila sudah terurut dapat berhenti. Silakan untuk mencoba membuatnya.


Itulah algoritma untuk melakukan sorting menggunakan algoritma bubble sort. Apabila ada kesalahan silakan tinggalkan komentar dibawah ini atau dengan kontak saya melalui email yang terdapat pada halaman about.

Sunday, July 21, 2019

Penjelasan lengkap selection sort

Selection sort adalah algoritma yang digunakan untuk mengurutkan data yang belum terurut. Selain selection sort terdapat algoritma pengurutan yang lain seperti merge sort, quick sort, bubble sort, insertion sort dan masih banyak lainnya.

Algoritma berasal dari pemikiran atau kejadian yang akan dilakukan manusia jika menemukan permasalahan. Misalnya anda dihadapkan sepuluh bola yang memiliki angka yang berbeda. Anda diminta untuk mengurutkan bola dari angka yang terkecil sampai terbesar. Bagaimana anda melakukannya?

Untuk mengurutkan bola tersebut anda melakukan hal sebagai berikut:


  1. Mencari bola yang memiliki nomor paling kecil,
  2. Menukar letak bola pertama dengan bola yang memiliki angka paling kecil,
  3. Lakukan langkah pertama sampai bola terurut tanpa melihat bola yang sudah diurutkan.

Setiap orang pasti memiliki cara yang berbeda untuk mengurutkan angka. Cara diatas disebut dengan cara selection sort. Dari algoritma deskripsi diatas dapat ditarik kembali masalah yang lebih spesifik lagi seperti bagaimana cara mencari bola dengan nomor paling kecil? Bagaimana cara menukar bola letak posisi bola?

Mencari nilai terkecil dalam array


Sebelum mempelajari selection sort perlu diketahui cara mencari bola dengan nomor paling kecil. Perhatikan potongan program dibawah ini

int bil[] = {90, 28, 17, 27, 26, 18, 28, 38, 27, 28};
int n = sizeof bil / sizeof(int);
int min = bil[0];
for(int i = 1; i < n; i++){
if(bil[i] < min)
min = bil[i];
}

Misalnya bil merupakan array dari bilangan yang akan diurutkan, n menyatakan panjang array, dan min menyatakan bilangan sementara yang diambil terlebih dahulu dengan asumsi bil ke 0 adalah bilangan terkecil.

Baca Juga : Perulangan atau Looping Bahasa C++
Baca Juga : Penggunaan Array C++

Setelah mengasumsikan min adalah bilangan terkecil, kita membandingkan bilangan dalam variabel bil ke 1, 2, 3, 4 .. dst. sampai akhir dari array. Untuk memudahkan kita gunakan perulangan sehingga kita tidak perlu menulis program yang panjang.

Sebagai tambahan informasi 'sizeof' digunakan untuk menghitung bit array yang dibutuhkan. Integer menyimpan bit memori 4 bit setiap variabel. Dalam kasus diatas terdapat 10 bilangan integer, maka dibutuhkan 40 bit dalam variabel array bil. 40 bit dibagi dengan 4 bit pada memori. Dengan menggunakan cara ini kita dapat menentukan panjang array dengan penghitungan bit sepeti diatas.

Menukar nilai dua variabel


Setelah mengerti cara mencari nilai terkecil dalam array, kita harus menukar letak array. Bagaimana cara melakukannya? Perhatikan potongan program dibawah ini!

temp = bil[minIn];
bil[minIn] = bil[0];
bil[0] = temp;

Misalkan minIn adalah index dengan nilai yang paling kecil / minimum, temp adalah variabel yang digunakan untuk menyimpan sementara nilai dari bilangan paling kecil / minimum. Dengan menyimpan sementara variabel yang digunakan untuk menukar nilai kita dapat menukarkannya layaknya menukar wadah segelas kopi dengan segelas susu.

Setelah memahami cara mencari bilangan paling kecil . minimum dan cara menukar nilai dua variabel dengan kedua cara ini kita bisa membuat algoritma untuk mengurutkan bilangan. Sebelum membaca kelanjutan dari artikel ini, pembaca diharapkan mencoba membuatnya.

Selection sort


Selection sort memiliki kompleksitas O(n2). Apa itu kompleksitas? Kompleksitas adalah indikator berapa kali komputer bekerja untuk menyelesaikan suatu masalah. Kompleksitas diukur dari kejadian teburuk / worst case dari algoritma. Selection sort selalu menari satu persatu sampai akhir, oleh karena itu semua nilai selalu menjadi worst case.

Perhatikan dan pahamilah source code selection sort berikut ini!

#include <iostream>
using namespace std;

int main() {
int bil[] = {90, 28, 17, 27, 26, 18, 28, 38, 27, 28};
int n = sizeof bil / sizeof(int);
for(int i = 0; i < n; i++){
int min = bil[i];
int index = i;
for(int j = i; j < n; j++)
if(bil[j] < min){
min = bil[j];
index = j;
}
int temp = bil[index];
bil[index] = bil[i];
bil[i] = temp;
}

for(int i = 0; i < n; i++)
cout << bil[i] << " ";
}

Output atau keluarannya adalah sebagai berikut.

17 18 26 27 27 28 28 28 38 90

Selection sort menggunakan bilangan terkecil dan menaruhnya pada index pertama. Cobalah membuat selection sort dengan menggunakan bilangan terbesar. 

Penggunaan pointer C++

Pernahkah anda mendengar linked list? Linked list bekerja menggunakan pointer yang dihubungkan dengan address atau alamat memori lainnya sehingga membentuk rantai variabel yang digunakan sebagai array yang memiliki sifat dinamis.

Selain vaiabel yang hanya menyimpan nilai, C++ juga memiliki variabel yang menyimpan alamat variabel lain. Variabel yang menyimpan alamat dari variabel lain ini biasa disebut dengan pointer.

Pointer ada di seluruh tipe data seperti tipe data int, float, char, double dan sebagainya. Pointer juga dapat menunjuk class, struct, dan variabel bentukan lainnya.

Dengan menggunakan pointer dapat meningkatkan kinerja operasi yng dilakukan secara berulang. Penggunaan pointer di gunakan untuk mengalokasikan tempat pada memori secara dinamis yang dapat diubah-ubah alokasi tempatnya pada memori.

Pointer juga berguna sebagai parameter fungsi yang artinya nilai dapat diubah di dalam fungsi. Variabel pointer adalah variabel yang dapat diubah alamatnya (variabel dinamis).

Pada bahasa tingkat tinggi lainnya seperti java sudah tidak memiliki variabel pointer. Jadi bagaimana java menangani program yang membutuhkan pointer? Java menggunakan fungsi pass by reference yang penggunaanya hampir sama dengan pointer.

Apa itu pointer ?


Pointer adalah tipe data yang di dalamnya menyimpan address atau alamat dari variabel lain. Namun apa yang terjadi jika kita mengoperasikan pointer dengan penjumlahan, pengurangan, pembagian atau perkalian?

Untuk menjawab pertanyaan diatas lebih mudah dimengerti jika kita langsung mencobanya dalam bahasa pemrograman.

Cara menggunakan pointer


Pada bahasa C penggunaan pointer hanya dengan cara menambahkan tanda bintang /'*' sebelum nama variabel dibuat. Untuk mendapatkan alamat dari variabel yang diinginkan hanya dengan menambahkan tanda dan /'&' sebelum variabel. Untuk lebih jelasnya lihat potongan program berikut ini:

#include <iostream>

int main() {
int a = 10;
int *b;
b = &a;
std::cout << "value a : " << a << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;
std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl;
}

Sebelum melihat hasilnya, coba tebak hasil yang didapatkan dari program diatas.


Seperti yang sudah dijelaskan sebelumnya pointer menyimpan alamat jadi jika kita print hasil b (tanpa & dan *) maka akan menunjukan alamat dari a. Sedangkan jika kita ingin mengetahui alamat dari b dengan cara menambahkan tanda '&' sebelum variabel di print.

Uniknya untuk variabel array, dengan menambahkan pointer dapat berpindah ke array setelahnya. Lihat contoh:

#include <iostream>
int main() {
int a[] = {1,2,3,4,5} ;
int *b;

b = a;

std::cout << "value a : " << a[0] << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;

std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;

b = b + 1;
std::cout << "value a : " << a[1] << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;

std::cout << "alamat a : " << &a[1] << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;

}



Kenapa bisa begitu? Penjelasannya sederhana. Pada array data tersimpan secara berurutan.

Kenapa alamat kedua memiliki selisih 4? Jika anda pernah melihat bit penyimpanan pada setiap variabel, anda pasti tahu berapa bit yang digunakan dalam tipe data integer. Integer membutuhkan 32 bit atau 4 byte dalam memori. Sehingga selisih variabel sesudah dan sebelum adalah 4 byte (alamat memori menunjukkan byte).

Operasi pointer


Seperti yang telah kita ketahui pointer menyimpan alamat memori, jadi untuk mengakses value dari alamat memori yang disimpan pointer dengan menggunakan tanda bintang / '*'. Perhatikan contoh dibawah ini :

#include <iostream>
int main() {
int a = 10;
int *b;

b = &a;

std::cout << "value a : " << a << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;

std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;

*b = *b * 10;
std::cout << "value a : " << a << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;

std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;

}

Cobalah menebak hasil dari value a? Karena pointer menyimpan alamat dari a, maka saat kita mengubah nilai dari *b (dengan bintang), variabel a juga akan mengikuti perubahan yang terjadi di b.


Pada pembahasan mengenai fungsi dan sub fungsi sebelumnya sudah dijelaskan mengenai pass by reference yang konsepnya menggunakan pointer. Pada pass by reference parameter yang digunakan sebagai pemanggil juga terganti karena alamat parameter yang digunakan.

Baca Juga : Penggunaan Sub Program dan Fungsi

Untuk mengukur pemahaman silakan coba jawab pertanyaan berikut ini.

#include <iostream>
int main() {
int a = 10;
int *b;

b = &a;

std::cout << "value a : " << *(&a)+(*b*10) << std::endl;

}

Sekian pembahasan mengenai pointer dalam bahasa C++ berikut ini. Terima kasih. 

Tuesday, July 9, 2019

Sub program dan Fungsi C++

Saat membuat sebuah program kita pasti memulai pada bagian main. Sebenarnya apakah main ini? Seperti yang sudah kita ketahui, C++ merupakan bahasa yang bersifat modular. Bahasa yang bersifat modular di dalamnya berisi fungsi-fungsi.

Tuesday, July 17, 2018

Perulangan atau Looping For C++

Selamat malam pembaca, kali ini materi lanjutan dari pembahasan kita mengenai C++. Materi ini sangat dibutuhkan jika kita ingin membuat program yang berulang. Kita tidak perlu menulisnya berulang ulang, namun kita cukup menuliskannya sekali. Yap bagian ini adalah salah satu kelebihan mesin yaitu melakukan hal yang sama berulang kali tanpa bisa mengeluh.

Thursday, July 12, 2018

Penggunaan Array C++

Malam hari yang dingin ini, saya akan membagikann artikel mengenai Array yang ada dalam Bahasa C++. Array yang akan dibahas ini adalah semua array yang ada dalam bahasa C++. Artikel ini akan dibuat singkat tanpa menghilangkan inti dari pembelajaran array yang meliputi array 1 dimensi dan array multidimensi.

Monday, July 9, 2018

Percabangan Switch Case C++

Pada Kesempatan kali ini kita akan membahas percabangan yang cukup berbeda dengan struktur yang telah bahas kemarin. Walau begitu Switch Case tetap mempunyai fungsi yang sama digunakan untuk percabangan pada bahasa Pemrograman C++. Untuk lebih jelasnya mengenai materi percabangan Switch Case di Bahasa Pemrograman C++, dapat kalian pelajari di blog ini. Simak lebih lanjut.

Sunday, July 8, 2018

Percabangan IF Lebih dari Dua Kondisi

Tengah malam yang hening dan dingin ini, saya akan memberikan pembahasan mengenai percabangan IF lebih dari dua kondisi. Hampir sama tapi sedikit beda. Tidak ada beda nanti sama. HEHEHHE. Pernyataan IF 3 atau lebih kondisi dalam percabangan Bahasa C++, dalam pemakaiannya kita hanya menggunakan IF, ELSE IF, dan ELSE. Agar kalian lebih jelas mengenai materi ini mari kita simak tulisan saya ini yang mungkin bisa membuat kalian mengerti.

Friday, July 6, 2018

Percabangan IF Dua Kondisi C++

Pernyataan IF Dua Kondisi Percabangan Bahasa C++Setelah kemarin kita telah belajar mengenai pernyataan IF menggunakan satu kondisi, sekarang kita akan belajar mengenai Percabangan IF dua kondisi.  Hampir sama tapi sedikit beda. Tidak ada beda nanti sama. HEHEHHE. Pernyataan IF dua kondisi dalam percabangan Bahasa C++, dalam pemakaiannya kita hanya menggunakan IF dan Else. Agar kalian lebih jelas mengenai materi ini mari kita simak tulisan saya ini.


Pengertian Percabangan

Agar selalu ingat mengenai percabangan, Maka dari itu saya awali dengan mengetahui Apa Itu Percabangan ? Percabangan adalah suatu kondisi dimana sebuah program memberikan pilihan pemrosesan yang keduanya diproses atau diabaikan. Saya kasih contoh untuk menjabarkan pengertian tersebut. Contoh Kasus.

Jika Kamu belajar maka kamu bisa mengerjakan, sedangkan jika kamu tidak belajar kamu tidak akan bisa mengerjakan

Maksud dari kalimat kasus tersebut. Kamu memilih belajar maka prosesnya kamu akan bisa mengerjakan setiap soal. Tapi jika kamu memilih tidak belajar maka kamu kesulitan untuk mengerjakan soal tersebut.

Jadi intinya percabangan merupakan pemilihan yang digunakan untuk memproses program selanjutnya.

Tapi pada kali ini kita hanya akan membahas mengenai Pernyataan IF Dua Kondisi. Seperti ini diagram alisrnya.
Pernyataan IF Dua Kondisi Percabangan Bahasa C++
Diagram Alir Pernyataan IF Dua Kondisi


Pembahasan Pernyataan IF Dua Kondisi

pernyataan IF kali ini sedikit sama, dan ada perbedaan, perbedaanya menggunakan 2 pemilihan proses menggunakan IF dan Else, Dalam pernyataan ini terdapat pernyataan yang akan bernilai salah dan bernilai benar, dan dua kondisi tersebut dapat diberi pernyataan. Untuk lebih jelasnya mengenai cara penulisan Struktur IF Dua Kondisi bisa kalian liht dibawah ini.
if(kondisi){
statemen1_jika_nilai_terpenuhi;
}

else {
statemen2_jika_nilai_tidak_terpenuhi;
}
Nah itulah struktur penggunaan dalam Bahasa Pemrograman C++. Untuk lebih jelasnya saya juga telah membuatkan sebuah program yang mungkin berguna untuk pembelajaran kalian.
Sources Code :
#include <iostream>
using namespace std;

int main(){
int m, n, hasil;
cout << "Masukkan Nilai M : ";
cin>> m;
cout << "Masukkan Nilai N : ";
cin>> n;

if (m>n){
cout << "Angka M lebih Besar daripada N";
}
else {
cout << "Angkak N Lebih Besar daripada M";
}
cout << "\n";
hasil = m*n;
cout << "Hasil kali antara M dan N : " << hasil;

return 0;
}
Hasil Compile:
Pernyataan IF Dua Kondisi Percabangan Bahasa C++
Hasil Compile Program Diatas
Bisa dilihat codingan diatas, jika kita memasukkan m=6 dan n=3. cout yang ada di dalam "if" akan dieksekusi pada kondisi yang pertama, karena bernilai benar.

Sedangkan jika kita memasukkan angka m lebih kecil daripada n dengan contoh m=3 dan n=6. Maka akan bernilai salah dan akan dieksekusi di kondisi yang ke 2. lihat di bawah ini untuk memperjelas.


Itu saja yang dapat saya tulis disini mengenai pernyataan IF dua kondisi dalam percabangan bahasa C++. Semoga dengan artikel ini memberikan banyak manfaat untuk kalian para pembaca. Jika terdapat pertanyaan jangan ragu untuk bertanya, caranya tinggal nulis di kolom komentar atau mengissi contact form disitus kami. Sekian dan Terima Kasih telah berkunjung di situs kami.

Thursday, July 5, 2018

Percabangan IF Satu Kondisi C++

Pernyataan IF Satu Kondisi Percabangan Bahasa C++Tengah malam ini saya akan membagikan mengenai percabangan. Mungkin yang baru belajar pasti asing dengan kata tersebut maka dari itu disini saya akan jelaskan mengenai percabangan dengan menggunakan pernyataan IF.

Jenis Perintah Input atau Masukan C++

Pada kesempatan kali ini kita akan membahas materi mengenai macam macam masukkan input yang dapat digunakan dalam bahasa pemrograman C++. Untuk itu baca dengan seksama materi materi yang akan saya bahas.

Tuesday, July 3, 2018

Perintah Output atau Keluaran C++

Macam Macam Perintah Keluaran (Output) Bahasa C++
Pada kesempatan kali ini kita akan membahas mengenai perintah keluaran yang dapat digunakan dalam C++. Biasanya kita menggunakan perintah cout untuk perintah keluaran. sebenarnya ada beberapa perintah yang dapat digunakan untuk menampilkan keluaran. Di postingan kali ini saya akan membahas lebih jauh mengenai perintah keluaran tersebut. Simak lebih lanjut di situs kami.

Sunday, June 24, 2018

Perbedaan Variabel Lokal dengan Variabel Global C++

Kali ini admin akan membahas mengenai perbedaan variabel lokal dengan variabel global. Penggunaan kedua variabel ini berbeda. Namun ada kesamaan kedua varibel ini. Variabel ini sama sama dapat dirubah nilainya.
Dalam ruang lingkupnya, Variabel dapat kita bedakan menjadi 2 yakni Variabel Global dengan Variabel Lokal. Penentuan penulisan variabel lokal ataupun global tergantung dengan penentuan deklarasi variabel dalam sebuah program.

Variabel adalah suatu tempat yang digunakan untuk menyimpan atau menampung suatu data di dalam memori, dimana memori tersebut dapat menyimpan dan mengubah selama proses pembuatan program.

Maka dari itu dapat kita tahu fungsi suatu variabel yakni sebagai menyimpan suatu data di dalam memori, dan dapat diubah- ubah sesuai kebutuhan program. Selanjutnya mari kita mengenal variabel global dan variabel lokal.


Variabel Global

Variabel Global adalah variabel yang dibutuhkan dan dapat dikenal oleh semua lingkungan saat kita membuat program tersebut.

Setiap menuliskan kode program di dalam Bahasa Pemrograman C++ pasti kita menggunakan fungsi utama, di C++ nama fungsi utama yakni main(). Variabel Global disini merupakan fungsi di luar fungsi main(), jadi bukan di dalam fungsi main tersebut, tapi diluar fungsi main.

Dapat disimpulkan bahwa Variabel global adalah variabel yang dipakai atau dipanggil ataupun dikenali oleh seluruh program tak terkecuali fungsi main sendiri. Variabel Global ini mempunyai tujuan untuk menghemat dalam penulisan kode program. Karena cukup menuliskan variabel yang sama cukup satu kali. Untuk Lebih jelasnya mari lihat contoh diberikut ini.

Contoh Variabel Global
#include <iostream>
using namespace std;

int a;

void cinta(){
//Assign nilai ke dalam variabel a
a=100;
cout << "Nilai a Pada Fungsi Void : " << a <<endl;
}
int main (){
//mengisi nilai kedalam variabel a
a=10;
cout << "Nilai a Pada Fungsi Main : " << a <<endl;
cinta();
return 0;
}

Perbedaan Variabel Lokal dengan Global Bahasa C++
Perbedaan Variabel Lokal dengan Global Bahasa C++

Dari Program tersebut dapat kita lihat bahwa deklarasi variabel global tidak dilakukan dalam Fungsi Main / Fungsi Void.


Variabel Lokal

Variabel lokal adalah variabel yang hanya dimengerti oleh sebuah fungsi tertentu. Karena variabel lokal dilakukan dalam lingkup fungsi tertentu

Contoh Variabel Lokal
#include <iostream>
using namespace std;

void cinta(){
//Assign nilai ke dalam variabel a
int a;
a=100;
cout << "Nilai a Pada Fungsi Void : " << a <<endl;
}

int main (){
//mengisi nilai kedalam variabel la
//a=10; salah
// cout << "Nilai a Pada Fungsi Main : " << a <<endl;
int b;
b=99;
cout << "Nilai b Pada Fungsi Main : " << b <<endl;
cinta();
return 0;
}


Perbedaan Variabel Lokal dengan Global Bahasa C++
Perbedaan Variabel Lokal dengan Global Bahasa C++

Kita dapat lihat bahwa variabel diletakkan dalam fungsi main, dan void.


Perbedaan Variabel Lokal dan Variabel Global

  1. Variabel Global dideklarasikan di luar suatu fungsi, sedangkan variabel lokal dideklarasikkan dalam lingkup Fungsi
  2. Variabel Global dapat dikenali oleh seluruh fungsi, sedangkan variabel lokal hanya dikenali pada fungsi tertentu.
Pada kalimat diatas dapat kita lihat perbedaan antara variabel lokal dengan variabel global yang paling dapat kita lihat dan perlu kita ketahui.


Itulah penggunaan serta perbedaan variabel lokal dengan variabel global. Dalam membuat program kita akan sangat sering bertemu dengan kedua jenis variabel ini. Jadi kita harus mengetahui fungsi masing masing variabel ini agar dapat membuat kode program yang baik dan benar.

Saturday, June 23, 2018

Variabel Deklarasi Inisialisasi C++

Kali ini kita akan membahas mengenai Variabel dalam Bahasa Pemrograman C++. Variabel, deklarasi dan inisialisasi akan berhubungan dalam bahasa C. Kita akan sering menggunakan menggunakan ini dalam membuat program.