4. Flowchart.
Contoh 1 Output: Layar komputer menampilkan bilangan dari 1 sampai dengan 100, kecuali bilangan yang merupakan kelipatan 5. Jika dinyatakan dengan bahasa biasa, salah satu algoritma untuk menghasilkan output tersebut adalah sebagai berikut: 1. Menentukan bahwa nilai sebuah variabel adalah 1.
2. Jika nilai variabel tersebut tidak habis dibagi 5, maka tampilkan nilai variabel
pada layar komputer. 3. Menambah nilai variabel tersebut dengan 1.
4. Jika nilai variabel tersebut lebih besar dari 100, maka akhiri program.
5. Kembali ke langkah 2. Jika dinyatakan dengan menggunakan pseudocode (notasi algoritma) [RIN05], maka algoritmanya adalah: PROGRAM Menampilkan_1_sampai_100_Kecuali_Kelipatan_5 DEKLARASI i : integer ALGORITMA i1 repeat if (i mod 5 0) then write(i) endif ii+1 until i > 100 PUSAT PENGMBANGAN BAHAN AJAR UMB Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I
Jika dinyatakan dengan menggunakan kode program Pascal, maka algoritma di atas akan berbentuk: program bilangan_1_sampai_100_kecuali_kelipatan_5; var i : integer; begin i := 1; repeat if (i mod 5 <> 0) then writeln(i); i := i + 1; until (i>100); end.
Jika dinyatakan dengan menggunakan kode program C, maka algoritma di atas akan berbentuk: #include <stdio.h> void main(){ int i=1; do { if (i%5!=0) printf("%d\n",i); i++; } while (i<=100); } Jika digambarkan dengan flowchart, maka algoritma di atas akan terlihat seperti: Start
i=1
True
i mod 5 <> 0
False
write i
i = i+i
False
i> 100
True End
SIFAT-SIFAT ALGORITMA Perhatikan bahwa dalam algoritma di atas, seperti juga dalam semua algoritma lainnya, terdapat beberapa ciri yang bisa ditemukan, yaitu:
2. Tidak terdapat satu pun langkah dalam algoritma di atas yang mengandung
kekaburan/ketidakjelasan (ambiguity). Contoh pernyataan yang bersifat kabur adalah "jika variabel tersebut merupakan kelipatan dari bilangan tertentu, maka tampilkan pada layar komputer". Kata tertentu mengandung banyak arti dan kabur.
a.
"Jika variabel tersebut lebih besar dari 100, maka akhiri program"
TIPE DATA DALAM BAHASA C Data type menentukan tipe atau jenis dari data serta rentang nilai (range) yang boleh dipergunakan dalam sebuah bahasa pemrograman. Dalam bahasa C, terdapat 3 kelompok tipe data [BOR88]:
mencetak nilai variabel bertipe ini ke layar dibutuhkan format "%u". signed long int atau long int atau long: -2 milyar s/d 2 milyar
(4 byte). Untuk mencetak nilai variabel bertipe ini ke layar dibutuhkan format "%ld". Untuk menyatakan bahwa sebuah konstanta bilangan sebagai konstanta long, di belakangnya ditambahkan huruf "L". Misalnya, untuk mencetak ke layar hasil perhitungan 2500 dikali 4000 (yang hasil akhirnya harus ditampung dalam 4 byte atau tipe long int), dapat dipergunakan instruksi: printf("%ld",2500L*4000); Jika instruksinya tidak menyertakan L sesudah angka 2500, hasil perhitungannya akan salah, karena komputer hanya menyediakan tempat sebanyak 2 byte (tipe int) untuk menampung hasil perhitungan.
d.
Untuk mencetak nilai variabel bertipe ini ke layar dibutuhkan format "%lu". Untuk menyatakan sebuah konstanta bilangan sebagai konstanta unsigned long, di belakangnya ditambahkan huruf "UL". Misalnya untuk mencetak ke layar hasil perhitungan 1.000 1000 4 (hasil akhirnya harus ditampung dalam tipe unsigned long), maka instruksi yang dapat dipergunakan adalah: printf("%lu",1000UL*1000*4);
e.
"%hd".
signed short int atau short int atau short: -128 s/d 127 (1
byte). Untuk mencetak nilai variabel bertipe ini ke layar dibutuhkan format
f.
Untuk mencetak nilai variabel bertipe ini ke layar dibutuhkan format "%hu".
a.
float: 3.4E-38 s/d 3.4E+38 atau 3,4 10-38 s/d 3,4 1038 (4 byte,
ketelitian 8 digit). Untuk mencetak variabel bertipe ini ke layar dibutuhkan format "%f".
b. c.
mencetak variabel bertipe ini ke layar dibutuhkan format "%f". long double: 3.4E-4932 s/d 1.1E+4932 (10 byte, ketelitian 18 digit).
Untuk mencetak nilai variabel bertipe ini ke layar dibutuhkan format "%Lf". Untuk menyatakan sebuah bilangan sebagai konstanta long double, di belakangnya ditambahkan huruf "L".
b.
Ketelitian (precision) dalam bilangan real/floating point adalah jumlah digit yang bisa ditangani oleh komputer tanpa melakukan pembulatan. Misalnya, ketelitian 8 digit berarti komputer bisa menangani bilangan 0,00000001 s/d 99.999.999 tanpa melakukan pembulatan atau kesalahan dalam perhitungan. Misalnya, komputer bisa menangani bilangan 99.999,999 dengan baik tetapi tidak bisa menangani 99.999,9999 dengan baik. Dengan demikian, jika seorang pemrogram ingin membuat aplikasi untuk mencatat gaji pegawai sebuah perusahaan kecil, tipe data yang bisa digunakan adalah unsigned long int, karena jumlah keseluruhan gaji pegawai biasanya tidak lebih dari 4 milyar rupiah dan kemungkinan besar bilangannya adalah bilangan bulat. Tetapi untuk aplikasi perbankan, paling tidak dibutuhkan tipe data unsigned double, karena selain jumlah uang yang harus ditangai besar, aplikasi perbankan juga harus melakukan perhitungan bunga, yang kebanyakan bernilai pecahan. Pemahaman yang baik tentang tipe data juga harus dimiliki oleh seorang pemrogram untuk menghindari terjadinya kesalahan atau kerancuan dalam program yang dibuatnya. Perhatikan program C di bawah ini. Tidak seperti yang kita harapkan, loop dalam program ini tidak akan pernah berakhir. Mengapa demikian?
/* Program dengan loop tanpa akhir */ #include <stdio.h> void main(){ unsigned int i; for (i=1;i<=65535;i++) printf("%u\n",i); } Untuk menjawab permasalahan ini, terlebih dahulu harus dipahami beberapa istilah berikut ini:
1. BIT (binary digit) adalah satuan informasi terkecil yang ditangani oleh
komputer dan hanya bisa terdiri dari 2 nilai, yaitu 0 dan 1 atau FALSE dan TRUE.
2. BYTE adalah sebuah unit data yang bisa menampung sebuah karakter,
sebuah angka atau tanda baca. Satu byte terdiri dari 8 bit, sehingga nilai yang bisa ditampung 1 byte adalah 00000000 s/d 11111111 dalam bilangan binary (biner) atau 00 s/d FF dalam hexadecimal atau 0 s/d 255 dalam desimal. Sebuah alamat dalam memori komputer PC bisa menampung nilai sebesar 1 byte. Untuk menyimpan nilai lebih besar dari 255, komputer membutuhkan 2 alamat memori. Misalnya, nilai 256 disimpan dengan mengisi nilai 0 dalam alamat memori pertama dan nilai 1 dalam alamat memori kedua. Sedangkan nilai 257 disimpan dengan mengisi nilai 1 dalam alamat memori pertama dan 1 pada alamat memori kedua. Dalam gambar berikut ini, diilustrasikan nilai 255, 256 dan 257 yang disimpan dalam 2 alamat memori:
255
Dalam loop pada program di atas, yang akan menyebabkan loop berhenti adalah jika variabel i sudah lebih besar dari 65535. Padahal, meskipun variabel i terusmenerus ditambah dengan 1, nilainya tidak akan pernah lebih besar dari 65535. Mengapa demikian? Karena variabel i bertipe unsigned int, sehingga nilai Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I
terbesar yang bisa ditampungnya adalah 65535. Kalau nilai variabel i sudah 65535 dan ditambah lagi dengan satu, maka nilainya akan menjadi 0. Akibatnya, kondisi yang diperiksa di awal loop akan selalu dipenuhi, sehingga loop akan terus berputar tanpa henti. Agar program tersebut bisa menampilkan bilangan dari 1 s/d 65535, maka variabel i harus ditentukan paling tidak sebagai variabel bertipe long int.
Perhatikan juga kerancuan yang disebabkan jika berbagai tipe data dikombinasikan dalam program berikut ini: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* kombinasi tipe data yang menyebabkan kerancuan */ #include <stdio.h> void main(){ long hasil; int op1,op2; unsigned op3,op4; op1=1000; op2=250; hasil=op1*op2; printf("op1*op2=%ld\n",hasil); hasil=(long)op1*op2; printf("(long)op1*op2=%ld\n",hasil); hasil=(long)-op1*op2; printf("(long)-op1*op2=%ld\n",hasil); op3=1000; op4=250; hasil=(long)-op3*op4; printf("(long)-op3*op4:%ld\n",hasil); hasil=(long)-(long)op3*op4; printf("(long)-(long)op3*op4:%ld\n",hasil); }
Keluaran dari program ini adalah: op1*op2=-12144 (long)op1*op2=250000 (long)-op1*op2=-250000 (long)-op3*op4:1635900 (long)-(long)op3*op4:-250000 Dalam program di atas, jika hasil perkalian op1 (1000) dan op2 (250) yang bertipe int disimpan dalam variabel hasil yang bertipe long int, maka akan timbul kerancuan, yaitu hasilnya adalah -12144. Masalah ini akan hilang, jika sesudah tanda sama-dengan, disisipkan operator type-casting, yaitu (long). Dengan disisipkannya operator ini, maka komputer akan mengganggap bahwa op1 dan op2 bertipe long, sebelum operasi perkalian dilakukan. Penyisipan operator (long) tidak akan menyelesaikan masalah, jika variabel yang dipergunakan adalah op3 dan op4 yang bertipe unsigned int dan operasi yang dilakukan tidak hanya perkalian antara kedua operator, tetapi juga operasi mengubah tanda minus. Masalah ini baru bisa diatasi jika operator (long) diletakkan di depan operasi perkalian dan juga di depan tanda minus.
REFERENSI [RIN05] [BOR88] Rinaldi Munir. 2005. Algoritma dan Pemrograman dalam Bahasa Pascal dan C. Edisi 3. Buku Pertama. Informatika. Borland International. 1988. Turbo C 2.0 Help. Borland.