Anda di halaman 1dari 9

ALGORITMA DAN PEMROGRAMAN 1

Modul 2 Oleh: Anis Cherid, M.T.I.


NOTASI UNTUK MENYATAKAN ALGORITMA Sebuah algoritma dapat dinyatakan dengan berbagai macam cara, di antaranya dengan menggunakan [RIN05]:

1. Bahasa alami. 2. Pseudocode.


3. Kode program.

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

PUSAT PENGMBANGAN BAHAN AJAR UMB

Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

SIFAT-SIFAT ALGORITMA Perhatikan bahwa dalam algoritma di atas, seperti juga dalam semua algoritma lainnya, terdapat beberapa ciri yang bisa ditemukan, yaitu:

1. Algoritma tersebut menghasilkan output dengan benar. Dalam contoh di atas,


pada layar komputer akan ditampilkan bilangan 1, 2, 3, 4, 6, 7, 8, 9, 11, ..., 94, 96, 97, 98, 99.

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.

3. Algoritma di atas akan berakhir dalam kurun waktu tertentu. Algoritma


tersebut akan berjalan berputar-putar tanpa ada akhir, jika kita lupa menambahkan salah satu dari langkah berikut ini:

a.

"Jika variabel tersebut lebih besar dari 100, maka akhiri program"

b. "Menambah nilai variabel tersebut dengan 1"


Selain ketiga sifat di atas, algoritma sebaiknya juga bersifat efisien. Contoh algoritma yang kurang efisien dibanding algoritma di atas adalah: 1. Menentukan nilai sebuah variabel sama dengan 1. 2. Jika nilai variabel tersebut habis dibagi 5, tampilkan ke layar komputer. 3. Menentukan nilai variabel tersebut sama dengan 2. 4. Jika nilai variabel tersebut habis dibagi 5, tampilkan ke layar komputer. 5. ... ... 196. ... 197. Menentukan nilai variabel tersebut sama dengan 99. 198. Jika nilai variabel tersebut habis dibagi 5, tampilkan ke layar komputer. 199. Menentukan nilai variabel tersebut sama dengan 100. 200. Jika nilai variabel tersebut habis dibagi 5, tampilkan ke layar komputer.

PUSAT PENGMBANGAN BAHAN AJAR UMB

Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

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]:

1. Integer (bilangan bulat). Terdiri dari: a. b. c.


signed int atau int: -32768 s/d 32767 (2 byte). Untuk mencetak unsigned int atau unsigned: 0 s/d 65535 (2 byte). Untuk nilai variabel bertipe ini ke layar dibutuhkan format "%d" atau "%i".

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.

unsigned long int atau unsigned long: 0 s/d 4 milyar (4 byte).

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.

unsigned short int atau unsigned short: 0 s/d 255 (1 byte).

Untuk mencetak nilai variabel bertipe ini ke layar dibutuhkan format "%hu".

2. Real/Floating Point (bilangan yang mempunyai tanda desimal atau bilangan


pecahan). Terdiri dari: PUSAT PENGMBANGAN BAHAN AJAR UMB Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

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.

double: 1.7E-308 s/d 1.7E+308 (8 byte, ketelitian 16 digit). Untuk

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

3. Character (karakter). Terdiri dari: a.


signed char atau char: -128 s/d 127 (1 byte). Untuk mencetak karakter ini ke layar dibutuhkan format "%c". Nilai variabel bertipe char bisa diisi dengan bilangan atau bisa dengan karakter yang diapit tanda kutip tunggal, misalnya 'A', 'a', '$', '9' dan '\n'.

b.

unsigned char: 0 s/d 255 (1 byte). Untuk mencetak karakter ini ke

layar dibutuhkan format "%c".

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?

PUSAT PENGMBANGAN BAHAN AJAR UMB

Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

/* 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

PUSAT PENGMBANGAN BAHAN AJAR UMB

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.

PUSAT PENGMBANGAN BAHAN AJAR UMB

Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

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.

PUSAT PENGMBANGAN BAHAN AJAR UMB

Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

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.

PUSAT PENGMBANGAN BAHAN AJAR UMB

Anis Cherid, M.T.I. Alogaritma Dan Pemrograman I

Anda mungkin juga menyukai