Rabu, 15 Januari 2014

algoritma pengulangan

Struktur pengulangan terdiri atas 2 bagian yaitu :
  1. kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk melaksanakan pengulangan. Kondisi ada yang dinyatakan secara explisit oleh pemrogram.
  2. badan (body) pengulangan, yaitu satu atau lebih aksi yang akan diulang
di dalam algoritma terdapat beberapa macam struktur pengulangan yang berbeda, beberapa struktur dapat dipakai untuk masalah yang sama, namun ada notasi pengulangan yang hanya cocok dipakai untuk masalah tertentu, struktur pengulangan tersebut adalah :

  1. Struktur WHILE-DO
Bentuk umum struktur WHILE-DO adalah
while <kondisi> do Aksi
endwhile
aksi (atau runtunan aksi) akan dilaksanakan berulangkali sepanjang <kondisi> boolean masih tetap bernilai true, jika <kondisi> bernilai false, badan pengulangan tidak akan dilaksanakan. Pengulangan selesai.
Contoh 1:
Tuliskan algoritma untuk mencetak banyak HALO sebanyak 10 kali .
Algoritma cetak_banyak_halo
Deklarasi
K : integer {pencacah pengulangan}
Deskripsi
K ← 1 {inisialisasi}
While k ≤ 10 do
Write (‘HALO’)
K ←K+1
Endwhile
{kondisi berhenti : k > 10}
Contoh 2 :
Tuliskan Algoritma untuk mencetak urutan angka 1 s/d 10
Algoritma cetak_angka
Deklarasi
Angka : integer
Deskripsi
Angka ← 1
While angka ≤ 10 do
Write (angka)
angka ← angka +1
Endwhile
  1. Struktur REPEAT-UNTIL
Bentuk umum struktur REPEAT-UNTIL adalah :
Repeat Aksi
Until <kondisi>
Struktur REPEAT-UNTIL memiliki makna yang sama dengan WHILE-DO namun ada perbedaan mendasar diantara keduanya. Pada struktur REPEAT-UNTIL aksi (atau sekumpulan aksi) dilaksanakan minimal satu kali, karena kondisi pengulangan diperiksa pada akhir struktur, sedangkan pada struktur WHILE-DO kondisi pengulangan diperiksa pada awal struktur sehingga memungkinkan pengulangan tidak pernah dilaksanakan bila kondisi pengulangan bernilai false
Ini adalah contoh pada contoh WHILE-DO
Contoh 1 :
Algoritma cetak_banyak_halo
Deklarasi
K : integer {pencacah pengulangan}
Deskripsi
K ← 1 {inisialisasi}
Repeat
Write (‘HALO’)
K ←K+1
Until k > 10
{kondisi berhenti : k > 10}
Contoh 2 :
Tuliskan Algoritma untuk mencetak urutan angka 1 s/d 10
Algoritma cetak_angka
Deklarasi
Angka : integer
Deskripsi
Angka ← 1
Repeat
Write (angka)
angka ← angka +1
until angka > 10
  1. Struktur FOR
Struktur FOR digunakan untuk menghasilkan pengulangan sejumlah kali tanpa penggunaan kondisi apapu, struktur ini menyebabkan aksi diulangi sejumlah kali (tertentu)
Bentuk umum struktur FOR ada 2 macam : menaik (ascending) dan menurun (descending)
FOR menaik :
For peubah ← nilai_awal to nilai_akhir do Aksi
Endfor
Keterangan :
    • peubah : haruslah bertipe sederhana
    • nilai_awal : haruslebih kecil atau sama dengan nilai_akhir
    • pada awalnya, peubah diinisialisasi dengan nilai_awal. Nilai peubah secara otomatis bertambah satru setiap kali aksi pengulangan dimasuki, sampai akhirnya nilai peubah sama dengan nilai_akhir
Ini adalah contoh pada contoh WHILE-DO
Contoh 1 :
Algoritma cetak_banyak_halo
Deklarasi
K : integer {pencacah pengulangan}
Deskripsi
For K ← 1 to 10 do
Write (‘HALO’)
Endfor
{kondisi berhenti : k > 10}
Contoh 2 :
Tuliskan Algoritma untuk mencetak urutan angka 1 s/d 10
Algoritma cetak_angka
Deklarasi
Angka : integer
Deskripsi
For angka ← 1 to 10 do
Write (angka)
Endfor
FOR menurun :
For peubah ← nilai_akhir downto nilai_awal do Aksi
Endfor
Keterangan :
    • peubah : haruslah bertipe sederhana
    • nilai_akhir : harus lebih besar atau sama dengan nilai_awal
    • pada awalnya, peubah diinisialisasi dengan nilai_akhir. Nilai peubah secara otomatis berkurang satu setiap kali aksi pengulangan dimasuki, sampai akhirnya nilai peubah sama dengan nilai_awal
Contoh :
algortima peluncuran roket dengan hitungan mundur, muali dari 100, 99, 98, …. 0
Algoritma peluncuran_roket
Deklarasi
K : integer
Deskripsi
For k ← 100 downto 0 do
Write (k)
Endfor
Write (‘GO!’) {roket meluncur}

Algoritma Pengulangan


> Dalam ilmu komputer, algoritma pengurutan (sorting adalah):
1. algoritma yang meletakkan elemen-elemen suatu kumpulan data dalam urutan tertentu atau
2. prosees pengurutan data yang sebelumnya disusun secara acak sehingga
menjadi tersusun secara teratur menurut suatu aturan tertentu
>
Yang pada kenyataannya ‘urutan tertentu’ yang umum digunakan adalah
terurut secara numerikal ataupun secara leksikografi (urutan abjad
sesuai kamus)
> Ada 2 jenis sorting : Ascending & Descending

Pengertian/Konsep Buble Sort

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.
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.

Kelebihan Bubble Sort

  • Metode Buble Sort merupakan metode yang paling simpel
  • Metode Buble Sort mudah dipahami algoritmanya

Kelemahan Bubble Sort

Meskipun simpel metode Bubble sort  merupakan metode pengurutanyang paling tidak efisien.  Kelemahan buble sort adalah pada saat mengurutkan data yang sangat besar akan mengalami kelambatan luar biasa, atau dengan kata lain kinerja memburuk cukup signifikan ketika data yang diolah jika  data cukup banyak. Kelemahan lain adalah jumlah pengulangan akan tetap sama jumlahnya walaupun data sesungguhnya sudah cukup terurut. Hal ini disebabkan setiap data dibandingkan dengan setiap data yang lain untuk menentukan posisinya.

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

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).

Contoh program :
#include "stdio.h"
#include "conio.h"
#define n 7
void main()
{
 int A[n] = {15,10,7,22,17,5,12};
 int X, I, K;
 printf("Sebelum di-sort\n");
 for (I=0; I <= n-1; I++)
  printf("%3i", A[I]);
 printf("\n");

 K=0;
 while(K<=n-2)
 {
  I=0;
  while(I<=n-2 - K)
  {
   if (A[I] > A[I+1])
   {
    X = A[I];
    A[I] = A[I+1];
    A[I+1] = X;
   }
   I++;
  }
  K++;
 }
 printf("Sesudah di-sort\n");
 for (I=0; I<= n-1; I++)
  printf("%3d", A[I]);
}

Selection Sort

Pengertian  dari selection sort adalah mencari elemen yang tepat untuk diletakkan  
di posisi yang telah diketahui,dan meletakkannya di posisi tersebut  setelah data 
tersebut ditemukan.Selection Sort Membandingkan elemen yang sekarang dengan elemen 
yang berikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang 
lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar. 

ilustrasi program :


Contoh Program:

/*---- METODE ASC SELECTION SORT ----*/
#include <stdio.h>
#include <conio.h>

void main() {
 int i, j, iMin;           //Deklarasi index untuk array
 int n, Urut;              //Deklarasi untuk banyak data
 int Tmp;                  //Tmp penampung elemen array
 int Arr[50];              //Deklarasi Array

 //Aplikasi dimulai
 printf("Inputkan banyak data yang akan diurutkan : ");
 scanf("%i", &n);
 //Input array
 Urut = 1;
 for(i = 0; i < n; i++) { //Perulangan untuk inputan array
 printf("Masukan data ke %i : ", i + 1);
 scanf("%i", &Arr[i]);
 }
 //Lakukan sorting ascending dengan metode selection
 for(i = 0; i < n - 1; i++) {          //n - 1 artinya elm terakhir tidak dihitung
 iMin = i;                          //Set min = index array
 for(j = Urut; j < n; j++) {        //Lakukan perulangan sebagai pembanding
 if(Arr[j] < Arr[iMin]) {        //Cari data yang kecil
 iMin = j;                    //min diganti dengan yang lebih kecil
 if(Arr[i] != Arr[iMin]) {    //Cek untuk data yang berbeda
 Tmp = Arr[i];             //Tampung Array yang lama
 if(Arr[i] > Arr[iMin]) {  //Jika Array lama lebih besar dari yang baru
 Arr[i] = Arr[iMin];    //Ganti Array lama dengan Array baru
 Arr[iMin] = Tmp;       //Ganti Array baru dengan Array lama
 }
 }
 }
 }
 Urut = Urut + 1;                   //Tambah urut dengan 1
 }
 //Tampilkan Hasil
 printf("\nSetelah Pengurutan\n");
 for(i = 0; i < n; i++) {              //Perulangan untuk tampilan Array
 printf("Elemen ke %i : %i\n", i + 1, Arr[i]);
 }
 getch();                              //Tahan tampilan
}

algoritma : array

ARRAY di dalam Algoritma


Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.
VARIABEL ARRAY
            nama_variabel[indeks]
ketentuan nama variabel arrray sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .
DEKLARASI VARIABEL ARRAY
BU                  : tipe nama_variabel[indeks];
Contoh           : float bil[10];
            deklarasi variabel array dengan nama bil yang akan menampung 10 data             yang  bertipe  float.  Indeks  10  menunjukkan  variabel  bil  terdiri  dari  10 elemen, dimana setiap elemen akan menampung sebuah data.
Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
            float bil[11]
INISIALISASI  ARRAY 1 DIMENSI
Inisialisasi  dapat dilakukan bersama dengan deklarasi atau tersendiri. Inisialisasi suatu array adalah dengan meletakkan elemen array di antara tanda kurung kurawal {}, antara elemen yang satu dengan lainnya dipisahkan koma.
            int bil[2] = {4,1,8}
            bil[0] = 4
            bil[1] = 1
            bil[2] = 8
AUTOMATIC ARRAY adalah Inisialisasi array dilakukan di dalam fungsi tertentu. Hanya  compiler C yang berstandar ANSI C yang dapat menginisialisasikan automatic array.
Cara menginisialisasikan  array dari compiler yg tidak mengikuti standar  ANSI C:
1. Diinisialisasikan di luar fungsi sebagai variabel GLOBAL/EXTERNAL ARRAY.
            int bil[2]={0,0,0};
            main()
           
2. Diinisialisasikan didlm fungsi sebagai variabel LOKAL/STATIC ARRAY.
            main()
            {
                        static int bil[2]={0,0,0};
                        .........
Pada automatic array yang tidak diinisialisasikan , elemen array akan memiliki nilai yang tidak beraturan. Bila global & static array tidak diinisialisasi maka semua elemen array secara otomatis akan diberi nilai nol(0).
Contoh :
main()
{
            int y;
            int hitung=0;
            int x[0];
            for(y=0;y<5;y++)
            {
                        hitung+=y;
                        x[y]=hitung;
                        printf("%3d - %3d\n",y,x[y]);
            }
}
OUTPUT:
0-  0
1-  1
2-  3
3-  6
4-  10
MENDEFINISIKAN JUMLAH ELEMEN ARRAY DALAM VARIABEL
Besarnya variabel indeks dapat ditentukan dengan menggunakan
preprocessor directives #define
#define N 40
main()
{
            int no[N],gaji[N],gol[N],status[N],juman[N];
Bila besari indeks akan diubah menjadi 50, cukup diganti dengan
#define N 50
ARRAY 2 DIMENSI
            nama_variabel [indeks1][indeks2]
indeks1          : jumlah/nomor baris
indeks2          : jumlah/nomor kolom
Jumlah elemen yang dimiliki array 2 dimensi dapat ditentukan dari hasil perkalian          indeks1 * indeks2
misal : array A[2][3] akan memiliki 2*3 = 6 elemen.
main()
{
            float  bil [5] [5]
            .......
dapat dituliskan dengan #define
#define N 5
main()
{
            float bil [N]  [N]
            .......
INISIALISASI ARRAY 2 DIMENSI
main()
{
            float bil[2] [3] =
            { { 1,2,3},         /*baris 0*/
              { 4,5,6},         /*baris 1*/
            }
elemen bil [0] [0] = 1
elemen bil [0] [1] = 2
elemen bil [0] [2] = 3
elemen bil [1] [0] = 4
elemen bil [1] [1] = 5
elemen bil [1] [2] = 6
Contoh :
main()
{
            int x[3][5];
            int y,z;
            int hitung=0;
            for(y=0;y<3;y++)
            {
                        printf("y = %d\n",y);
                        for(z=0;z<5;z++)
                        {
                                    hitung+=z;
                                    x[y][z] = hitung;
                                    printf("%/t%3d - %3d\n",z,x[y][z]);
                        }
            }
}
OUTPUT:
y = 0
   0-  0
   1-  1
   2-  2
   3-  6
   4-  10
y = 1
   0-  10
   1-  11
   2-  13
   3-  16
   4-  20
y = 2
  0-  20
  1-  21
  2-  23
  3-  26
  4-  30
STRING dan ARRAY
1. Pada string   terdapat karakter null(\0) di akhir string
2. String sudah pasti array, array belum tentu string
CONTOH - CONTOH :
1. array dengan pengisian input melalui keyboard
            baca_input()
            {
                        float nilai[10];
                        for(i=0;i<10;i++)
                        scanf("%d",&nilai[i]);
            }
2. Fungsi yang mencetak isi array dari akhir ke awal
            cetak_array()
            {
                        float nilai[10];
                        for(i=9;i>=0;i--)
                        scanf("%3f",nilai[i]);
            }
3. Menghitung rata - rata isi array nilai
            rata_rata()
            {
                        float nilai[10],jum*rata;
                        for(i=0,jum=0;i<=9;i++)
                                    jum+=nilai[i];
                                    rata=jum/i;
            }
4. Mencari nilai terbesar
            besar()
            float temp,nilai[10];
            {
                        for(temp=nilai[0],i=1;i<=9;i++)
                        if(nilai[i] > temp)
                                    temp=nilai[i];
            }
            return(temp)