You are on page 1of 18

Sejarah

Program, pemrograman dan algoritma adalah bagian fundamental dari Computer science. Computer science sudah muncul sejak 1940, seiring dengan berpadunya teori algoritma dan logika matematika, serta ditemukannya komputer elektronik dengan kemampuan penyimpanan program. Alan Turing dan Kurt Godel pada tahun 1930-an berhasil memadukan algoritma, logika, dan penghitungan matematika serta merealisasikannya dalam sebuah alat atau rule system. Prinsip algoritma yang digunakan adalah dari algoritma Ada yg ditemukan oleh Ada Lovelace, yang dikembangkan 60 tahun sebelumnya.

Penemu algoritma bernama Abu Abdullah Muhammad Ibn Musa al Khwarizmi. Al Khwarizmi adalah seorang ahli matematika dari Uzbekistan yang hidup tahun 770-840 Masehi. Dalam literatur barat ia dikenal dengan nama Algorizm. Kata algoritma sendiri berasal dari sebutannya ini. Sedangkan komputer analog diciptakan oleh Vannevar Bush pada tahun 1920, dan disusul dengan komputer elektronik yang dikembangkan oleh Howard Aiken dan Konrad Zuse tahun 1930.

John Von Neumann mendemonstrasikan salah satu karya fenomenalnya pada tahun 1945, yaitu sebuah arsitektur komputer yang disebut "von Neumann machine", dimana program disimpan di memori. Arsitektur komputer inilah yang kemudian digunakan oleh komputer modern sampai sekarang. Pada tahun 1960 adalah babak baru dimulainya formalisasi Computer Science, sehingga Jurusan Ilmu Komputer pada universitas-universitas mulai marak dibangun. Disiplin ilmu baru ini kemudian terkenal dengan sebutan Ilmu Komputer (Computer Science), Teknik Komputer (Computer Engineering), Komputing (Computing), atau Informatika (Informatics). Definisi Computer Science Dengan berkembangnya Ilmu Komputer, dewasa ini banyak sekali peneliti yang mencoba membuat kajian dan melakukan pendefinisian terhadap Ilmu Komputer. Bagaimanapun juga, dasar Ilmu Komputer adalah matematika dan engineering (teknik). Matematika menyumbangkan metode analisa, dan engineering menyumbangkan metode desain pada bidang ini. CSAB [3] (Computing Sciences Accreditation Board, http://www.csab.org) membuat definisi menarik tentang Ilmu Komputer: Ilmu Komputer adalah ilmu pengetahuan yang berhubungan dengan komputer dan komputasi. Di dalamnya terdapat teoritika, eksperimen, dan pendesainan komponen, serta termasuk

didalamnya hal-hal yang berhubungan dengan: 1. Teori-teori untuk memahami komputer device, program, dan sistem 2. Eksperimen untuk pengembangan dan pengetesan konsep 3. Metodologi desain, algoritma, dan tool untuk merealisasikannya 4. Metode analisa untuk melakukan pembuktian bahwa realisasi sudah sesuai dengan requirement yang diminta

Denning mendefinisikan Ilmu Komputer dalam makalahnya yang cukup terkenal tentang disiplin ilmu komputer [1]. Makalah ini adalah laporan akhir dari proyek dan task force tentang the Core of Computer Science yang dibentuk oleh dua society ilmiah terbesar bidang komputer, yaitu ACM [4] (http://acm.org) dan IEEE Computer Society [5] (http://computer.org).

Ilmu Komputer adalah studi sistematik tentang proses algoritmik yang mengjelaskan dan mentrasformasikan informasi: baik itu berhubungan

dengan teori-teori, analisa, desain, efisiensi, implementasi, ataupun aplikasi-aplikasi yang ada padanya. Pertanyaan mendasar berhubungan dengan Ilmu Komputer adalah, "Apa yang bisa diotomatisasikan secara efisien". Sehingga dapat disimpulkan dari persamaan pemakaian terminologi dan hakekat makna dalam definisi yang digunakan para peneliti diatas, bahwa: Computer science adalah ilmu pengetahuan yang berisi tentang teori, metodologi, desain dan implementasi, berhubungan dengan komputasi, komputer, dan algoritmanya dalam perspektif perangkat lunak (software) maupun perangkat keras (hardware), sehingga algoritma, program dan pemrograman adalah bagian fundamental yg ada didalamnya.

Definisi Algoritma Algoritma adalah logika, metode dan tahapan (urutan) sistematis yang digunakan untuk memecahkan suatu permasalahan. Menurut kamus besar bahasa Indonesia (Balai Pustaka 1988): Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah. Beda Algoritma dan Program Program adalah kompulan instruksi komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ini ditulis dengan menggunakan bahasa pemrograman. Jadi bisa kita sebut bahwa program adalah suatu implementasi dari bahasa pemrograman. Beberapa pakar memberi formula bahwa: program = struktur data + algoritma

Bagaimanapun juga struktur data dan algoritma berhubungan sangat erat pada sebuah program. Algoritma yang baik tanpa pemilihan struktur data yang tepat akan membuat program menjadi kurang baik, semikian juga sebaliknya. Struktur data disini bisa berupa list, tree, graph, dsb. Menilai Sebuah Algoritma Ketika manusia berusaha memecahkan masalah, metode atau teknik yang digunakan untuk memecahkan masalah itu ada kemungkinan bisa banyak (tidak hanya satu). Dan kita memilih mana yang terbaik diantara teknik-teknik itu. Hal ini sama juga dengan algoritma, yang memungkinkan suatu permasalahan dipecahkan dengan metode dan logika yang berlainan. Lalu bagaimana mengukur mana algoritma yang terbaik ? Beberapa persyaratan untuk menjadi algoritma yang baik adalah: Tingkat kepercayaannya tinggi (realibility). Hasil yang diperoleh dari proses harus berakurasi tinggi dan benar. Pemrosesan yang efisien (cost rendah). Proses harus diselesaikan secepat mungkin dan frekuensi kalkulasi yang sependek mungkin. Sifatnya general. Bukan sesuatu yang hanya untuk menyelesaikan satu kasus saja, tapi juga untuk kasus lain yang lebih general. Bisa Dikembangkan (expandable). Haruslah sesuatu yang dapat kita kembangkan lebih jauh berdasarkan perubahan requirement yang ada. Mudah dimengerti. Siapapun yang melihat, dia akan bisa memahami algoritma anda. Susah dimengertinya suatu program akan membuat susah di maintenance (kelola). Portabilitas yang tinggi (Portability). Bisa dengan mudah diimplementasikan di berbagai platform komputer.

Contoh Algoritma dan Implementasinya Sebagai contoh sederhana, mari permasalahan, mencoba menyusun implementasikan dalam bahasa C. Contoh Permasalahan 1) Seorang guru yang ingin membuat rangking dari nilai ujian 9 orang muridnya. Nilai ujian murid-muridnya adalah sebagai berikut: 56 78 43 96 67 83 51 74 32 Bagaimana algoritma dalam pembuatan rangking nilai tersebut ? Untuk memecahkan masalah diatas, kita bisa susun algoritma seperti dibawah: 1. 2. 3. 4. Buat satu variable (misalnya rangking) Set variable rangking = 1 Ambil satu nilai sebagai data yang ke a, misalnya 56 Chek nilai dari paling depan (56) sampai paling belakang (32) (b=0-8). Apabila nilai tersebut lebih tinggi daripada nilai ke a (56), maka set variable rangking = ranking + 1. 5. Ulangi proses nomor 2 dengan mengambil data ke (a) berikutnya. kita berlatih melihat algoritma, dan meng-

Kemudian mari kita implementasikan algoritma diatas dalam program bahasa C. Listing Program/Source code: Rangking Nilai Ujian #include <stdio.h> #define banyaknya_nilai 9 main(){ static int nilai[]={56, 78, 43, 96, 67, 83, 51, 74, 32}; int rangking[banyaknya_nilai]; int a,b; for (a=0;a<banyaknya_nilai;a++){ rangking[a]=1; for (b=0;b<banyaknya_nilai;b++){ if (nilai[a]>nilai[b]) rangking[a]++; } } printf("Nilai Ujian \t Rangking\n"); for (a=0;a<banyaknya_nilai;a++){ printf("%d \t\t %d\n",nilai[a], rangking[a]); } } Hasil Nilai Ujian 56 78 43 96 67 83 51 74 32 Rangking 4 7 2 9 5 8 3 6 1

2) Konversi Basis Bilangan Biasanya dalam berinteraksi dalam dunia nyata , kita menggunakan bilangan dengan basis 10 (Desimal) sebagai perantaranya. Tapi karena satu dan lain hal kita perlu juga menggunakan basis bilangan lain . Dalam dunia digital misalnya. Ukuran terkecil untuk menyatakan satuan data dalam dunia digital ialah bit. 1 Bit terdiri dari 2 buah keadaan yaitu 1 atau 0 , low atau high dsbnya. Mengingat pentingnya proses konversi tersebut maka kali ini kita akan membahas cara mengkonversi bilangan dengan basis dasar 10 menjadi bilangan dengan basis 2 sampai 16. Dan dengan algoritma yang sama anda bisa kembangkan sendiri untuk mengkonversi sampai basis ke N. Kita akan menggunakan Metode rekursif untuk pembentukan algoritmanya. Metode Konvensional Oke sebelum menginjak kepada metode konvensional , ada beberapa hal yang perlu kita ketahui. Maksud dari basis bilangan 10 ialah karakter bilangan yang tersedia ialah dari 0 sampai dengan 9 . maksud dari basis bilangan 2 , karakter yang tersedia ialah dari 0 sampai 1 . Nah bagaimana dengan basis yang lebih besar dari 10 ? . Jika basis lebih besar dari 10 digunakan karakter abjad . Misalkan basis 16 . Maka karakter bilangan yang tersedia yaitu dari 0 .. 9 , A , B,C,D,E,F. Begitu seterusnya untuk bilangan diatas basis 10. Dibawah ini ialah salah satu metode konvensional untuk merubah bilangan dengan basis dasar 10 ke basis lainnya; Misalkan kita ingin mencari berapakah nilai bilangan 10 dalam basis 10 jika di konversi ke basis 2 (biner) . Untuk itu perhatikan gambar berikut 10 5 2 1 0 sisa sisa sisa sisa 0 1 0 1

Pada gambar tersebut didapat bahwa 10(10) = 1010 (2)

Algoritma pada gambar 1 dapat dijelaskan sebagai berikut . Nilai 10 kita bagi dengan basis tujuan yang kita mau (dalam hal ini 2 ) maka akan dihasilkan 5 , dengan sisa 0 . Kemudian 5 kita kembali bagi dengan basis yang kita tuju , sehingga 5 dibagi dengan 2 . Maka akan didapat 2 dengan sisa 1 begitu seterusnya. Langkah ini diulangan terus sampai hasil dari pembagian ialah 0 . Hasil konversinya didapat dari merunut sisa hasil pembagian dari yang paling bawah ke atas ( lihat gambar ) Dari gambar diperoleh 1010 sebagai hasil. Listing Program Setelah kita tahu cara metode pengkonversiannya , maka tentunya tidak sulit lagi untuk membuatnya kedalam bahasa pemrograman C. Berikut ialah listing program dg Bahasa C : #include <stdio.h> char ch[17] = "0123456789ABCDEF"; void CetakBaseN(int base,int nilai) { if (nilai == 0) //jika nilai sudah 0 maka keluar return; CetakBaseN(base,nilai / base); printf("%c",ch[nilai % base]); } void main(void) { CetakBaseN(2,255); printf("\n"); CetakBaseN(8,255); printf("\n"); CetakBaseN(10,255); printf("\n"); CetakBaseN(16,255); printf("\n"); }

Algoritma dengan Flowchart/bagan aliran Flowchart adalah skema/bagan (chart) yg menunjukkan aliran (flow) di dalam suatu program secara logika.

Beberapa symbol penting pada Flowchart Notasi Symbol Flowchart Arti Notasi Terminator: untukmenunjukkan awal dan akhir suatu algoritma Data: untukmewakili data input atau output. Atau berarti juga untukmenyatakan operasi pemasukkan data dan pencetakan hasil Process: mewakili suatu proses Decision: Sbg penyeleksian, pemilihan kondisi pd suatu program Preparation: untuk member nilai awal,nilai akhir, penambahan, pengurangan, utk variable counter. Predefined Process:suatu operasi yg rinciannya ditunjukkan ditempat lain (prosedur, subprosedur, fungsi) Connector: Sambungan flowchart dihalaman yg sama/halaman berikutnya. Arrow: menunjukkan arus data atau aliran data dari proses satu ke proses lain.

Contoh kasus: Buatlah algoritma dalam bentuk flowchart untuk permasalahan di bawah ini: 1) "Inputkan umur Budi dan Heru, tentukan selisih umur mereka dan tampilkan diantara mereka yang lebih tua."

Gambar Algoritma Flowchart selisih umur budi & heru

Dibawah ini adalah script pemrograman diatas. #include <stdio.h> main () { int umur_budi; int umur_heru; int selisih; clrscr (); printf ("inputkan umur budi:"); scanf ("%d", &umur_budi); printf ("inputkan umur heru:"); scanf ("%d", &umur_heru); if (umur_budi>umur_heru) { printf ("\nbudi paling tua"); selisih = umur_budi - umur_heru; printf ("\nselisih umur mereka = %d", selisih); } else { printf ("\nheru paling tua"); selisih = umur_heru - umur_budi; printf ("\nselisih umur mereka = %d", selisih); } getch (); }

Sekarang kita bisa mengcompile program tersebut. Berikut ini keterangan dari program diatas. #include <stdio.h> Script diatas bertujuan untuk mengundang library standard input output dari Turbo C. int umur_budi; int umur_heru; int selisih; Script diatas menggunakan integer sebagai tipe data "umur_budi, umur_heru, selisih". Saya menggunakan integer karena dia memiliki range antara -32768 ... 32767. printf ("inputkan umur budi:"); scanf ("%d", &umur_budi); Fungsi "printf ()" merupakan fungsi yang paling umum digunakan dalam menampilkan data . Fungsi "scanf ()" berguna untuk membaca input yang telah diberikan dan tersimpan pada variabel umur_budi.

if (umur_budi>umur_heru) { printf ("\nbudi paling tua"); selisih = umur_budi - umur_heru; printf ("\nselisih umur mereka = %d", selisih); } else { printf ("\nheru paling tua"); selisih = umur_heru - umur_budi; printf ("\nselisih umur mereka = %d", selisih); } Script diatas dapat diartikan sebagai berikut jika umur budi lebih besar dari umur heru maka program akan menapilkan "umur budi paling tua". Perintah lain program akan menghitung selisih umur mereka "selisih = umur_budi - umur_heru" lalu menampikan dengan fungsi printf. Jika umur_budi tidak lebih besar dari umur heru maka program akan menampikan " heru paling tua" dan "selisih umur mereka". Berikut ini tampilan screenshoot program yang dijalankan di Turbo C.

2)

Buatlah Flowchart untuk algoritma Luas segitiga

Mulai

Read alas, tinggi

Luas = 0.5*alas*tinggi

Print Luas

Selesai

Listing Program Luas Segitiga dengan Turbo C Cara yang paling ampuh untuk belajar pemrograman adalah praktek. Berikut script pemrograman Luas segitiga. #include <stdio.h> #include <math.h> main () { float sisi1; float sisi2;

float float float float float float float

sisi3; s; l; luas; x; p; t;

clrscr (); printf ("Inputkan sisi pertama:"); scanf ("%f", &sisi1); printf ("Inputkan sisi kedua :"); scanf ("%f", &sisi2); printf ("Inputkan sisi ketiga :"); scanf ("%f", &sisi3); textcolor(2); if(sisi1==0 || sisi2==0 || sisi3==0) { cprintf ("bukan segitiga"); } else if (sisi1==sisi2 && sisi1==sisi3 && sisi2==sisi3) { cprintf ("segitiga sama sisi"); luas = sisi1 * sisi2 * sisi3 / 4 * sqrt (3); cprintf ("luas segitiga %f satuan", luas); } else if(sisi1!=sisi2 && sisi2!=sisi3 && sisi1!=sisi3) { cprintf ("segitiga sembarang"); s = 0.5 * (sisi1 + sisi2 + sisi3); p = (s * (s - sisi1) * (s - sisi2) * (s - sisi3)); if (p<=0) { l = p * (-1); } else { l = p;

} luas = sqrt (l); cprintf ("luas segitiga %f satuan", luas); } else { cprintf ("segitiga sama kaki"); if (sisi1==sisi2) { p = sisi1/2; x = pow (sisi2,2) - pow (p,2); if (x<=0) { s = x * (-1); } else { s = x; } t = sqrt (s); cprintf ("luas segitiga %f satuan", t); } else if (sisi1==sisi3) { p = sisi2/2; x = pow (sisi1,2) - pow (p,2); if (x<=0) { s = x * (1); } else { s = x; } t = sqrt (s); cprintf ("luas segitiga %f satuan", t); } else if (sisi2==sisi3) { p = sisi1/2; x = pow (sisi2,2) - pow (p,2); if (x<=0) { s = x * (-1); } else { s = x; } t = sqrt (s); cprintf ("luas segitiga %f satuan", t); } } getch (); } Hasil screenshoot program tersebut adalah sebagai berikut.

File bisa didownload:


http://www.ziddu.com/download/14478381/pascal.zip.html http://www.ziddu.com/download/14478659/TurboC.zip.html

Tugas 1 1) Buat makalah dengan tema bahasa pemrograman (selain bahasa C), minimal 15 halaman. 2) Buat Algoritma untuk: a) Menentukan deret bilangan prima b) Menukar dua nilai bilangan c) Menghitung sepuluh bilangan d) Menentukan FPB dari 2 bilangan e) Flowchart algoritma Menjumlahkan dua bilangan bulat f) Flowchart algoritma Mahasiswa sukses Tugas dikirim via email ke herman_bizzz@yahoo.com (wajib pake email sendiri dan tidak diwakilkan, setelah itu absen tugas di asisten dengan mencantumkan alamat email)

You might also like