Sunday, September 11, 2016

Kegunaan Template Class dan Reference Parameter pada C++

https://massmada.blogspot.com/2016/09/template-const-reference-parameter-c.html
Sesuai judulnya, mungkin artikel ini akan menjadi jarang dicari oleh agan-agan semua. Yah artikel ini materi kelas menengah dari pemrograman C++. Sehingga hanya sedikit yang menggunakan template class.

Template dalam C ++ adalah kelas dan fungsi yang dapat beroperasi dengan tipe generik. Template class dapat digunakan untuk apa pun yang dapat dilakukan kelas reguler.

Sebenarnya template berfungsi untuk menyusuaikan tipe data yang belum jelas di deklarasikannya.




Contoh program nya seperti ini : 

#include <iostream>
using namespace std;

template<class T>
T abc(T a, T b, T c){
    return a+b+c;
}
main(){
    cout<<abc(1,2,9);
}


Pertama untuk menggunakan template harus menggunakan kode
template<class NamaVariabel>, jika tidak maka penggunaan template tidak dikenali dan menjadi error. Didalam contoh kode diatas aku memberikan T sebagai NamaVariabel class Template. 
Jika dalam function dan parameter functionnya, kita menggunakan void, int , float, double sebagai tipe data dari function tersebut. Sebagai contoh void abc(), void hitung() , int hitung(int a) , dsb . 
Sebenarnya pemakaian tipe data tersebut tidak praktis, karena hanya bisa digunakan sesuai tipe data tersebut, misalnya int hitung(int a) tidak akan bisa diisi parameternya dengan nilai bertipe data float.


Agar praktis maka kita gunakan template, supaya dapat diisi dengan nilai ber tipe data terserah kita.  Contoh programnya dapat dilihat diatas. Diprogram tersebut kita membuat function abc bertipe data T yaitu template. Di function tersebut jika kita memasukan nilai integer ataupun float akan dikenali secara otomatis tanpa adanya error.

T abc(T a, T b, T c){
    return a+b+c;
}


T adalah variabel nya, bila a bertipe data integer maka T adalah tipe data int dan untuk variabel b dan c menyesuaikan dengan tipe data a yang paling awal.Untuk memanggil fungsi T abc(T a, T b, T c) maka cukup panggil saja di main nya :
misalnya : abc(1,2,9);
 Nilai parameter pertama adalah 1, dimana 1 adalah termasuk integer, maka T adalah tipe data integer dan untuk T b dan T c adalah tipe data integer menyesuaikan tipe data yang paling awal dimasukkan tadi.


#Reference Parameter
Reference Parameter adalah  sebuah parameter pada suatu function yang mana parameter tersebut terhubung dengan alamat memori variabel yang dimasukkan pada parameter suatu pemanggilan function, sehingga jika kita mengubah nilai variabel sebenarnya melalui parameter tersebut maka nilainya akan berhasil diubah.

Sebagai contoh kita akan membuat suatu program untuk menukarkan nilai variabel a dan b.

#include <iostream>
using namespace std;

void tukar(int a, int b){
    int t = a;
    a = b;
    b = t;
}

main(){
    int a = 5, b =7;
    cout<<"Sebelum ditukar : a = 5 dan b = 7"<<endl;
    tukar(a, b);
    cout<<a<<" dan "<<b;
}

Tuliskan kode diatas dan run program. Maka akan didapatkan dari program tersebut nilai a tidak berhasil di tukar dengan nilai b. Itu mengapa ? karena kita belum menggunakan reference parameter sehingga kita belum mengganti nilai variabel sebenarnya dalam alamat memori variabel itu. Nah agar program itu berhasil, maka tambahkan tanda & pada parameter :

#include <iostream>
using namespace std;

void tukar(int& a, int& b){
    int t = a;
    a = b;
    b = t;
}

main(){
    int a = 5, b =7;
    cout<<"Sebelum ditukar : a = 5 dan b = 7"<<endl;
    tukar(a, b);
    cout<<a<<" dan "<<b;
}


Yap, dari program diatas maka nilainya berhasil ditukar.
Baca selengkapnya

Tuesday, August 23, 2016

Pembahasan Soal UN 2015 SMA IPA

https://massmada.blogspot.com/2016/08/matematika-un.html
Assalamualaikum, selamat datang di blog ku. Ini adalah posting pertamaku yang membahas soal un. Mungkin bahasanya terlalu kaku, tetapi maafkan yaa..hehe. Teman-teman untuk memperoleh nilai un bagus memanglah tidak mudah, perlu tekun belajar , berdoa, serta latihan soal un tahun sebelum-sebelumnya. Kali ini aku akan membagikan soal un 2015 beserta pembahasannya langsung saja :

1.Diketahui premis-premis berikut :
   premis 1 :   adinda tidak rajin belajar atau adinda lulus ujian
   premis 2 :   adinda tidak lulus ujian. 
   kesimpulan dari premis diatas adalah ...
   a. adinda rajin belajar
   b. adinda tidak rajin belajar dan adinda tidak lulus ujian
   c. adinda rajin belajar atau adinda tidak lulus ujian
   d. adinda rajin belajar dan adinda tidak lulus ujian 
   e. adinda tidak rajin belajar

  pembahasan no 1 :
  kita misalkan dulu :
  p : adinda rajin belajar
  q : adinda lulus ujian
  jadi, premis 1 : ~p v q
  premis 2 : ~q

  perlu anda ketahui sifat-sifat berikut :
  1. p → q =  ~q → ~p = ~p v q
  2. q → p = ~p → ~q
  jadi, untuk yang premis 1 dari 2 sifat di atas dapat diganti :
  premis 1 : p → q
  premis 2 : ~q

  untuk mencari kesimpulan diatas dapat dicari dengan modus tollens :
  premis 1 : p → q
  premis 2 : ~q
  maka kesimpulannya adalah ~p
  jawaban : e.
 
2.  Persamaan kuadrat x2 +3x -7 = 0 mempunyai akar-akar α dan β. Persamaan kuadrat yang akar-akarnya   (α+2) dan (β+2) adalah..
     a. x2 + √37x -9 = 0
     b. x2 + x +9 = 0
     c. x2 - x -9 = 0
     d. x2 - x +17 = 0
     e. x2 - x -17 = 0
pembahasan no 2 :
bentuk umum persamaan kuadrat adalah  ax2 + bx + c = 0, a ≠ 0
perlu anda ketahui jika x1 dan x2 akar-akar persamaan kuadrat maka :
x1 + x2 = -(b/a)
x1 . x2 = c/a
x1 - x2 = ( ± √D ) / a
penyelesaian persamaan kuadrat yang akar-akarnya (α+2) dan (β+2) :
itu berarti akar dari x = (α+2) atau x = (β+2)
(x - (α+2)).( x - (β+2)) = 0
x2 - (β+2)x - (α+2)x + (β+2)(α+2) = 0
x2 - ((β+2) - (α+2))x + (β+2)(α+2) = 0
x2 - (β - α)x + αβ  + 2α + 2β+4= 0
x2 + (α - β)x + αβ  + 2(α + β) +4= 0

dari yang telah kerjakan tadi, angka yang belum diketahui adalah (α - β) , αβ, dan (α + β).
untuk menjawab nilai yang belum diketahui diatas  :
a. bentuk  x1 + x2 = -(b/a) , yaitu :
    bisa kita misalkan untuk x1 adalah α dan x2 adalah β
    α + β =  - (3/1)
    α + β =  - 3
b. bentuk  x1 . x2 = (c/a) , yaitu :
    bisa kita misalkan untuk x1 adalah α dan x2 adalah β
    α . β = -7 / 1
    α . β = -7
c. bentuk  x1 - x2 = ( ± √D ) / a, yaitu :
    bisa kita misalkan untuk x1 adalah α dan x2 adalah β
    rumus dari D adalah b2-4ac, nilai dari a,b, dan c diperoleh dari persamaan x2 +3x -7 = 0
    maka, D =  32 - 4*1*(-7)
    D = 37
    maka 
    α - β =  (√37 ) / 1
    α - β =  √37 
maka setelah kita masukkan kepersamaan ini :
x2 + (α - β)x + αβ  + 2(α + β) +4= 0
menjadi
x2 + √37x + (-7)  + 2(- 3) +4= 0
berarti jawabannya adalah x2 + √37x - 9= 0

3. Persamaan kuadrat ax2-2ax+2a-3 = 0 mempunyai dua akar real. Batas nilai a yang memenuhi adalah..
    a. -3 ≤ a ≤ 0
    b. 0 ≤ a ≤ 3
    c. a ≤ -3   atau a ≥ 0
    d. a < -3 atau a > 0
    e. a  ≤ 0 atau a ≥ 3

pembahasan no3 :
mempunyai dua akar real berarti rumusnya  adalah D ≥ 0, dimana D = b2-4ac 
sedangkan bentuk umum persamaan kuadrat adalah  ax2 + bx + c = 0, a ≠ 0
itu berarti a = a,  b = -2a, dan c = 2a-3
untuk langkah selanjutnya tinggal memasukkan saja di rumus D ≥ 0. 
(-2a)2 - 4a (2a-3) ≥ 0
 4a2 -8a2 +12a ≥ 0
 -4a2 +12a ≥ 0
a(-4a + 12) ≥ 0 
bentuk di atas akan mempunyai 2 hasil yaitu a1 dan a2 :
- hasil a1 :
      a ≥ 0, ini karena a ≥ 0/(-4a + 12)
- hasil a2 :
     -4a+12   ≥ 0 / a
     -4a+12 ≥ 0 
     -4a ≥ -12 
     a    -12/-4 (tanda dibalik karena pembaginya adalah negatif yaitu -4)
     maka a    3
 jadi jawaban diatas adalah 0 ≤ a 3

4. Persamaan lingkaran yang berpusat di (1,4) dan menyinggung garis 3x-4y+3=0 adalah...
    a. x2 +y2- 2x -8y+13 = 0
    b. x2 +y2 +2x + 8y -13 = 0
    c. x2 +y2- 2x -8y+21= 0 
    d. x2 +y2 +2x + 8y-21 = 0 
    e. x2 +y2- 2x +8y-13 = 0 

Pembahasan no 4 : 
Rumus untuk mencari persamaan lingkaran diatas adalah :
(x - x1)2 +(y - y1)2=r2 
dari rumus diatas kita sudah mengetahui x1=1 dan y1=4 (diambil dari pusat). Maka langkah selanjutnya adalah mencari r karena r belum diketahui :

 
 

 

  




dari rumus r diatas, maka :






r = | (3-16+3) / 5 |
r = |-10 / 5 |
r = |-2|
r = 2
Setelah r ketemu maka bisa dimasukkan kerumusnya :
(x - 1)2 +(y - 4)2=22
(x - 1)(x-1)+(y - 4)(y - 4) = 4

(x2 - x -x +1` ) + (y2 - 4y -4y+16) = 4
x2 + y2 -2x - 8y +13= 0 (jawaban A)

5. Salah satu persamaan garis singgung pada lingkaran x2 + y2 + 10x - 8y - 8 = 0 yang tegak lurus garis x - 3y + 5 = 0 adalah ...
a. y= -3x -9 + 7√10
b. y= -3x -11 + 7√10
c. y= -3x -19 + 7√10  
d. 3y= x +17 + 7√10 
e. 3y= x-7 + 7√10 

Pembahasan no 5 :
Diketahui  lingkaran x2 + y2 + 10x - 8y - 8 = 0 maka :
rumus mencari pusat :









jari-jari :



sehingga persamaan lingkaran adalah  (x +5)2 +(y - 4)2= 49
Persamaan garis singgung nya tegak lurus dengan garis x - 3y + 5 = 0 atau bisa diubah y =(1/3)x+(5/3) [gradiennya (m1) = 1/3]
maka :
Gradien garis singgungnya = -1/m1
= (-1) / (1/3) = -3
Sehingga, persamaan garis singgung lingkaran (x +5)2 +(y - 4)2= 49 dengan gradien  -3 adalah





y - 4 = -3(x+5) ±  7 . √(10)
y - 4 = -3x - 15 ±  7 . √(10)
    y = -3x - 15 + 4 ±  7 . √(10.)
    y = -3x - 11 ±  7 . √(10.)
   ini terdapat dua kemungkinan :
    1. y = -3x - 11 7 . √(10)
    2. y = -3x - 11 7 . √(10) 
    maka sesuai jawabannya, jawabannya adalah b   

6. Bentuk sederhana dari :









  

Pembahasan soal no 6 :
Untuk mengerjakan soal diatas maka harus mengetahui sifat eksponen dulu :

Setelah memahami sifat diatas kita bisa langsung menjawabnya :
1. untuk menyelesaikan pertama menggunakan sifat no 6 :     
   2. kedua, menggunakan sifat nomor 4 :
       
  3. setelah menyelesaikan langkah kedua, maka menggunakan sifat ke 1, yaitu :
   
    maka hasilnya adalah



 
Baca selengkapnya

Friday, June 3, 2016

Program operasi bilangan komplek [C++]

program ini adalah program untuk menghitung bilangan kompleks, program ini saya buat waktu semester 2, nggak terasa sekarang udah semester 4…

program ini dibuat dengan bahasa pemrograman C++,kompilernya apa ya, lupa saya..hhahaha

bila anda memiliki adik yang pelajaran matematikanya ada bilangan kompleks, program ini mungkin dapat membantu, karena sangat praktis untuk menghitung bilangan kompleks, tapi jangan sampai membuat adiknya malas belajar ya…nanti nggak pinter-pinter..

kalau ingin menambah operasi tinggal edit saja kode di bawah ini…

silakan dipelajari…

/*

ALGORITMA PROGRAM :

   1. User memasukkan bilangan komplek yang akan dihitung.
   2. User memilih pilihan operasi.
   3. Bila user salah pencet maka akan ditampilkan pesan kesalahan.
   4. Bila tidak maka program akan menampilkan bilangan pertama lalu operator yang sesuai lalu
       bilangan kedua dan hasil perhitungannya.
   5. Bila user ingin mengulang maka pencet y bila tidak pencet t.
   6. Bila user salah pencet maka akan ditampilkan pesan kesalahan.

   7. Program selesai.

*/

#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int main()

{

struct{

int real;

int imajiner;

}bil1;

struct{

int real;

int imajiner;

}bil2;

struct{

int real;

int imajiner;

}hasil;

awal:

char pilihan;



cout<<"\t\t|     PROGRAM BILANGAN KOMPLEK    |\n";



cout<<"\t\t1.masukan bilangan pertama\n";

cout<<"\t\t  real     = ";

cin>>bil1.real;

cout<<"\t\t  imajiner = ";

cin>>bil1.imajiner;

cout<<"\t\t2.masukan bilangan kedua\n";

cout<<"\t\t  real     = ";

cin>>bil2.real;

cout<<"\t\t  imajiner = ";

cin>>bil2.imajiner;

cout<<"\n\t\tpilih operasi\n";

cout<<"\t\t1.penjumlahan\n";

cout<<"\t\t2.pengurangan\n";

cout<<"\t\t3.perkalian";

isi:

pilihan=getch();

if(pilihan=='1')

{

hasil.real=bil1.real+bil2.real;

hasil.imajiner=bil1.imajiner+bil2.imajiner;

}

else if(pilihan=='2')

{

hasil.real=bil1.real-bil2.real;

hasil.imajiner=bil1.imajiner-bil2.imajiner;

}

else if(pilihan=='3')

{

hasil.real=(bil1.real*bil2.real)+(-(bil1.imajiner*bil2.imajiner));

hasil.imajiner=(bil1.real*bil2.imajiner)+(bil1.imajiner*bil2.real);

}

else

{

cout<<"\n\t\tmasukan salah";

goto isi;

}

cout<<"\n\t\thasil perhitungan\n\n";

cout<<"\t\t("<<bil1.real;

if(bil1.imajiner>=0)

cout<<"+";

cout<<bil1.imajiner<<"i)";

if(pilihan=='1')

cout<<" + ";

else if(pilihan=='2')

cout<<" – ";

else

cout<<" * ";

cout<<"("<<bil2.real;

if(bil2.imajiner>=0)

cout<<"+";

cout<<bil2.imajiner<<"i) = ";

cout<<"("<<hasil.real;

if(hasil.imajiner>=0)

cout<<"+";

cout<<hasil.imajiner<<"i) "<<endl<<endl;

cout<<"\t\tulang program y/t :";

end:

pilihan=getch();

if(pilihan=='y')

{

system("cls");

goto awal;

}

else if(pilihan=='t')

return 0;

else

{

cout<<"\n\t\tmasukan salah";

goto end;

}

}

Hasil :




Baca selengkapnya

Monday, May 23, 2016

PERKALIAN MATRIK DENGAN VEKTOR C++

https://massmada.blogspot.com/2016/05/perkalian-matrik-dengan-vektor-c.html
Selamat malam, artikel ini akan  dibahas program perkalian matrik dengan vektor menggunakan C++, disini saya akan memberikan bukan hanya c++ nya saja, tetapi terdapat juga algoritma/flowchart, mengidentifikasi input/output, memahami masalah, test menggunakan data, implementasi menggunakan bahasa c++, debug(hasil eksekusi ) . Berikut :


Analisis kasus : 
Perkalian matrik berordo 2x3 dengan vektor nya :
  - Syarat dua matriks dapat dikalikan adalah ukuran kolom matriks pertama haruslah sama
dengan ukuran baris matriks kedua. Misalnya matiks A berukuran 2 x 3 dan matriks B berukuran 3 x 1 (vektor) dan akan menghasilkan matriks C berukuran 1 x 2. Untuk memperoleh elemen c[i,j] maka suku perkalian dari elemen a dengan baris i dan b dengan kolom j. Sedangkan kolom elemen a dan baris elemen b harus mempunyai perulangan tersendiri.

Menentukan input dan output :
m,n,p, matriks1, matriks2, baris, kolom, i, j, hasil : integer {input}
matriks1, matriks2, hasil : integer {output}

Membuat flowchart/Algoritma :

- Algoritma :

for i <-- 1 to baris do
    for j <-- 1 to kolom do
          mat_kali[i,j] <-- 0;
          for k <-- 1 to barkol do
                    mat_kali[i,j] <-- mat_kali[i,j] + matriks1[i,k] * matriks2[k,j]
         endfor
    endfor
endfor


- Raptor/flowchart : 

main
https://massmada.blogspot.com/2016/05/perkalian-matrik-dengan-vektor-c.html
baca_matriks



baca_matriks2
kali_matriks
cetak_matriks
TEST MENGGUNAKAN  DATA : 

Misalkan data  matriks ke-1 :

 Data[1,1] diisi 1
 Data[1,2] diisi 2
 Data[1,3] diisi 3
 Data[2,1] diisi 4
 Data[2,2] diisi 5
 Data[2,3] diisi 6

Maka akan tampil matrik seperti dibawah 

1 2 3
4 5 6 

Misalkan data matriks ke-2 :
Data[1,1] diisi 7
Data[2,1] diisi 8
Data[3,1] diisi 9

Maka akan tampil matriks ke-2 seperti dibawah :

7
8
9

dan akan mencetak dari hasil perkaliannya matriknya menjadi berordo 1x2 , yaitu :

50
122 


IMPLEMENTASI BAHASA C++ :

#include <iostream>
using namespace std;
void baca_matriks (int mat[10][10], int baris, int kolom){
    int i,j;
    for (i=0; i<baris; i++)
        for (j=0; j<kolom; j++){
            cout << "Data [" << i+1 << "," << j+1 << "] : ";
            cin >> mat[i][j];
        }
}

void kali_matriks(int matriks1[10][10], int matriks2[10][10], int baris, int kolom, int barkol, int mat_kali[10][10]){
    for (int i=0; i<baris; i++)
        for (int j=0; j<kolom; j++){
            mat_kali[i][j] = 0;
            for (int k=0; k<barkol; k++)
                mat_kali[i][j] = mat_kali[i][j] + matriks1[i][k] * matriks2[k][j];
        }
}

void cetak_matriks (int A[10][10], int baris, int kolom){
    for (int i=0; i<baris; i++){
        for (int j=0; j<kolom; j++)
            cout << A[i][j];
        cout << endl;
    }
}

main() {
    int m, n, p;
    int matriks1[10][10], matriks2[10][10];
    int hasil[10][10];
    m = 2;
    p=3;
    n=1;
   
    cout<<"Data matriks ke-1"<<endl;
    baca_matriks(matriks1,m,p);
    cetak_matriks(matriks1,m,p);
    cout<<"Data matriks ke-2"<<endl;
    baca_matriks(matriks2,p,n);
    cetak_matriks(matriks2,p,n);
    kali_matriks(matriks1,matriks2,m,n,p,hasil);
    cout<<"Hasil perkalian : "<<endl;
    cetak_matriks(hasil,m,n);
}

DEBUG(hasil eksekusi) :




dari kertas nya :


https://massmada.blogspot.com/2016/05/perkalian-matrik-dengan-vektor-c.html




 
Baca selengkapnya

Saturday, May 14, 2016

Mengurutkan Deret Bilangan Dengan Buble Sort Pemrograman C++

https://mada-education.blogspot.co.id/2016/05/c-mengurutkan-deret-bilangan-dengan.html
Analisa masalah :
Bubble Sort adalah salah satu algoritma untuk sorting data, atau kata lainnya mengurutkan data dari yang terbesar ke yang terkecil atau sebaliknya (Ascending atau Descending)

Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat.

           Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai pada pengurutan gelembung.

Algoritma bubble sort adalah salah satu algoritma pengurutan yang paling simple, baik dalam hal pengertian maupun penerapannya. Ide dari algoritma ini adalah mengulang proses pembandingan antara tiap-tiap elemen
array dan menukarnya apabila urutannya salah. Pembandingan elemen-elemen ini akan terus diulang hingga tidak perlu dilakukan penukaran lagi. Algoritma
ini termasuk dalam golongan algoritma comparison sort, karena menggunakan perbandingan dalam operasi antar elemennya. Berikut ini adalah gambaran dari algoritma bubble sort. Misalkan kita mempunyai sebuah array dengan.  Elemen-elemen “4 2 5 3 9”. Proses yang akan terjadi apabila digunakan algoritma bubblesort adalah sebagai berikut.

Pass pertama
(4 2 5 3 9) menjadi (2 4 5 3 9)
(2 4 5 3 9) menjadi (2 4 5 3 9)
(2 4 5 3 9) menjadi (2 4 3 5 9)
(2 4 3 5 9) menjadi (2 4 3 5 9)
Pass kedua
(2 4 3 5 9) menjadi (2 4 3 5 9)
(2 4 3 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
Pass ketiga
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)
(2 3 4 5 9) menjadi (2 3 4 5 9)

Dapat dilihat pada proses di atas, sebenarnya pada pass kedua, langkah kedua, array telah terurut. Namun algoritma tetap dilanjutkan hingga pass kedua berakhir. Pass ketiga dilakukan karena definisi terurut dalam algoritma bubblesort adalah tidak ada satupun penukaran pada suatu pass, sehingga pass ketiga dibutuhkan untuk memverifikasi keurutan array tersebut.

       Algoritma Bubble Sort

1.    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).
2.    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.
3.    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.
4.    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


 
#kodenya :

#include <iostream>
using namespace std;

// " dalam program ini ada 4 prosedur yg digunakan "//

//prosedur pertama ini digunakan untuk input data
//prosedur ini memiliki 2 parameter yaitu " int A[], int n "
//nilai untuk prameter untuk int n didapat dari inputan dalam fungsi main
//nilai untuk parameter int A[] didapat dari deklarasi dalam fungsi main
// parameter A[] sebagai varibale untuk menampung inputan dan n untuk bts perulngan
void baca_data(int A[], int n) {
int i;
for (i = 0; i < n; i++)
{ cout << "Data ke-" << i+1 << " : ";
cin >> A[i];
}
}

//prosedur kedua ini digunakan untuk menampilkan data yg telah di input tadi
//prosedur ini memiliki 2 parameter yaitu " int A[], int n "
//nilai untuk prameter untuk int n didapat dari inputan dalam fungsi main
//nilai untuk parameter int A[] didapat dari deklarasi dalam fungsi main
void cetak_data( int A[], int n) {
int i;
for (i = 0; i < n; i++)
cout << A[i] << " ";
cout << "\n";
}

//prosedur ketiga ini digunakan untuk penukaran nilai a <--> b
//prosedur ini memiliki 2 parameter int *a dan int *b
//nilai prameter  int *a dan int *b ini didapat ketika prosdur ini dipanggil
//--- ke prosedur empat
//parameter int *a dan int *b digunkan sebagai variable untuk terjadi tempt penukaran
void tukar (int *a, int *b)
{ int temp;
temp = *a;
*a = *b;
*b = temp;
}

//prosedur keempat ini merupakan proses untuk mengurutkan nilai / angka yg di inputkan
//prosedur ini memiliki 2 parameter yaitu " int x[], int n "
//nilai untuk prameter untuk int n didapat dari inputan dalam fungsi main
//nilai untuk parameter int x[] didapat dari deklarasi dalam fungsi main
//dalam prosedur ini dia memangil prosedur ketiga untuk mebntu proses pengurutn data secara buble sorting
void buble_sort (int x[], int n)
{ int i, j;
for (i = 0; i<n-1; i++)
for (j = i+1; j<n; j++)
if (x[i] > x[j])
tukar(&x[i], &x[j]);
}


 main() {
//  nilai variable " nilai[100], n " disni digunakan untuk mengisi nilai parameter dalm prosedur    
int nilai[100], n;
cout << "Banyak data : ";
cin >> n;
baca_data(nilai,n);    //  pemgilan prosedur
cout<<endl;
cout<<"data awal"<<endl;
cetak_data(nilai,n);   //  pemgilan prosedur
buble_sort(nilai,n);   //  pemgilan prosedur
cout<<"data stelah diurutkan"<<endl;
cetak_data(nilai,n);   //  pemgilan prosedur
}

raptor :  klik

Blog raka : programraka.blogspot.co.id/2016/05/c-mengurutkan-deret-bilangan-dengan.html?m=1

Blog jepri : myjeprianwar46.blogspot.co.id/2016/05/tugas-memuat-algoritma-teman.html?m=0
Baca selengkapnya

Metode Selection Sort Array Dengan C++

https://massmada.blogspot.com/2016/05/metode-selection-sort-array-dengan-c.html
Selamat datang.

Kali ini aku akan menjelaskan selection sort array menggunakan C++ . Selection sort array adalah jenis algoritma seleksi yang mengurutkan sebuah array berulang kali hingga menemukan elemen minimum (mempertimbangkan urutan menaik) dari bagian yang tidak disortir dan meletakkannya di awal.

Analisis selection sort : mengurutkan bilangan dari elemen array [2,7,4,9] menjadi [2,4,7,9] dengan tahapan yang lebih muda.



Baca Juga : Kegunaan Template Class dan Reference Parameter pada C++

Algoritma pengurutan dengan metode seleksi dapat diilustrasikan demikian. Misalkan
diberikan data awal :
[8, 4, 7, 3, 1, 2, 6, 5]
Data pertama adalah 8. Akan dicari (atau tepatnya “dipilih/diseleksi”) data terkecil dari data
kedua sampai terakhir yang terkecil untuk menempati posisi pertama (i = 1) ini. Data terkecil
ditemukan pada posisi ke-5 (t=5). Maka data pertama ditukar dengan data ke-5, menjadi :
[1, 4, 7, 3, 8, 2, 6, 5]
Langkah ini diulang untuk data kedua (i=2). Ditemukan data terkecil pada posisi ke-6 (t=6). Data
ke-2 ditukar dengan data ke-6, menjadi :
[1, 2, 7, 3, 8, 4, 6, 5]
Fase selengkapnya dapat dilihat pada data berikut ini.
Data awal : [8, 4, 7, 3, 1, 2, 6, 5] 1 terkecil, 8 -- 1
fase 1 [1, 4, 7, 3, 8, 2, 6, 5] 2 terkecil, 4 -- 2
fase 2 [1, 2, 7, 3, 8, 4, 6, 5] 3 terkecil, 7 -- 3
fase 3 [1, 2, 3, 7, 8, 4, 6, 5] 4 terkecil, 7 -- 4
fase 4 [1, 2, 3, 4, 8, 7, 6, 5] 5 terkecil, 8 -- 5
fase 5 [1, 2, 3, 4, 5, 7, 6, 8] 6 terkecil, 7 -- 6
fase 6 [1, 2, 3, 4, 5, 6, 7, 8] 7 terkecil, tetap
fase 7 [1, 2, 3, 4, 5, 6, 7, 8]
fase 8 [1, 2, 3, 4, 5, 6, 7, 8]

dibawah ini adalah program dan penjelasan dari selection sort array :

#include <iostream>

using namespace std;

void baca_data(int A[], int n){
    //fungsi ini untuk menginputkan data satu persatu sesuai batas yang ditentukan
     int i;
    for (i = 0; i < n; i++){
        //melakukan perulangan sesuai batas n
        cout << "Data ke-: "<<i+1<<"= ";
        cin >> A[i]; //menginputkan data dan disimpan di array A
    }

}

void cetak_data(const int A[], int n){   
    //menampilkan dari elemen array satu persatu   
    int i;

    for (i = 0; i < n; i++) cout << A[i];

    cout << "\n";

}

void tukar (int *a, int *b){
    int temp;
    temp = *a; //memberikan nilai pada variabel temp
    *a = *b; //mengeset variabel a sebagai nilai b
    *b = temp; //untuk mengisi variabel b dengan variabel temp
}

void minimum(int A[], int dari, int n, int * tempat){
    int i, min;
    min = A[dari];   
    *tempat = dari;

    for (i = dari+1; i<n; i++)
        if (A[i] < min){
            min = A[i];
            *tempat = i;
        }

}


void selection_sort(int A[], int n){
    int i, t;
    for (i = 0; i<n; i++){
        minimum(A, i, n, &t);

        tukar(&A[i], &A[t]);
    }
}

main() {
    int data[10], n;
   
    cout << "Banyak data : ";
   
    cin >> n;
   
    baca_data(data,n);
   
    cetak_data(data,n);
   
    selection_sort(data,n);
   
    cout<<endl;
   
    cout<<"setelah diurutkan"<<endl;
   
    cetak_data(data,n);
   
    return 0;
}


Penjelasan :
Parameter int A[] pada void baca_data(int A[], int n) berfungsi untuk memberikan parameter array.

void baca_data() berfungsi untuk menginputkan data satu persatu sesuai batas yang ditentukan.

void cetak_data() berfungsi untuk menampilkan dari elemen array satu persatu.

void tukar () berfungsi untuk menukarkan nilai dari 2 parameter yang dimasukkan.

void minimum() berfungsi untuk mencari nilai yang paling kecil dari array.

void selection_sort() berfungsi untuk melakukan selection sort pada array.



Hasil :
https://massmada.blogspot.com/2016/05/metode-selection-sort-array-dengan-c.html

raptor : klik

Terimakasih sudah berkunjung ke blogku :D
Baca selengkapnya
Metode insertion sort array dengan C++

Metode insertion sort array dengan C++

Selamat datang. Disini saya akan menjelaskan apa yang dimaksud insertion sort

Untuk menjelaskan algoritma pengurutan dengan metode penyisipan, bayangkan
setumpuk kartu ada di meja, dengan nomor :
[8, 4, 7, 3, 1, 2, 6, 5]
Pertama, kartu 8, diperoleh di tangan kiri :
[8]
Kedua, diambil kartu nomor 4, karena lebih kecil dari 8, ditaruh di sebelah kiri, sehingga
diperoleh :
[4, 8]
Ketiga, diambil kartu nomor 7, dibandingkan dengan kartu pertama, 7 lebih besar dari 4 dan
lebih kecil dari 8, sehingga 7 diletakkan di antara 4 dan 8 :
[4, 7, 8]
Mulai langkah ketiga ini, kita dapat menarik kesimpulan, bahwa “tempat yang tepat” berarti
“kartu yang saat ini diambil akan diletakkan berada di antara yang kecil dan yang besar dari
kartu yang diambil tersebut”.
Urutan selengkapnya adalah sebagai berikut :
Data awal : [8, 4, 7, 3, 1, 2, 6, 5]
fase 1, 4 masuk [4, 8, 7, 3, 1, 2, 6, 5]
fase 2, 7 masuk [4, 7, 8, 3, 1, 2, 6, 5]
fase 3, 3 masuk [3, 4, 7, 8, 1, 2, 6, 5]
fase 4, 1 masuk [1, 3, 4, 7, 8, 2, 6, 5]
fase 5, 2 masuk [1, 2, 3, 4, 7, 8, 6, 5]
fase 6, 6 masuk [1, 2, 3, 4, 6, 7, 8, 5]
fase 7, 5 masuk [1, 2, 3, 4, 5, 6, 7, 8]
fase 8 [1, 2, 3, 4, 5, 6, 7, 8]




Dibawah ini saya akan menjelaskan insertion sort :

#include <iostream>
#include <conio.h>
using namespace std;
class Sorting { //membuat class sorting
friend istream& operator>>(istream& in, Sorting& a);
friend ostream& operator<<(ostream& out, Sorting& a);
public:
 //mengeset fungsi kedalam method yang bersifat public
void baca_data(); //berfungsi untuk membaca data
void cetak_data(); //berfungsi untuk mencetak data
void buble_sort();
void insertion_sort();
void selection_sort();
private: //mengeset fungsi kedalam method yang bersifat private
void minimum(int , int, int&); //menulis fungsi untuk menentukan nilai minimum
void tukar (int&, int&); //menulis fungsi untuk menukar nilai dari 2 parameter
int data[10], n;
};
istream& operator>>(istream& in, Sorting& a) {
cout << "Banyak data : ";
in >> a.n;
for (int i = 0; i < a.n; i++) {
cout << "Data ke-" << i+1 << " : ";
in >> a.data[i];
}
return in;
}
ostream& operator<<(ostream& out, Sorting& a) {
for (int i = 0; i < a.n; i++)
out << a.data[i] << " ";
out << "\n";
return out;
}
void Sorting::tukar (int &a, int &b)
{ int temp; //membuat variabel sebagai tempat nilai pertukaran
temp = a; //menempatkan nilai a di variabel temp
a = b; //mengeset a = b
b = temp; //menukarkan b sebagai template
}
void Sorting::insertion_sort()
{
int i, j, temp; //membuat variabel
cout << "Data pertama sudah ada ditangan kiri, yaitu : " << data[0] << '\n';
for(j = 1; j < n; j++) //membuat perulangan dengan batas kurang dari n
{
temp = data[j]; //mengeset temp dengan nilai data[j] dimana j akan bertambah nilai nya
cout << "\nData ke-" << j+1 << " yaitu " << data[j] << " diambil dari meja\n";
cout << "Dilakukan penggeseran elemen :\n";
for(i = j - 1; (i >= 0) && (data[i] > temp); i--)
{
cout << "data pd posisi ke-[" << i+1 << "] digeser ke posisi [" << i+2 << "]\n";
data[i+1] = data[i];
}
cout << "Data baru masuk pada posisi ke-[" << i+2 << "]\n";
data[i+1] = temp; //Insert key into proper position
cout << "Data saat ini adalah : ";
for (int k=0; k<=j; k++) cout << data[k] << " ";
getch();
}
}
main(){
Sorting angka; //deklarasi class sorting
cin >> angka; //memasukkan nilai ke variabel angka
angka.insertion_sort(); //memanggil fungsi insertion sort
cout << "\nHasil akhir adalah : \n";
cout << angka; //hasil dari pengurutan akan ditampilkan menggunakan variabel angka
}

raptor : klik
Baca selengkapnya