Showing posts with label Algoritma. Show all posts
Showing posts with label Algoritma. Show all posts

Sunday

Sorting Array (JAVA)

Sorting
Salah satu bagian penting dari struktur data adalah proses pengurutan data-data  itu sendiri. Data akan terkadang akan berada dalam bentuk yang tidak berpola ataupun dengan pola tertentu yang tidak kita inginkan, namun dalam penggunaanya, kita akan selalu ingin menggunakan data-data tersebut dalam bentuk yang rapi atau berpola sesuai dengan yang kita inginkan. Maka dari itu proses sorting adalah proses yang sangat penting dalam struktur data, terlebih untuk pengurutan data yang bertipe numerik ataupun karakter.

Sorting adalah proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola tertentu ataupun secara acak, sehingga menjadi tersusun secara teratur menurut aturan tertentu.


Pada umumnya ada 2 macam pengurutan, yaitu:
  • Pengurutan secara ascending (urut naik).
  • Pengurutan secara descending (urut turun).
Algoritma untuk melakukan sorting juga ada berbagai macam, antara lain:
  1. Teoretis : Computational complexity theory, Big O notation, Total order, Stability, Comparison sort.
  2. Exchange sorts : Exchange sort, Bubble sort, Cocktail sort, Comb sort, Gnome sort, Quick sort.
  3. Selection sorts  : Selection sort, Heap sort, Smooth sort.
  4. Insertion sorts   : Insertion sort, Shell sort, Tree sort, Library sort, Patience sorting.
  5. Merge sorts     : Merge sort.
  6. Non-comparison : Radix sort, Bucket sort, Counting sort, Pigeonhole sort.
  7. Others  : Topological sorting, Sorting network.
Algoritma-algoritma ini tentu saja akan mempunyai efek yang berbeda dalam setiap prosesnya, ada yang mudah digunakan, ada yang mempunyai proses yang sangat cepat, dan sebagainya.
Pemilihan algoritma untuk sorting ini tidak hanya asal saja dipilih. Pemilihian ini semestinya berdasarkan kebutuhan yang diperlukan. Tidak semua algortima yang pendek itu buruk dan tidak semua algoritma yang super cepat juga akan baik dalam semua kondisi. Misal: algoritma Quick Sort adalah algoritma sorting yang tercepat dalam proses pencariannya, namun jika data yang akan diurutkan ternyata sudah hampir terurut atau tidak terlalu banyak, maka algoritma ini malah akan memperlama proses pengurutan itu sendiri, karena akan banyak perulangan tidak perlu yang dilakukan dalam proses sorting ini.
Hal yang umum dilakukan dalam proses sorting adalah proses pertukaran antara 2 elemen atau lebih (analogi memindah air dalam gelas). Untuk melakukan proses pertukaran akan diperlukan adanya variable baru yang digunakan sebagai variable penampung.

Sebagai contoh saya akan buat satu deklarasi sebagai berikut ;


Buble Sort
Berikut adalah deklarasi dari Sorting jenis ini :
  • Metode sorting paling mudah, namun paling lambat dibandingkan dengan yang lain.
  • Bisa dilakukan baik dari kepala array maupun ekor array.
  • Bubble sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya.
  • Proses yang berlangsung, jika: Ascending: jika elemen sekarang lebih besar daripada elemen berikutnya, maka kedua elemen tersebut ditukar. Descending: jika elemen sekarang lebih kecil daripada elemen berikutnya, maka kedua elemen tersebut ditukar.
  •  Hal ini akan terlihat seperti penggeseran angka, perbandingan, kemudian jika memenuhi syarat kemudian tukar.
  •  Proses penukaran ini akan terus dilakukan hingga seluruh array telah diperiksa.
Contoh fungsi nya :

Exchange Sort
Berikut adalah deklarasi dari Sorting jenis ini :
  • Mirip dengan bubble sort.
  • Perbedaannya: dalam exchange sort ada elemen yang berfungsi sebagai pusat (pivot), pertukaran hanya akan dilakukan jika diperlukan saja dari pivot tersebut.
  • Sedangkan bubble sort akan membandingkan elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya, kemudian elemen sebelum/sesudahnya itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya.
Contoh fungsi nya :

Selection Sort
Berikut adalah deklarasi dari Sorting jenis ini :
  • Kombinasi sorting dan searching.
  • Untuk setiap proses, akan dilakukan dengan mencari elemen dari posisi yang belum diurutkan dan kemudian memilih elemen yang memiliki nilai terkecil atau terbesar yang akan ditukarkan ke posisi yang tepat di dalam array.
  • Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini akan ditempatkan pada indeks terkecil, pada putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua, negitu seterusnya hingga tidak ada data yang dicari lagi.
  • Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir proses.
Contoh fungsi nya :

Insertion Sort
Berikut adalah deklarasi dari Sorting jenis ini :
  • Analogi pengurutan kartu.
  • Proses dilakukan dengan membandingkan data ke-I dengan data yang sebelum-sebelumnya.
  • Misal ascending: pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan dimasukkan di posisi yang seharusnya.
  • Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang.
Contoh fungsi nya :
Quick Sort
Berikut adalah deklarasi dari Sorting jenis ini :
  • Bersifat divide&conquer.
  • Merupakan metode pencarian yang sangat cepat (saat ini tercepat).
  • Pertama-tama deret dibagi menjadi dua bagian, misal, semua elemen pada bagian b (bagian pertama) mempunyai kurang dari atau sama dengan semua elemen pada bagaian c (bagian kedua -- membagi). Kemudian kedua bagian tersebut dilakukan proses sorting dengan rekursif secara terpisah dengan prosedur yang sama(coquer). Kemudian gabungkan lagi kedua bagian terpisah tersebut.

Langkah-langkahnya :
  • Memilih sebuah elemen pembanding (pivot), misal x.
  • Semua elemen dari deret tersebut yang kurang dari x diletakkan pada bagian pertama.
  • Kemudian semua elemen dari yang lebih besar dari x diletakkan pada bagian kedua.
  • Untuk elemen yang sama dengan x bias diletakkan di mana saja bahkan bisa juga di antara kedua bagian tersebut.
Algoritma Partisi :
  • setelah mempartisi, prosedur sorting akan dilakukan secara rekursif. Hingga proses rekursif tersebut akan berhenti saat sebuah bagian hanya tinggal terdapat satu elemen saja.
  • Tidak baik digunakan jika elemen-elemen yang akan diurutkan hanya ada sedikit atau sudah hamper terurut, karena jika menggunakan metode ini justru akan melakukan perulangan yang tidak berguna dan lama.
  • Mempunyai algoritma dan program yang cukup kompleks.
Contoh fungsi nya :

Sekian, Selamat Belajar :D

Pencarian Biner - Binnary Searching (Algoritma)

Dalam Algorithma khususnya saat mempelajari Struktur data kita akan dihadapkan dengan metode-metode pencarian atau searching, dan metode searching yang paling popular digunakan saat ini ada 2 yaitu metode pencarian Biner (Binnary Searching) dan pencarian Fibonacci (Fibonacci Searching). Dua metode ini sering digunakan pada saat ini meskpun masih banyak metode-metode lain yang juga termasuk dalam metode Searching. Mari kita bahas.

Pencarian biner adalah proses mencari suatu unsur dalam daftar diurutkan. Pencarian dimulai dengan membagi daftar menjadi dua bagian. Algoritma membandingkan nilai median. Jika elemen pencarian kurang dari nilai median, daftar teratas hanya akan dicari, setelah menemukan elemen tengah daftar itu. Proses berlanjut sampai elemen ditemukan atau pencarian di daftar teratas selesai. Proses yang sama dilanjutkan untuk daftar bawah, sampai elemen ditemukan atau pencarian dalam daftar bawah selesai. Jika unsur ditemukan yang harus menjadi nilai median.


Dari gambar diatas, pertama kita urutkan dahulu data yang tadinya acak. Setelah kita urutkan, kita kasih nomor urut datanya secara angka biner (0-8), setelah itu kita kasih inisial patokan menggunakan A-B-C (atau bisa menggunakan angka),dan kemudian kita bandingkan untuk mencari titik median, dengan membandingkan antara posisi data yang kita cari dengan titik tengah, gunanya untuk menentukan posisi awal dilangkah berikutnya. Ketentuanya jika data data yang kita cari itu lebih besar dari patokan tengah maka posisi awal dilangkah berikutnya adalah menambahkan posisi tengah +1, sebaliknya jika data yang kita cari itu lebih kurang dari patokan tengah maka posisi awal berikutnya adalah mengurangi posisi tengan -1.

Begitu sampai langkah berikutnya hingga kita menemukan titik median yang menyisakan satu patokan saja A=B=C.

FOR,DO,DO WHILE

C. Statement FOR
Statement FOR digunakan untuk menyatakan perulangan (seperti PASCAL).
Sintaksnya:
for (ungkapan1; ungkapan2; ungkapan3)
{
.
.
}
- Ungkapan1 merupakan statement awal (inisialisasi)
- Ungkapan2 merupakan kondisi/syarat perulangan dilakukan
- Ungkapan3 merupakan statement control untuk perulangan
Contoh:
for (a = 1; a <= 5; a++)
{
cout << “Hello world \n”;
}
NB: tipe data variabel a adalah integer
Perintah di atas akan menampilkan teks Hello World sebanyak 5 buah. Perhatikan tanda a++.
Selain berupa angka, pencacah perulangan juga dapat berupa karakter. Contoh,
for (huruf = ‘Z’; huruf >= ‘A’; huruf--)
{
cout << “Huruf abjad= “ << huruf << “\n”;
}
Perintah di atas akan menampilkan teks Huruf abjad = ... mulai dari Z sampai dengan A. Perhatikan perintah huruf--
for (angka = 1; angka <= 6; angka+=2)
{
cout << “Isi dari angka = “ << angka << endl;
}
Perintah di atas akan menampilkan angka 1, 3, 5. Kok bisa? Perhatikan perintah angka+=2.
Di bawah ini adalah program untuk mencetak bilangan genap yang kurang dari n (n diperoleh dari input).
#include 
#include 
void main()
{
int bil, n;
cout << “Masukkan n = “;
cin >> n;
for (bil = 0; bil < n; bil++)
{
if (bil % 2 == 0) cout << bil << “ ”;
}
}

D. Statement WHILE
Statement WHILE juga digunakan untuk menyatakan perulangan. Penggunaannya mirip pada PASCAL. Sintaksnya:
while (kondisi)
{

.

.

}
contoh:
Dua perintah di bawah ini adalah identik.
for (a = 1; a <= 5; a++)
{
cout << “Hello world \n”;
}
dengan
a = 1;
while (a <= 5)
{
cout << “Hello world \n”;
a++;
}
Penting!!!
Jika Anda menggunakan WHILE, pastikan bahwa suatu saat bagian kondisi sampai bernilai FALSE. Apabila tidak, proses perulangan akan terus berjalan selamanya.

Contoh program di bawah ini digunakan untuk menjumlahkan sejumlah data angka.
Angka yang akan dijumlahkan diinputkan satu-persatu. Proses pemasukan data angka akan berhenti ketika dimasukkan angka –1.
Setelah itu tampil hasil penjumlahannya.
#include 
#include 
void main()
{
int data, jumlah,cacah;
jumlah = 0;
data = 0;
cacah = 0;
while (data != -1)
{
cout << “Masukkan data angka : “;
cin >> data;
jumlah += data;
cacah++;
}
cout << “Jumlah data adalah : “ << jumlah” << endl;
cout << “Rata-rata : ” << jumlah/cacah;
}
Kondisi dalam WHILE juga dapat menggunakan operator logika. Misalnya
while ((kondisi1) && (kondisi2))
{
.
.
}

E. Statement DO ... WHILE
Perintah DO ... WHILE hampir sama dengan WHILE sebelumnya. Sintaknya:
do
{
.
.
}
while (kondisi);
Perbedaan dengan WHILE sebelumnya yaitu bahwa pada DO WHILE statement perulangannya dilakukan terlebih dahulu baru kemudian di cek kondisinya.Sedangkan WHILE kondisi dicek dulu baru kemudia statement perulangannya dijalankan. Akibat dari hal ini adalah dalam DO WHILE minimal terdapat 1x perulangan. Sedangkan WHILE dimungkinkan perulangan tidak pernah terjadi yaitu ketika kondisinya langsung bernilai FALSE.
Contoh:
a = 1;
do
{
cout << “Hello world \n”;
a++;
}
while(a==0)
Perintah di atas akan muncul satu buah Hello World. Bandingkan dengan yang berikut ini:
a = 1;
while(a==0)
{
cout << “Hello world \n”;
a++;
}
Perintah di atas sama sekali tidak menampilkan Hello World, karena kondisinya langsung FALSE.

FUNGSI IF, SWITCH, FOR, WHILE, DO WHILE

A. Statement IF
Seperti halnya Pascal, perintah IF dalam C++ juga digunakan untuk menyatakan pernyataan kondisional (bersyarat).
Sintaks sederhana IF adalah,
if (kondisi)
statement;
Statement pada sintaks di atas akan dilakukan jika kondisinya bernilai TRUE (tidak sama dengan nol).
Apabila statement yang akan dilakukan lebih dari satu, maka sintaksnya menjadi,
if (kondisi)
{
statement1;
statement2;
.

.

}
Contoh sederhana penggunaan IF adalah untuk menentukan boleh tidaknya seseorang melihat film bioskop. Seseorang diperbolehkan menonton jika usianya 17 tahun ke atas. Berikut ini program C++ nya:
#include 
#include 
void main()
{
int usia;
clrscr();
cout << “Berapa usia Anda : “;
cin >> usia;
if (usia < 17)
cout << “Anda tidak boleh menonton bioskop”;
}
Statement IF juga dapat ditambahkan ELSE sebagai konsekuensi alternatif jika kondisi tidak dipenuhi (FALSE). Sintaksnya,
if (kondisi)
{
statement1;
statement2;
.
.
}
else {
statement1;
statement2;
}
Anda dapat modifikasi program C++ untuk menentukan boleh tidaknya seseorang menonton bioskop seperti di bawah ini:
#include 
#include 
void main()
{
int usia;
clrscr();
cout << “Berapa usia Anda : “;
cin >> usia;
if (usia < 17)
cout << “Anda tidak boleh menonton bioskop”;
else cout << “Anda boleh menonton bioskop”;
}
Untuk menyatakan kondisi (syarat) yang akan dicek pada IF, Anda dapat menggunakan operator logika dan operator relasional seperti yang telah dijelaskan pada bab sebelumnya. Perhatikan contoh di bawah ini!
if ((a >= 2) && (b == 3))
{
.
.
}
Jangan Anda tuliskan
if (a >= 2) && (b == 3)
{
.
.
}
atau
if ((a >= 2) && (b = 3))
{
.
.
}
Perintah b = 3 merupakan assignment bukan relasional.
Catatan penting:
C++ selalu memperlakukan nilai tidak sama dengan nol sebagai TRUE dan nilai nol sama dengan FALSE. Oleh karena itu, dua perintah di bawah ini adalah identik.
if (bil % 2 != 0)
cout << “Bilangan ganjil”;
if (bil % 2)
cout << “Bilangan ganjil”

Selain itu, IF juga dapat berbentuk seperti di bawah ini.
if (kondisi1)
statement1;
else if (kondisi2)
statement2;
else if (kondisi3)
statement3;
.
.
else statement;

B. Statement SWITCH
Statement SWITCH juga berfungsi sama dengan IF. Perintah SWITCH sama dengan perintah CASE OF dalam PASCAL.
Sintaks:
switch (variabel)
{
case value1 : statement1;
          break;
case value2 : statement2;
          break;
.
.
default : statement; /* optional */
      break;
}
contoh penggunaan:
Saya ingin membuat satu pertanyaan seperti tampilan berikut ini.
IJAZAH PENDIDIKAN
1.SD
2.SMP
3.SMA
4.D3
5.S1

Kamu lulusan apa (1/2/3/4/5)???
Maka jika kamu,
Masukan angka 1 maka akan menghasilkan "Kamu lulusan SD"
Masukan angka 2 maka akan menghasilkan "Kamu lulusan SMP"
Masukan angka 3 maka akan menghasilkan "Kamu lulusan SMA"
Masukan angka 4 maka akan menghasilkan "Kamu lulusan D3"
Masukan angka 5 maka akan menghasilkan "Kamu lulusan S1"

Maka syntax nya,
Buatlah file bernama switch.cpp dengan isi seperti dibawah ini:
#include <iostream>

 using namespace std;

 int main()

 {

 char lulusan;

     cout <<"IJAZAH PENDIDIKAN"<<end;

     cout <<"1.SD" <<endl;

     cout <<"2.SD" <<endl;

     cout <<"3.SD" <<endl;

     cout <<"4.SD" <<endl;

     cout <<"5.SD" <<endl;

     cout <<"Kamu lulusan apa (1/2/3/4/5)???" <<endl;

     cin>>lulusan;

     switch(lulusan)

     {

         case'1':cout <<"Kamu lulusan SD" <<endl;

         break;

         case'2':cout <<"Kamu lulusan SMP" <<endl;

         break;

         case'3':cout <<"Kamu lulusan SMA" <<endl;

         break;

         case'4':cout <<"Kamu lulusan D3" <<endl;

         break;

         default:cout <<"Kamu lulusan S1" <<endl;

     }

     return0;

 }

untuk statemen FOR,DO,DO WHILE kita lanjutkan diPostingan berikut

VARIABEL DAN OPERATOR BAHASA C

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. Nama dari suatu variable dapat ditentukan sendiri oleh pemrogram dengan aturan sebagai berikut :
1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf.
2. Bahasa C bersifat case-sensitive artinya huruf besar dan kecil dianggap berbeda. Jadi antara Metal, dengan metal itu berbeda.
3. Tidak boleh mengandung spasi.
4. Tidak boleh mengandung symbol-simbol khusus, kecuali garis bawah (underscore), seperti : $, ?, %, #, !, &, *, (, ), -, +, dsb.
5. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.
Contoh penamaan yang salah : NIM, a, x, nama_mhs, f3098, f4, nilai, budi, dsb.
Contoh penamaan variable yang salah : nilai_mahasiswa, 80%mahasiswa, rata-rata, ada spasi, penting!, dsb.

Berikut adalah nilai dari beberapa Type data Variabel
Nama Deskripsi Ukuran Range
char karakter atau integer kecil   1byte signed: -128 to 127 unsigned: 0 to 255
short Short Integer 2bytes signed: -32768 to 32767 unsigned: 0 to 65535
int Integer 4bytes signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295
long int Long integer 4bytes signed: -2147483648 to 2147483647unsigned: 0 to 4294967295
bool Nilai Boolean. hanya bisa diisi satu nilai: true atau false 1byte true atau false
float Floating point number (32 bit). 4bytes +/- 3.4e +/- 38 (~7 digits)
double Double precision (64 bit) floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits)
long double Long double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits)
wchar_t Wide character. 2 atau 4 bytes 1 wide character

Tipe data disini berguna untuk memberitahu kepada kompilator bahwa variabel tersebut hanya dapat menampung nilai sesuai dengan tipe data tertentu yang didefinisikan ataupun tipe lain yang kompatibel.

Berikut contoh pendeklarasian beberapa buah variabel dengan tipe data yang berbeda.
int x; /*Mendeklarasikan variabel x dengan tipe data int*/
float y; /*Mendeklarasikan variabel y dengan tipe data float*/
char z; /*Mendeklarasikan variabel z dengan tipe data char*/


Bahasa C mengizinkan kita untuk melakukan pendeklarasian beberapa buah variabel dengan tipe data yang sama dalam satu baris, misanya seperti berikut.
int a, b, c; /*Mendeklarasikan variabel a, b, dan c yang bertipe int*/

double x, y, z; /*Mendeklarasikan variabel x, y dan z yang bertipe double*/

Friday

BAHASA C

Sejarah dan Standar C
Akar dari bahasa C adalah bahasa BCPL yang dikembangkan oleh Martin Richard pada tahun 1967. Bahasa ini memberikan ide kepada Ken Thompson yang kemudian mengembangkan bahasa yang disebut dengan B pada tahun 1970. Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis Ricthie sekitar tahun 1972-an di Bell Telephone Laboratories Inc. ( sekarang adalah AT&T Bell Laboratories).
Kepopuleran bahasa C membuat versi-versi dari bahasa ini banyak dibuat untuk komputer mikro. Untuk membuat versi-versi tersebut standar, ANSI (American National Standards Institute) kemudian menetapkan standar ANSI untuk bahasa C. Standar ANSI ini didasarkan dari standar UNIX yang diperluas. Standar ANSI menetapkan sebanyak 32 buah kata-kata kunci (keyword) standar. Ke 32 kata kunci ini adalah :








Menjalankan Bahasa C dengan Turbo C++
Dengan asumsi di komputer kita sudah ada software bahasa C yaitu Turbo C++ yang tersimpan dalam folder TC, maka untuk menjalankan Turbo C++ dengan cara sebagai berikut :
1. Siapkan folder untuk menyimpan data program C kita misal kita buat folder di D:\Naya
2. Buka Windows Explorer dan buka folder TC
3. Buka folder BIN
4. Cari file execution (.EXE) yang bernama TC.EXE
5. Untuk menjalankannya maka doubel klik file tersebut, sehingga akan tampil menu utama Turbo C++ seperti gambar berikut ini.



















6. Dari tampilan ini, maka tekan Enter atau klik OK. Maka editor Turbo C++ akan tampil. Disinilah tempat kita mengetikkan semua program C++ kita. Anda melihat disini ada menu File, Edit, Search, Run, Compile, Debug, Project, Option, Windows dan Help.
Untuk memilih menu tersebut bisa dengan mouse atau dengan menekan ALT dan huruf depan dari menu yang ingin kita pilih. Misal ALT+F untuk memilih File. dst.
7. Sebelum mengetikkan program, sebaiknya arahkan direktori kerja ke folder yang sudah kita siapkan sebelumnya (langkah 1) dalam contoh ini adalah D:\Naya, dengan langkah sebagai berikut :
a. Pilih menu File
b. Pilih Change Dir…
c. Pilih Drive (Tekan Enter atau double klik)
d. Pilih D (Tekan Enter atau double klik)
e. Cari folder Naya (Tekan Enter atau double klik)
f. Tekan OK
Maka folder D:\Naya sudah aktif sebagai folder kerja, artinya pada saat penyimpanan program dan pemanggilan program akan langsung mengarah pada folder D:\Naya, sehingga file program kita tidak tercampur dengan data file yang lain. Lakukan langkah ini setiap kali memulai Turbo C++.



















8. Mulailah mengetik program. Perintah-perintah penting dalam C++ dalam pengoperasian program antara lain :
























Alasan-alasan Menggunakan Bahasa C
Beberapa alasan mengapa bahasa C banyak digunakan, diantaranya adalah sebagai berikut :
1. Bahasa C tersedia hampir di semua jenis komputer
2. Kode bahasa C sifatnya adalah portabel Aplikasi yang ditulis dengan bahasa C untuk suatu komputer tertentu dapat digunakan di komputer lain hanya dengan sedikit modifikasi.
3. Bahasa C hanya menyediakan sedikit kata-kata kunci.
4. Proses executable program bahasa C lebih cepat
5. Dukungan pustaka yang banyak Keandalan bahasa C dicapai dengan adanya fungsi-fungsi pustaka.
6. C adalah bahasa yang terstruktur Bahasa C mempunyai struktur yang baik sehingga mudah untuk dipahami. C mempunyai fungsi-fungsi sebagai program bagiannya.
7. Selain bahasa tingkat tinggi, C juga dianggap sebagai bahasa tingkat menengah. Bahasa C mampu menggabungkan kemampuan bahasa tingkat tingkat tinggi dengan bahasa tingkat tingkat rendah.
8. Bahasa C adalah kompiler Karena C sifatnya adalah kompiler, maka akan menghasilkan executable program yang banyak dibutuhkan oleh program-program komersial.

Struktur Program C
Untuk dapat memahami bagaimana suatu program ditulis, maka struktur dari program harus dimengerti terlebih dahulu, atau sebagai pedoman penulis program (programmer) bagaimana seharusnya program tersebut ditulis.
Struktur dari program C dapat diihat sebagai kumpulan dari sebuah atau lebih fungsifungsi.
Fungsi pertama yang harus ada di program C yang sudah ditentukan namanya, yaitu fungsi main(). Artinya program C minimal memiliki satu fungsi (fungsi main()).
Fungsi-fungsi lain selain fungsi utama bisa dituliskan setelah atau sebelum fungsi utama dengan deskripsi prototype fungsi pada bagian awal program. Bisa juga dituliskan pada file lain yang apabila kita ingin memakai atau memanggil fungsi dalam file lain tersebut, kita harus menuliskan header file-nya, dengan preprocessor directive #include. File ini disebut file pustaka (library file). Struktur bahasa C dapat dilihat pada gambar berikut ini :




































Keterangan :
1. Dimulai dari tanda { hingga tanda } disebut tubuh fungsi / blok.
2. Tanda ( ) digunakan untuk mengapit argumen fungsi, yaitu nilai yang dilewatkan ke fungsi. Pada fungsi main( ) tidak ada argumen yang diberikan, maka tidak ada entri di dalam ( ).
3. Kata void menyatakan bahwa fungsi ini tidak memiliki nilai balik.
4. Tanda { menyatakan awal eksekusi program dan tanda } menyatakan akhir eksekusi program.
5. Didalam tanda { } bisa tergantung sejumlah unit yang disebut pernyataan (statemen). Umumnya pernyataan berupa instruksi untuk :
a. Memerintah komputer melakukan proses menampilkan string ke layar.
b. Menghitung operasi matematika.
c. Membaca data dari keyboard.
d. dll.
Bahasa C dikatakan sebagai bahasa pemrograman terstruktur, karena strukturnya menggunakan fungsi-fungsi sebagai program bagian (subroutine). Fungsi-fungsi selain fungsi utama merupakan program-program bagian. Fungsi-fungsi ini dapat ditulis setelah fungsi utama atau diletakkan di file pustaka (library). Jika fungsi-fungsi diletakkan di file pustaka dan akan dipakai disuatu program, maka nama file judul (header file) harus dilibatkan didalam program yang menggunakannya dengan preprocessor directive #include.

ABOUT ALGO PROGRAM

Program komputer adalah rangkaian kata perintah yang telah dimengerti oleh komputer untuk dikerjakannya. Kata-kata perintah tersebut membentuk suatu bahasa yang disebut dengan bahasa pemrograman.
Sebagaimana bahasa pada manusia, bahasa pemrograman juga terdiri atas banyak macam bahasa, dan memiliki aturannya masing-masing.
Sulitnya, komputer saat ini belum diberi hak inisiatif, sehingga jika ada sedikit saja kesalahan penulisan perintah oleh pemrogram, ia tidak mau memakluminya atau berusaha memperbaiki sendiri kesalahan tersebut. Serta merta ia “ngambek” dan tidak mau mengerjakan perintah-perintah lainnya.
Komputer diciptakan melalui logika manusia, karenanya, ia bekerja secara logis, tanpa
campur-tangan “perasaan.”
Orang yang telah terbiasa “bergaul” dengan komputer menggunakan satu bahasa pemrograman tertentu (tingkat mahir), biasanya tidak lagi memerlukan kertas coret-coretan untuk membuat suatu program komputer.
Namun bagi pemula, pembelajar, atau yang belum mahir, diperlukan kertas coret-coretan tersebut.
Kertas coret-coretan itu akan digunakan untuk menyusun algoritma (langkah-langkah penyelesaian masalah), flowcharting (alur logika perintah, yang merupakan aplikasi dari algoritma), maupun menuliskan perintah sesuai dengan kaidah dari bahasa pemrograman yang akan digunakannya.
Sewaktu menyusun algoritma, kita tidak perlu tahu (atau tidak perlu menyesuaikan dengan) bahasa pemrograman yang nanti akan kita gunakan.
Hal utama yang kita pikirkan adalah kaidah (hirarki) dari komputer itu sendiri, yaitu input-proses-output.
Input adalah data yang harus ada (sudah ada/ sudah tersedia), yang dapat diproses dengan aturan-aturan tertentu untuk menghasilkan output seperti yang dikehendaki. Data yang ada harus logis (masuk akal) bahwa “ia” dapat diproses untuk menghasilkan output.
Meskipun sudah dikatakan, bahwa sewaktu kita menyusun algoritma kita tidak perlu tahu bahasa pemrograman apa yang akan digunakan kelak, namun, untuk penulisan algoritma yang lebih efisien dan efektif, maka penggunaan sebagian perintah yang ada di dalam bahasa pemrograman perlu dilakukan juga.
Adapun perintah bahasa pemrograman yang paling sering digunakan untuk menyusun algoritma adalah bahasa pemrogrman yang terstrukutur, seperti Pascal, C, SNOBOL, PL/1, dan sebagainya.
Misalkan saja, untuk contoh berikut ini :
Langkah 1 : Beri nilai 10 ke variabel S
Maka, akan lebih mudah jika ditulis sebagai :
Langkah 1 : S := 10;
Belum lagi jika algoritma yang ditulis harus melakukan perulangan langkah ke langkah-langkah sebelumnya (looping).
10 Mulai I:= 1;
11 Lakukan perbandingan data ke I dengan data ke I+1
12 Jika data ke I+1 lebih kecil, maka tukar tempat keduanya
13 Tambahkan I dengan 1
14 Lakukan langkah 11 hingga langkah 13 selama nilai I < 10
15 selesai
Tentu akan lebih ringkas jika kita tulis (perintah BASIC) :
10 For I= 1 to 10
20 If A(i) > A(I+1) then SWAP A(i), A(j)
30 next
40 end
Jadi terlihat, jika algoritma tersebut sederhana, maka penyusunan algoritma akan sama dengan penyusunan sebuah program (karena semua perintahnya sudah sesuai dengan kaidah penulisan di bahasa pemrogramannya).
Apakah semuanya akan demikian ?. Tentu saja tidak, misalkan, kita diminta untuk menentukan bilangan terkecil dari seratus buah bilangan yang akan dimasukkan ke komputer, ini masih dapat langsung dibuatkan programnya.
Algoritma (program)nya bisa kita susun sebagai berikut :
1 DIM A(100)
2 FOR M = 1 TO 100
3 INPUT A(M) : NEXT : KECIL = A(1)
4 FOR M = 2 TO 100
5 IF KECIL > A(M) THEN X = KECIL: KECIL = A(M) : A(M) = X
6 NEXT : PRINT KECIL : END
Tetapi, misalkan jika kita diminta untuk mengalihkan notasi infix menjadi postfix melalui stack, hal itu sulit untuk dilakukan.
Algoritmanya bisa menggunakan gabungan kalimat dengan bahasa pemrograman, berikut contoh penggalannya.

Contoh :
1. Asumsi : deretan notasi infix dimasukkan ke dalam sebuah variabel array bernilai string, nama variabelnya D
2. S adalah variabel string untuk menyimpan susunan data di dalam stack
3. H adalah variabel string untuk menyimpan hasil
4. P = banyaknya elemen array
5. For I = 1 to p
If top(s) = empty then {top(s) adalah posisi atas stack)
     if D(i) = operand then
        H = D(i)
        Else
        S = S + D(i)
        Top(s) = D(i)
      Endif
      Else
  If D(i) = operator then
       If derajat D(i) > derajat Top(s) then
       . . .
     . . .
   . . .
. . .
Jadi, terdapat beberapa kata yang tidak dapat dijabarkan langsung ke dalam bahasa pemrograman. Misalkan, kata Top(s), empty, operand, operator, dan derajat.

PERLUNYA PROSEDUR
Toh akhirnya, kita tidak akan mungkin hanya membuat algoritmanya saja melainkan dilanjutkan ke pembuatan programnya. Karenanya, algoritma sebaiknya dibuat sedemikian rupa agar setiap perintah yang ada di dalamnya dapat diaplikasikan langsung ke dalam bahasa pemrograman.
Itulah perlunya prosedur. Misalkan kata “operand” di algoritma di atas yang tidak dapat langsung diaplikasikan di dalam bahasa pemrogramannya, kita buat saja prosedur dari algoritma tersebut yang mendefinisikan apa itu “operand.” Misalkan :
1 Procedure OPERAND
2 IF ASC(D(I)) > 64 AND ASC(D(I)) < 91 THEN OP = .T. ELSE OP = .F.
3 RETURN
Sehingga, di algoritma utamanya bisa diubah dari :
If top(s) = empty then                  {top(s) adalah posisi atas stack)
   if D(i) = operand then
      H = D(i)
menjadi :

If top(s) = empty then                  {top(s) adalah posisi atas stack)
    Do Procedure OPERAND
    IF op = .t.
       H = D(i)

PERLUNYA STANDAR PENGGUNAAN PERINTAH BAHASA PEMROGRAMAN
Sulit memang membuat standardisasi penggunaan perintah bahasa pemrograman di sebuah algoritma. Sulit karena ada yang hanya memahami satu bahasa pemrogrman saja sehingga ia tak mau menggunakan perintah di bahasa pemrograman lain.
Namun, itu sebatas cara penulisan saja, misalkan di BASIC A = 10, di Pascal berlaku A := 10, namun untuk perintah looping, umumnya memiliki alur logika yang sama, yaitu dalam penggunaan FOR-NEXT, REPEAT-UNTIL, DO WHILEENDDO, WHILE-WEND, dan sebagainya.
Jadi, meskipun tidak ada standar yang pasti, paling-paling hanya berbeda cara penulisannya saja, namun sama dalam alur logikanya. Jadi, ternyata, standardisasi semacam ini tidak diperlukan.

(Sumber, ALGORITMA PEMROGRAMAN Bambang Wahyudi,Skom.,MMSI)

Thursday

FLOWCHART

Flowchart adalah penggambaran secara grafik dari langkah-langkah dan urut-urutan prosedur dari suatu program. Flowchart menolong analis dan programmer untuk memecahkan masalah kedalam segmen-segmen yang lebih kecil dan menolong dalam menganalisis alternatif-alternatif lain dalam pengoperasian.
Flowchart biasanya mempermudah penyelesaian suatu masalah khususnya masalah yang perlu dipelajari dan dievaluasi lebih lanjut.

PEDOMAN-PEDOMAN DALAM MEMBUAT FLOWCHART
Bila seorang analis dan programmer akan membuat flowchart, ada beberapa petunjuk yang harus diperhatikan, seperti :
  • Flowchart digambarkan dari halaman atas ke bawah dan dari kiri ke kanan.
  • Aktivitas yang digambarkan harus didefinisikan secara hati-hati dan definisi ini harus dapat dimengerti oleh pembacanya.
  • Kapan aktivitas dimulai dan berakhir harus ditentukan secara jelas.
  • Setiap langkah dari aktivitas harus diuraikan dengan menggunakan deskripsi kata kerja, misalkan MENGHITUNG PAJAK PENJUALAN.
  • Setiap langkah dari aktivitas harus berada pada urutan yang benar.
  • Lingkup dan range dari aktifitas yang sedang digambarkan harus ditelusuri dengan hati-hati. Percabangan-percabangan yang memotong aktivitas yang sedang digambarkan tidak perlu digambarkan pada flowchart yang sama. Simbol konektor harus digunakan dan percabangannya diletakan pada halaman yang terpisah atau hilangkan seluruhnya bila percabangannya tidak berkaitan dengan sistem.
  • Gunakan simbol-simbol flowchart yang standar.

JENIS-JENIS FLOWCHART
Flowchart terbagi atas lima jenis, yaitu :
  1. Flowchart Sistem (System Flowchart)
  2. Flowchart Paperwork / Flowchart Dokumen (Document Flowchart)
  3. Flowchart Skematik (Schematic Flowchart)
  4. Flowchart Program (Program Flowchart)
  5. Flowchart Proses (Process Flowchart)

FLOWCHART PROSES

 Flowchart Proses merupakan teknik penggambaran rekayasa industrial yang memecah dan menganalisis langkah-langkah selanjutnya dalam suatu prosedur atau sistem.


FLOWCHART PROGRAM

Flowchart Program dihasilkan dari Flowchart Sistem.
Flowchart Program merupakan keterangan yang lebih rinci tentang bagaimana setiap langkah program atau prosedur sesungguhnya dilaksanakan. Flowchart ini menunjukkan setiap langkah program atau prosedur dalam urutan yang tepat saat terjadi.
Programmer menggunakan flowchart program untuk menggambarkan urutan instruksi dari program komputer.
Analis Sistem menggunakan flowchart program untuk menggambarkan urutan tugas-tugas pekerjaan dalam suatu prosedur atau operasi.

FLOWCHART SKEMATIK

Flowchart Skematik mirip dengan Flowchart Sistem yang menggambarkan suatu sistem atau prosedur. Flowchart Skematik ini bukan hanya menggunakan simbol-simbol flowchart standar, tetapi juga menggunakan gambar-gambar komputer, peripheral, form-form atau peralatan lain yang digunakan dalam sistem.
Flowchart Skematik digunakan sebagai alat komunikasi antara analis sistem dengan seseorang yang tidak familiar dengan simbol-simbol flowchart yang konvensional. Pemakaian gambar sebagai ganti dari simbol-simbol flowchart akan menghemat waktu yang dibutuhkan oleh seseorang untuk mempelajari simbol abstrak sebelum dapat mengerti flowchart.
Gambar-gambar ini mengurangi kemungkinan salah pengertian tentang sistem, hal ini disebabkan oleh ketidak-mengertian tentang simbol-simbol yang digunakan. Gambar-gambar juga memudahkan pengamat untuk mengerti segala sesuatu yang dimaksudkan oleh analis, sehingga hasilnya lebih menyenangkan dan tanpa ada salah pengertian.

FLOWCHART PAPERWORK

Flowchart Paperwork menelusuri alur dari data yang ditulis melalui sistem.
Flowchart Paperwork sering disebut juga dengan Flowchart Dokumen.
Kegunaan utamanya adalah untuk menelusuri alur form dan laporan sistem dari satu bagian ke bagian lain baik bagaimana alur form dan laporan diproses, dicatat dan disimpan.



Gambar 2. menggambarkan suatu contoh flowchart ini mengenai alur pembuatan kartu anggota untuk suatu perpustakaan.

FLOWCHART SISTEM

Flowchart Sistem merupakan bagan yang menunjukkan alur kerja atau apa yang sedang dikerjakan di dalam sistem secara keseluruhan dan menjelaskan urutan dari prosedur-prosedur yang ada di dalam sistem. Dengan kata lain, flowchart ini merupakan deskripsi secara grafik dari
urutan prosedur-prosedur yang terkombinasi yang membentuk suatu sistem.
Flowchart Sistem terdiri dari data yang mengalir melalui sistem dan proses yang mentransformasikan data itu. Data dan proses dalam flowchart sistem dapat digambarkan secara online (dihubungkan langsung dengan komputer) atau offline (tidak dihubungkan langsung dengan komputer, misalnya mesin tik, cash register atau kalkulator).

Contoh sederhana untuk flowchart sistem dapat dilihat pada Gambar 1. berikut ini :

ABOUT ALGORITMA

Dalam matematika dan komputasi, algoritma atau algoritme merupakan kumpulan perintah untuk menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma. Algoritma akan dapat selalu berakhir untuk semua kondisi awal yang memenuhi kriteria, dalam hal ini berbeda dengan heuristik. Algoritma sering mempunyai langkah pengulangan (iterasi) atau memerlukan keputusan (logika Boolean dan perbandingan) sampai tugasnya selesai.

Desain dan analisis algoritma adalah suatu cabang khusus dalam ilmu komputer yang mempelajari karakteristik dan performa dari suatu algoritma dalam menyelesaikan masalah, terlepas dari implementasi algoritma tersebut. Dalam cabang disiplin ini algoritma dipelajari secara abstrak, terlepas dari sistem komputer atau bahasa pemrograman yang digunakan. Algoritma yang berbeda dapat diterapkan pada suatu masalah dengan kriteria yang sama.

Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi yang dibutuhkan algoritma tersebut untuk menyelesaikan masalah. Secara informal, algoritma yang dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk menyelesaikan masalahnya mempunyai kompleksitas yang tinggi.

Kata algoritma berasal dari latinisasi nama seorang ahli matematika dari Uzbekistan Al Khawārizmi (hidup sekitar abad ke-9), sebagaimana tercantum pada terjemahan karyanya dalam bahasa latin dari abad ke-12 "Algorithmi de numero Indorum". Pada awalnya kata algorisma adalah istilah yang merujuk kepada aturan-aturan aritmetis untuk menyelesaikan persoalan dengan menggunakan bilangan numerik arab (sebenarnya dari India, seperti tertulis pada judul di atas). Pada abad ke-18, istilah ini berkembang menjadi algoritma, yang mencakup semua prosedur atau urutan langkah yang jelas dan diperlukan untuk menyelesaikan suatu permasalahan. Masalah timbul pada saat akan menuangkan bagaimana proses yang harus dilalui dalam suatu/sebuah sistem (program) bagi komputer sehingga pada saat eksekusinya, komputer dapat bekerja seperti yang diharapkan. Programer komputer akan lebih nyaman menuangkan prosedur komputasinya atau urutan langkah proses dengan terlebih dahulu membuat gambaran (diagram alur) diatas kertas.

Terdapat beragam klasifikasi algoritma dan setiap klasifikasi mempunyai alasan tersendiri. Salah satu cara untuk melakukan klasifikasi jenis-jenis algoritma adalah dengan memperhatikan paradigma dan metode yang digunakan untuk mendesain algoritma tersebut. Beberapa paradigma yang digunakan dalam menyusun suatu algoritma akan dipaparkan dibagian ini. Masing-masing paradigma dapat digunakan dalam banyak algoritma yang berbeda.

  • Divide and Conquer, paradigma untuk membagi suatu permasalahan besar menjadi permasalahan-permasalahan yang lebih kecil. Pembagian masalah ini dilakukan terus menerus sampai ditemukan bagian masalah kecil yang mudah untuk dipecahkan. Singkatnya menyelesaikan keseluruhan masalah dengan membagi masalah besar dan kemudian memecahkan permasalahan-permasalahan kecil yang terbentuk.
  • Dynamic programming, paradigma pemrograman dinamik akan sesuai jika digunakan pada suatu masalah yang mengandung sub-struktur yang optimal (, dan mengandung beberapa bagian permasalahan yang tumpang tindih . Paradigma ini sekilas terlihat mirip dengan paradigma Divide and Conquer, sama-sama mencoba untuk membagi permasalahan menjadi sub permasalahan yang lebih kecil, tapi secara intrinsik ada perbedaan dari karakter permasalahan yang dihadapi.
  • Metode serakah. Sebuah algoritma serakah mirip dengan sebuah Pemrograman dinamik, bedanya jawaban dari submasalah tidak perlu diketahui dalam setiap tahap; dan menggunakan pilihan "serakah" apa yang dilihat terbaik pada saat itu.
(Sumber)