Background

Background

Silahkan klik beberapa gambar di bawah ini

  • image1
  • image2
  • image3
  • image4
  • image2
  • image1
  • image4
  • image3
Dilihat dari susunan Algoritma, sebenarnya Algoritma terbagi atas 3 bagian, yakni :
  • Judul Algoritma
Judul Algoritma adalah bagian yang terdiri atas nama Algoritma dan penjelasan (spesifikasi) tentang Algoritma tersebut.
  • Bagian Deklarasi
Bagian Deklarasi adalah bagian untuk mendefinisikan semua nama yang dipakai dalam Algoritma tersebut.
Misalnya nama peubah (variable) dan nama tipe data.
  • Deskripsi
Bagian ini berisi uraian langkah-langkah sampai dengan hasil penyelesaian sebuah permasalahan sampai dengan hasil-hasil akhir di sebuah Algoritma.
Contoh 1:
Algoritma Luas Persegi Panjang (disebut dengan Judul Algoritma)
panjang, lebar, luas : longint (disebut dengan Bagian Deklarasi)
(Uraian ke bawah berikut ini disebut dengan Deskripsi)
baca panjang : 2
baca lebar : 1
luas : panjang * lebar
Output hasil luas : 2


 
Contoh 2:
Algoritma Memindahkan isi bejana A – B dan B – A

Algoritma Pertukaran ;
Deklarasi
A, B, C : Integer;
Deskripsi
baca A
baca B
C = A;
A = B;
B = C;
Output hasil penukaran : A = B, B = A







Contoh 3:
Algoritma Uang Kembalian;
Deklarasi
harga barang, uang, kembalian : longint;
Deskripsi
baca uang;
baca harga barang;
kembalian = uang – harga barang;
Output hasil kembalian;

Contoh 4:
Buatlah algoritma menghitung besar komisi seorang salesman, jika ketentuannya adalah salesman tersebut mendapatkan komisi sebesar 5% dari harga jual barang.
Penyelesaian :
Algoritma komisi salesman;
Deklarasi
harga jual, komisi : real;
Deskripsi
baca harga jual;
baca konstanta;
komisi = 5% * harga jual;
Output besar komisi;

1.      Pengertian Algoritma Pencarian (searching)

Pencarian(searhing) merupakan proses yang fundamental dalam pengolahan data. Proses pensarian adalah menemukan nilai(data) tertentu didalam sekumpulan data yang bertipe sama (baik bertipe dasar maupun bertipe bentukan).
Sebuah algoritma pencarian dijelaskan secara luas adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen kunci dan dengan  langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut.  Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful).

1.      Macam-macam Algoritma Pencarian (Searching)

1.1  Pencarian sekuensial (Sequential searching)

·         Pengertian

Pencarian Sekuensial (sequential searching) atau pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana.  Pencarian beruntun adalah proses membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa. Pencarian beruntun terbadi dua:

1.      Pencarian beruntun pada larik tidak terurut;

2.      Pencarian beruntun pada larik terurut.



·         Algoritma

Pencarian berurutan menggunakan prinsip sebagai berikut :

1.      data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan.

2.      Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data.

3.      Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari.

4.       Apabila sama, berarti data telah ditemukan.   Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada.

Kelemahan pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula. Algoritma pencarian berurutan dapat dituliskan sebagai berikut :

(1)           i ← 0

(2)           ketemu ← false

(3)           Selama (tidak ketemu) dan (i <= N) kerjakan baris 4

(4)           Jika (Data[i] = x) maka ketemu ← true, jika tidak i ← i + 1

(5)           Jika (ketemu) maka i adalah indeks dari data yang dicari, jika data tidak ditemukan

·         Contoh

#include <stdio.h>

#include <conio.h>

void main(){

int data[8] = {8,10,6,-2,11,7,1,100};

 int cari;

   int flag=0;

  printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);

   for(int i=0;i<8;i++){

                if(data[i] == cari) flag=1;

   }

   if(flag==1) printf("Data ada!\n"); 

else printf("Data tidak ada!\n");

getch();

return 1;

}

Dari program diatas, terlihat bahwa dilakukan perulangan untuk mengakses semua elemen array data satu persatu berdasarkan indeksnya.

  • Program menggunakan sebuah variabel flag yang berguna untuk menadai ada atau tidaknya data yang dicari dalam array data.  Hanya bernilai 0 atau 1.

  • Flag pertama kali diinisialiasasi dengan nilai 0.

  • Jika ditemukan, maka flag akan diset menjadi 1, jika tidak ada maka flag akan tetap bernilai 0.

  • Semua elemen array data akan dibandingkan satu persatu dengan data yang dicari dan diinputkan oleh user.

1.1  Pencarian Beruntun dengan Sentinel

·         Pengertian

Jika pencarian bertujuan untuk menambahkan elemen baru setelah elemen terakhir larik, maka terdapat sebuah varian dari metode pencarian beruntun yang mangkus. Nilai x yang akan dicari sengaja ditambahkan terlebih dahulu. Data yang ditambahkan setelah elemen terakhir larik ini disebut sentinel.

· Algoritma

Procedure SeqSearchWithSentinel(input L: LarikInt, input n: integer, input x: integer, output idx: integer)

DEKLARASI

     I: integer

ALGORITMA

L[n+1]  ← X   {sentinel}

I ← 1

While (L[i] ≠ x) do

                 I ← i+1

Endwhile

If idx = n+1 then

                 idx  ← -1

else

                 idx ← 1

endif

·         Contoh

#include <stdio.h>

#include <conio.h>

void main(){

 int data[7] = {3,12,9,-4,21,6};

 int cari,i;


printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);

data[6] = cari;

   i=0;

 while(data[i] != cari) i++;

 if(i<6) printf("Data ada!\n"); else printf("Data tidak ada!\n");

getch;

return 1;

}

1.1  Pencarian Biner (binary search)

·         Pengertian
Terdapat metode pencarian pada data terurut yang paling efficient, yaitu metode pencarian bagidua atau pencarian biner (binary search). Metode ini digunakan untuk kebutuhan pencarian dengan waktu yang cepat. Prinsip pencarian dengan membagi data atas dua bagian mengilhami metode ini. Data yang disimpan di dalam larik harus sudah terurut.
BST adalah binary tree yang mana data di dalamnya tersusun sedemikian rupa sehingga pada setiap subtree di dalamnya berlaku:
setiap data di subtree kiri < data root subtree < setiap data di subtree kanan.
  • Algoritma

class BinaryNode {
      void printInOrder( )
      {
              if( left != null )
           left.printInOrder( );                               // Left
              System.out.println( element );            // Node
              if( right != null )
               right.printInOrder( );                          // Right
   }
}
class BinaryTree {
   public void printInOrder( )
   {
              if( root != null )
              root.printInOrder( );
   }
}
Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :
  1. mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2.
  2. Kemudian data yang dicari dibandingkan dengan data tengah.
  3. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.
  4. Jika lebih besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
  5. Demikian seterusnya sampai data tengah sama dengan yang dicari.
Algoritma pencarian biner dapat dituliskan sebagai berikut : 
  •  Contoh

  1.  L  ← 0

  2. R ← N - 1

  3. ketemu ← false

  4. Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8   

  5. m ← (L + R) / 2 83

  6.  Jika (Data[m] = x) maka ketemu ← true

  7.  Jika (x < Data[m]) maka R ← m – 1 Jika (x > Data[m]) maka L  ← m + 1

  8. Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.

int binary_search(int cari){

int l,r,m;

 l = 0;

   r = n-1;

 int ktm = 0;

 while(l<=r && ktm==0){

                m = (l+r)/2;

               if(data[m] == cari) ktm=1;

               else if (cari < data[m]) r=m-1;

               else l=m+1; {

 if(ktm==1) return 1; else return 0;

}         

}                     

}

 

 

Algoritma Scan Line :
melakukan scanning untuk setiap baris dari layar bidang gambar untuk setiap permukaan objek pada ruang tiga dimensi dan menampilkan hasilnya setelah melaksanakan proses setiap baris scanning-nya.
Kedua algoritma ini dibandingkan berdasarkan besar memori dan waktu yang dipergunakan oleh masing-masing algoritma.

Dari hasil penelitian didapatkan bahwa algoritma Scanline menggunakan memori yang lebih sedikit dari algoritma Z-Buffer,
sedangkan dari segi kecepatan algoritma Scan Line lebih unggul daripada algoritma Z Buffer
bilamana objek yang ditampilkan pada bidang gambar mengumpul pada baris y, sedangkan Z Buffer lebih unggul dari Scan Line
bila objek yang digambar menyebar dan menggunakan keseluruhan baris pada bidang gambar dengan bidang permukaan yang digambar semakin banyak.
Output Primitif Dasar
Intro :
• Pada contoh Pembuatan Output Primitif (digunakan layar beresolusi 320 x 200). Layar ini dibuat dengan cara Interrupt DOS Servis 10h dengan menset Register AX menjadi 13h (Menunjukkan Resolusi Layar 320 x 200 pixel pada Monitor VGA)
• Alamat Visual Page $A000:0 s/d $A000:63999, setiap pixel disimpan dalam 1 byte (64000 byte).
• Rumus untuk meletakkan pixel pada layer adalah, Offset = Y*320 + X
Procedure PutPixel (Var PicBuff; X,Y : Integer; Col : Byte);
Var Address : Word;
Begin
Address := (Y*320) + X;
Mem[$A000:Address]:=Col;
End;

Pembuatan Output Primitif

1. Meletakkan Titik / PutPixel
Perhitungan offset = [(Y*4)+Y] * 32,
dalam program assembler digunakan perintah Shl untuk menambah kecepatan program.
(bisa juga dengan prosedur pascal diatas)
2. Pembuatan Garis / Line
Algoritma DDA
1. Menghitung panjang X dan Y
2. Menentukan X1,Y1 sebagai awal Garis (X2,Y2 dianggap sebagai akhir garis)
3. Periksa apakah Dy + Dy <> 0 (jika ya maka tidak bisa dibuat kotak)
4. Menghitung apakah Dx lebih besar dari Dy (menentukan Dx atau Dy yang akan dibagi)
a. Jika Dx > Dy
Koordinat X ditambah 1
Koordinat Y=Dy / Dx
Jumlah pemanggilan pixel sebanyak Dx kali
b. Jika Dx tidak lebih besar dari Dy
Koordinat Y ditambah 1
Koordinat X =Dx / Dy
Jumlah pemanggilan pixel sebanyak Dy kali
c. Cek apakah X bernilai negatif, jika ya arah penambahan X harus negatif (garis dari kiri kekanan)
d. Cek apakah Y bernilai negatif, jika ya arah penambahan Y harus negatif (garis dari kiri kekanan)
e. Letakkan Titik Pertama kali
f. Meletakkan Titik sebanyak Loop

Algoritma Bresenham

1. Tentukan 2 buah titik yang akan dihubungkan dengan garis
2. Tentukan salah satu titik disebelah kiri sebagai titik awal = (X1,Y1) dan titik lainnya (X2,Y2) sebagai titik akhir
3. Hitung Dx, Dy, 2Dx dan 2Dy –2Dx
4. Hitung parameter
Po= 2Dy – Dx
5. Jika X1 > X2 Maka tentukan
• X=X2
• Y=Y2
• Xahir = X1
6. Jika tidak tentukan
• X=X1
• Y=Y1
• Xahir = X2
7. Tentukan titik pertama pada posisi X,Y
8. Selama X < Xahir
• X=X+1
• Jika Po < 0 maka tentukan Po=TwoDy
• Jika tidak tentukan
• Y=Y+1
• Po=TwoDyDx
• Letakkan titk pada posisi X,Y
3. Pembuatan Kotak / Rectangle
Dilakukan dengan cara membuat empat garis untuk membentuk kotak.
X2,Y1
X1,Y2
X1,Y1
X2,Y2
4. Pembuatan Lingkaran
Titik diletakkan dengan rumus parametrik lingkaran
X = R*Cos(Teta) Y = R*Sin(Teta)
(Teta = Sudut 0o ... 359o )
Teta di Looping sebanyak 0 s/d 1440
(bukan berarti 0 s/d 1440 derajat)
Perhatikan penggunaan pada Cos dan Sin adalah
Teta * Pi / 720
? 1440 * Pi / 720
? 2 * Pi
? 360
Kenapa tidak 0 s/d 360, karena jika lingkaran besar akan mengakibatkan titik lingkaran jarang-jarang / tidak rapat.
5. Pembuatan Ellips
Sama seperti pembuatan lingkatan, Tetapi menggunakan 2 jari-jari, jari-jari X = Rx dan jari-jari Y = Ry
Contoh Program Ada Pada Lampiran Listing Output Grafik Primitif

3.2 Kurva Lain
Bermacam-macam fungsi kurva bermanfaat untuk pembentukan model, spesifikasi jalur animasi, data dan fungsi grafik, serta aplikasi lain.Biasanya kurva mempunyai bentuk seperti conic, trigonometric, fungsi eksponensial, polinomial dan fungsi
spline, untuk menampilkan kurva-kerva tersebut dapat digunakan metode seperti pada lingkaran yang telah dibicarakan diatas.
3.3 Fill Area Primitif
Fill area (pengisian area) output primitif standar pada paket aplikasi grafik umumnya adalah warna solid atau raster. Jenis yang paling mudah diproses adalah poligon, karena mempunyai garis batas.
a. Algoritma Scan-line
Untuk pengisian solid poligon dilakukan dengan cara titik potong diurutkan dari kiri ke kanan, Posisi yang berhubungan pada frame buffer antara sepasang titik diberi warna tertentu.


TIPE DATA UNTUK PEMROGRAMAN C++
Konsep tipe data C++ dibagi menjadi beberapa tipe data, seperti:
I.                    Tipe Sederhana(Simple type)
-          Int ( Integer )
-          Bool ( Boolean )
-          Char ( Charakter )
-          Tipe Float

II.                  Tipe String
-          Operasi String

III.               Tipe Terstuktur
-          Array                          -  Struct
Variabel & Konstanta
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program.Berbeda dengan konstanta yang nilainya selalu tetap,nilai dari suatu variable bisa diubah-ubah sesuai kebutuhan.
Konstanta  ialah kalau variabel nilainya bisa berubah – ubah sebaliknya ,nilai konstanta atau literal tetap dan tidak bisa ber ubah – ubah dengan kata lain ekspresi dengan nilai yang tetap.
I.                   TIPE DATA SEDERHANA
1.      Tipe Int ( Integer )
Adalah tipe data yang nilainya tidak memiliki titik desimal. Dalam bahasa pemrograman pascal hanya digit yang bisa muncul sebagai Integer,tidak boleh ada character lain lain termasuk koma kecuali + dan -.

2.     Bool ( Boolean )
Adalah nilai data yang sangat penting untuk pengambilan suatu keputusan dalam suatu program karena pada tipe ini data akan mempunyai dua nilai, yaitu benar atau salah, True or False.

3.     Char ( Charakter )
Kata ini digunakan untuk menampung data sebuah karakter. Dan hanya memuat satu karakter saja berupa huruf, angka atau simbol. Karakter perlu ditulis didalam tanda petik tunggal(‘). Contoh : ‘A’, ‘a’, ‘B’, ‘b’

4.     Tipe Float
Adalah tipe data yang nilainya pecahan(memiliki titik desimal).

II.               TIPE STRING

Operasi String adalah data yang berisi sederetan karakter yang banyaknya bisa berubah-ubah sesuai kebutuhan. Dengan ketentuan besarnya adalah 1 s/d 255 karakter.
Cara pendeklarasian adalah :
Contoh :   char nama[50];
char *alamat;
Fungsi pada Operasi  STRING

1.      Strcpy() : untuk menyalin nilai string.
Contoh  dalam penggalan program c++:
Cout<<“Masukan Kata ? “;gets(kata);
Strcpy(copy,kata);
Cout<<“Hasilnya ? “<<copy;

2. Strcat() : untuk menggabungkan nilai string.
Contoh dlm penggalan program c++ :
Cout<<“Kata Pertama ? “;gets(a);
Cout<<“Kata Kedua ? “;cin(b);
Strcat(a,b);
Cout<<“Hasil Gabungan : “<<a;

3. Strcmp() : untuk membandingkan 2 nilai string.
Contoh dalam penggalan program c++:
char sa[]="Logika";
char sb[]="Logika Algoritma";
char sc[]="Logika Algoritma & Pemprograman";
/*Melakukan perbandingan terhadap dua string dan penampilan nilainya*/
printf("Nilai Yang dibandingkan sa,sb :
%d\n",strcmp(sa,sb));
printf("Nilai Yang dibandingkan sa,sc :
%d\n",strcmp(sa,sc));
printf("Nilai Yang dibandingkan sb,sa :
%d\n",strcmp(sb,sa));
getch();
return 0;
}

4. Strlen() : untuk mengetahui panjang nilai string
Contoh dalam penggalan program c++:
cout<<"Masukkan Kata = ";
cout<<"Masukkan Kata = ";
cout<<"Panjang Kata yang telah diinput = ";
cout<<strlen(angka);

5. Strchr () : untuk mencari nilai karakter dalam string.
Contoh dalam penggalan program C++:
int main(void){
char str [100]="Aisyah Zahra";
char karakter='Z';
char *hasil;
hasil=strchr(str,karakter);
printf("Hasil Peubah :%s\n",hasil);
printf("Karakter %c ditemukan pada indeks ke-%d",karakter,(hasil-str));
getch();
return 0; }

III.             TIPE TERSTRUKTUR

1.     Array
Adalah tipe data terstruktur yang mempunyai komponen dalam jumlah yang tetap dan setiap komponen mempunyai tipe data yang sama. Posisi komponen dalam larik dinyatakan sebagai nomor index.

2.     Struct
Adalah kumpulan vaariabel yang dinyatakan dengan sebuah nama,dengan sifat setiap variabel dapat memiliki tipe ang berlainan. Untuk menyimpan suatu variabel dalam pemrograman C++, diperlukan suatu tempat khusus di dalam memori komputer.