Senin, 25 April 2011

struktur data | bab searching atau pencarian

BINARY SEARCH

Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data array sudah terurut. pengurutan Array bisa menggunakan jenis sorting descending atau asscending. Kelebihan dari Searching dengan metode Binary Sort adalah Untuk Pencarian data yang jumlahnya banyak, waktu pencarian relatif cepat. selain itu beban komputasi juga lebih kecil karena pencarian dilakukan dari depan, belakang, dan tengah. namun ada pula kekurangannya, yaitu data harus disorting dahulu dan Algoritma lebih rumit, tidak baik untuk data berangkai.

Algoritma dari Binary Sort

Proses yang terjadi pada pencarian dengan metode ini adalah sebagai berikut :
1. Membaca Array data
2. Apabila Array belum terurut maka array diurutkan terlebih dahulu.
3. Menentukan data yang akan dicari
4. Menentukan elemen tengah dari array
5. Jika nilai elemen tengah sama dengan data yang dicari, maka pencarian berhenti.
6. Jika elemen tengah tidak sama dengan data yang dicari maka :
      a. Jika nilai elemen tengah > data yang dicari maka pencarian dilakukan pada setengah array pertama.
      b. Jika nilai elemen tengah lebih kecil dari pada data yang dicari maka pencarian dilakukan pada setengah array berikutnya.










Misalkan saya mempunyai data sebagai berikut : 3,1,4,7,25,12,40,78,90,65. Maka data tersebut akan dicek, ternyata setelah dicek datanya belum terurut, maka dengan menggunakan metoda sorting yang sudah ada, maka kita bisa mengurut data tersebut, menjadi : 1,3,4,7,12,25,40,65,78,90
Setelah data tersebut diurutkan maka fungsi binary sort baru mulai bekerja mencari data. berikut cara dari Binary sort mencari data tersebut. misalnya data yang dicari adalah 65. maka pencariannya dijelaskan pada tabel berikut ini :











KETERANGAN :

Pada data range diberi warna Hijau. Pencarian dimulai dari tengah,Kiri dan kanan. rumus untuk Posisi tengahnya adalah ( Posisi Akhir + Posisi Awal )/2. jadi Nilai tengah pada langkah pertama yaitu adalah 12 (berwarna merah) dan nilai targetnya adalah 65 (kuning). Karena nilai data yang dicari > dari data yang ditengah, maka pencarian menjadi dikanan dari nilai tengah. Setelah itu, Maka nilai 12 menjadi awal pencarian, selanjutnya dicari kembali nilai tengah pada range nilai 12 ke kanan sampai pada array dengan nilai 90. ternyata nilai tengahnya adalah 40. kemudian array dari nilai 40 dibandingkan dengan target, ternyata lebih besar, maka pencarian kembali mengarah ke kanan nilai tengah. Array dengan nilai 40 menjadi titik awal pencarian sekarang. dan sekarang nilai tengah nya adalah 65. maka dibandingkan dengan target ternyata sama, maka data sudah Ditemukan.

contoh source code tentang  program  untuk mensimulasikan searching pada sebuah deretan angka menggunakan algoritma Binary Search


#include<stdio.h>

void main()
{
      int bil[50];
      int i, k, n, x,j,temp;k=0;
      printf("Masukkan banyaknya elemen yang diinginkan : ");
      scanf("%d", &n);
      for(i=1; i<=n; i++)
      {
            printf(" Masukkan bilangan ke %d : ", i);
            scanf("%d", &bil[i]);
      }
      printf("\nMasukkan nilai yang akan dicari : ");
      scanf("%d", &x);
      printf("\n");
      printf("\tPROSES SIMULASI\n\n");
      printf("bilangan sebelum di urutkan:\n");
      for(i=1;i<=n;i++)
            printf("%3d",bil[i]);
            printf("\n\n");
      for(i=0;i<=n;i++)
      {
            temp=bil[i];
            for(j=i-1;bil[j]>temp&&j>=1;j--)
            {
                  bil[j+1]=bil[j];
            }
      bil[j+1]=temp;
      }
printf("bil setelah diurutkan :\n");
for(i=1;i<=n;i++)
printf("%3d",bil[i]);
printf("\n\n");
      while ((k<n) && (bil[k]!= x-1))
      {
            printf("bilangan %d tidak sama\n",bil[k+1]);k++;
      }
      while ((k<n) && (bil[k]!= x))
      {
            k++;
      }
      if(bil[k] == x)
      {
            printf("bilangan %d sama\n",x);
            printf(" \nBilangan ditemukan , ");
      }
      else
      {
            printf(" Bilangan tidak ditemukan");
      }
      printf("\n\n");



semoga bermanfaat



Kamis, 14 April 2011

struktur data tentang sorting atau pengurutan

Metode seleksion sort (selection sort) melakukan pengurutan dengan cara mencari data yang terkecil kemudian menukarkannya dengan data yang digunakan sebagai acuan atau sering dinamakan pivot.
Proses pengurutan dengan metide selection dapat dijelaskan sebagai berikut: mula-mula dilakukan pengulangan dari 1  sampai dengan (N-1). Pada tiap-tiap pengulangan dicari data yang paling kecil diantara data yang ke(i+1) sampai dengan data terakhir (=N). data yang terkecil ini kemudian ditukarkan  dengan pivot, yaitu data ke i. tentu saja , apabila data terkecil tersebut lebih besar daripada data ke-I,proses penukaran tidak perlu dilakukan.

untuk lebih jelasnya perhatikan proses pengurutan dengan metode selection yang disajikan pada table di bawah
Proses pengurutan pada table diatas dijelaskan sebagai berikut :
• Pada saat i=1, data yang terkecil dari antara data ke-2 sampai dengan 9 adalah data ke-5,yaitu 3. Dengan demikian data ke-1,yaitu 12, ditukar dengan data ke-5 yaitu 3.
• Pada saat i=2, data yang terkecil dari antara data ke-3 sampai dengan 9 adalah data ke-3,yaitu 9. Dengan demikian data ke-2,yaitu 35, ditukar dengan data ke-3 yaitu 9.
• Pada saat i=3, data yang terkecil dari antara data ke-4 sampai dengan 9 adalah data ke-4,yaitu 11. Dengan demikian data ke-3,yaitu 35, ditukar dengan data ke-4 yaitu 11.
• Demikian seterusnya

Dari algoritma dan program diatas ,dapat disimpulkan bahwa jumlah pembandingan (=C) untuk metode seleksi adalah sebagai berikut:


Jumlah penukaran (=M) yang dilakukan untuk metode seleksi tergantung pada keadaan datanya. Jumlah penukaran minimum dan maksimum dapat dirumuskan sebagai berikut:
Jumlah penukaran minimum terjadi bila data sudah dalam keadaan terurut, sebaliknya jumlah penukaran maksimum terjadi bila  data dalam keadaan urut terbalik.


contoh source code tentang simulasi sorting dengan algoritma selection sort. Dengan banyaknya angka ditentukan oleh inputan user. Catatan: simulasi berarti menampilkan perubahan secara terurut secara tahap demi tahap





#include "stdio.h"


void tampil(int data[], int n)
{
      int i;
      for (i=0;i<n;i++)
      printf("%3d",data[i]);
      printf("\n\n");
}


void urutan(int data[], int n)
{
int akhir, awal, j, tmp;
printf("\n");
printf("    Proses Pengurutannya \n\n");
for(awal=0;awal<n-1;awal++)
    {
      akhir=awal;
      for (j=awal+1;j<n;j++)
       if(data[akhir]>data[j])
          akhir=j;

       
           tmp=data[awal];
         data[awal]=data[akhir];
         data[akhir]=tmp;

      printf(" ke %d =" ,awal+1);
      tampil(data,n);

   }
}

void main ()
{
      int data[50],n;
      printf(" PENGURUTAN DATA DENGAN SELECTION SORT \n\n");
      printf("      masukkan banyak data : ");
      scanf("%d",&n);
      for (int a=0;a<n;a++)
    {
            printf("masukkan data ke %d   = ",a+1);
            scanf("%d",&data[a]);
      }
      urutan(data,n);
      printf("\n\n  hasil pengurutan : \n\n");
      tampil(data,n);

}

semoga bermanfaat..

Jumat, 08 April 2011

struktur data tentang struct

Struct adalah tipe data turunan yang didalamnya terdapat beberapa data/variable yang mempunyai tipe data yang berbeda-beda.
Dengan struct, kita bisa mengelompokkan berbagai nama dan tipe variable tersebut sesuai dengan kelompoknya. Hal ini tentunya bisa berguna untuk memudahkan dalam mengelompokkan sebuah variable. Sebagai contoh umum, ada terdapat berbagai nama variable : nama, npm, alamat, dll. Variabel – variable tersebut dapat kita kelompokkan menjadi satu dengan namadata_mahasiswa. Kemudian jika terdapat variable mata_kuliah, nilai, sks, kelas, dll dapat kita kelompokkan menjadi satu dengan nama krs. Itulah sebagian gambaran umum tentang struct.
Menggunakan operator titik (.) untuk mengakses tiap elemennya.
Variable-variabel yang membentuk suatu struktur ini selanjutnya disebut dengan elemen-elemen atau anggota struktur.dalam sustu struktur dimungkinksn berisi dengan elemen-elemen data bertipe int, float, char, dll.
Dalampemrograman C++, jikakitamembuatsuatu program yang memerlukanberbagaitipe data yang akandigunakan. Tentunyadengannama variable yang banyak pula. Dalam program yang sederhana, jikakitamanggunakansedikit variable tentutidakjadimasalah. Akan tetapijikakitaakanmembuatsebuah program yang lebihkompleks, denganberbagaimacamnamadantipe variable dalampendeklarasianya. Denganstruct, kitabisamengelompokkanberbagainamadantipe variable tersebutsesuaidengankelompoknya. Hal initentunyabisabergunauntukmemudahkandalammengelompokkansebuah variable.
Suatu struktur dapat dideklarasikan dengan menggunakan kata kunci struct. Contoh:
 Struct merk 
{
               Char kode[5];
int harga[35];
            }persediaan_barang




contoh source code program tentang Klinik sehat mengnginkan pendaftaran pasiennya dilakukan oleh computer.
Tugas :
Buatlah program yang mempunyai menu untuk melakukan :
a. Penambahan record baru
b. Penghapusan record tertentu berdasarkan isi datanya(lakukan dulu sequensial search).
c. Merubah (update) record tertentu berdasarkan isi datanya.
d. Menampilkan data
        Tiap record berisi tanggal lahir, nama, usia, jenis kelamin,alamat ,telepon,dan pekerjaan.
        Gunakan tipe data STRUCT




#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"conio.h"

struct DATA
{
      char nomorpasien[10];
      char tgldaftar[8];
      char nama[50];
      char usia[5];
      char jenkel[5];
      char alamat[50];
      char telp[50];
      char pekerjaan[50];
};

DATA pasien[100];

source code lengkapnya bisa klik DISINI
semoga bermanfaat

Kamis, 31 Maret 2011

struktur data tentang array atau larik

Array adalah suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama yang sama dan menempati tempat di memori yang berurutan (kontigu) serta bertipe data sama pula. Array juga mempnyai pengertian sebuah elemen variable yang menyimpan sekumpulan data yang memiliki tipe yang sama. Setiap data yang memiliki tipe yang sama. Setiap data tersebut menempati lokasi atau alamat memori yang berbeda-beda dan selanjutnya disebut dengan elemen array. Elemen array itu kemudian dapat kita akses melalui indeks yang terdapat di dalamnya. Namun penting sekali untuk diperhatikan bahwa dalam C++, indeks array selalu dimulai dari 0 ,bukan dari 1.
Untuk mendeklarasikan sebuah array dalam C++,kita harus menggunakan tanda [   ] (bracket). Adapun bentuk umum dari pendeklarasiannya adalah sebagai berikut:
Tipe_data nama_array[jumlah_elemen]
sebagai contoh jika kita ingin mendeklarasikan sebuah array (  misalnya dengan nama LARIK) yang memilki 25 elemen dengan tipe data int, maka pendeklarasiannya adalah seperti  berikut: int LARIK[25]. Ruang memori yang dibutuhkan untk pendeklarasian array tersebut adalah 100 byte,yang berasal dari 25x4 byte(4 merupakan ukuran dari tipe data int ). Sedangkan cara yang digunkan untuk mengakses elemennya adalah dengn menuliskan indeksnya. Misalnya kita ingin mengambil nilai yang terdapat pada elemen ke 10 dan menampung nilai tersebut ke dalam sebuah variable yang bertipe int juga(missal X), maka kita harus menuliskan sintak X=LARIK[9]
Larik dapat diakses berdasarkan indeksnya. Indeks larik umumnya dimulai dari 0 dan ada pula yang dimulai dari angka bukan 0. Pengaksesan larik biasanya dibuat dengan menggunakan perulangan (looping).

Larik satu dimensi

Larik satu dimensi merupakan jenis larik dasar dan jenis larik yang paling sering digunakan, pemakaian larik satu dimensi terutama dipakai dalam tipe data string (terutama dalam bahasa Bahasa pemrograman C).
Larik dua dimensi
Larik/array dua dimensi merupakan tipe larik yang lain. Larik dua dimensi sering dipakai untuk merepresentasikan tabel dan matriks dalam pemrograman.

contoh source code  operasi penjumlahan untuk matrik 2X2 dengan menggunakan bahasa pemrograman c++



#include "iostream.h"

void main()
{

int X[2][2];int Y[2][2];int Z[2][2];
int i,j;

cout<<"masukkan bilangan untuk matrik A\n";
for(i=0;i<=1;i++)
{
     for(j=0;j<=1;j++)
     {
          cout<<"input A ("<<i<<","<<i<<") = ";
          cin>>X[i][j];
     }
}
cout<<"masukkan bilangan untuk matrik B\n";
for(i=0;i<=1;i++)
{
     for(j=0;j<=1;j++)
     {
          cout<<"input B ("<<i<<","<<i<<") = ";
          cin>>Y[i][j];
     }
}
cout<<"\nmatriks A adalah \n";
for(i=0;i<=1;i++)
{
     for(j=0;j<=1;j++)
     {
          cout<<X[i][j]<<"\t";
     }
     cout<<"\n";
}
cout<<"\nmatriks B adalah \n";
for(i=0;i<=1;i++)
{
     for(j=0;j<=1;j++)
     {
          cout<<Y[i][j]<<"\t";
     }
     cout<<"\n";
}
cout<<"penjumlahan matriks A dan B adalah \n";
for(i=0;i<=1;i++)
{
     for(j=0;j<=1;j++)
     {
         
          cout<<X[i][j]<<"+"<<Y[i][j]<<"\t";
     }
     cout<<"\n";
}

cout<<"hasilnya= \n";
for(i=0;i<=1;i++)
{
     for(j=0;j<=1;j++)
     {
         
          Z[i][j]=X[i][j]+Y[i][j];
          cout<<Z[i][j]<<"\t";
     }
     cout<<"\n";
}


}

semoga bermanfaat

Selasa, 29 Maret 2011

struktur data tentang fungsi rekursif

Pengertian rekursif

Rekursif berarti bahwa suatu proses bisa memanggil dirinya sendiri. Menurut definisi dalam Microsoft Bookshelf, Rekursif adalah kemampuan suatu rutin untuk memanggil dirinya sendiri. Dalam Rekursif sebenarnya terkandung pengertian prosedur dan fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur dan fungsi harus dipanggil lewat pemanggil prosedur dan fungsi. Satu atau lebih kondisi penghentian yang bias dievaluasi untuk parameter-parameter tertentu. Langkah rekursif dimana nilai sekarang dalam algoritma bisa didefinisikan dalam nilai sebelumnya. Langkah rekursif harus menuju ke kondisi penghentian Rekursif merupakan teknik pemrograman yang penting dan beberapa bahasa pemrograman mendukung keberadaan proses rekursif ini. Dalam prosedur dan fungsi, pemanggilan ke dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan akan berakhir. Secara umum penyelesaian secara rekursif digunakan jika penyelesaian sulit dilaksankan secara iterative, efisiensi dengan cara  rekursif sudah memadai, efisiensi bukan masalah dibandingkan  dengan kejelasan logika program

Meskipun penulisan program dengan cara rekursif bisa lebih pendek,namun Terdapat kekurangan dan kelebihan dalam fungsi rekursif ini. Berikut adalah penjelasan penjelasan mengenai kelebihan dan kekurangan dalam mengguankan fungsi rekursif:

Kelebihan perulangan rekursif:
v  Sangat mudah untuk melakukan perulangan dengan batasan yang luas dalam artian melakukan perulangan dalam skala yang besar.
v  Dapat melakukan perulangan dengan batasan fungsi.

Kekurangan perulangan rekursif:
v  Tidak bisa melakukan nested loop atau looping bersarang.
v  Biasanya membuat fungsi sulit untuk dipahami, hanya cocok untuk persoalan tertentu saja.
v  Trace error sulit.
v  Memerlukan stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack dan ada kalanya akan menyebabkan stack tak cukup lagi (Stack Overrun).
v  Proses agak berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk.
v  Pemborosan (Redundancy) dapat terjadi dalam
v  penyelesaian masalah secara rekursif

contoh source code tentang program untuk melakukan penjumlahan pada sebuah deret bilangan. Kemudian akan menampilkan hasil akhir berupa perkalian tiap bilangan hasil penjumlahan.

Contoh:

 Input: bil1 =3       hasil 1=1+2+3=6
 Input: bil 2=2       hasil 2=1+2=3
Output : hasil akhir =6*3=18 (muncul angka 18 di layar monitor)

#include "iostream.h"

int bil_satu(int a)
{
     if(a==0) return(0);
     return (a+bil_satu(a-1));
}

int bil_dua(int b)
{
     if(b==0) return(0);
     return (b+bil_dua(b-1));
}
main ()
{
     int j;
     int k;
     int hasil;


     cout<<"masukan angka pertama=";
     cin>>j;
    
     cout<<"hasil="<<bil_satu(j)<<endl;
    
    
    
     cout<<"masukan angka kedua=";
     cin>>k;

     cout<<"hasil="<<bil_dua(k)<<endl;
    

     hasil=(bil_satu(j)*bil_dua(k));

     cout<<"hasil dari "<<bil_satu(j)<<" x "<<bil_dua(k)<<" =             "<<hasil<<"";
     cout<<endl;
    
     return (1);    
    

}


semoga bermanfaat

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More