MODUL I TIPE DATA, OPERATOR, KONDISI DAN PENGULANGAN
1.1
Tujuan Tujuan modul I ini, adalah:
•
Praktikan bisa membuat program sederhana berdasarkan algoritma.
•
Praktikan dapat membiasakan diri untuk membuat program secara terstruktur.
•
Praktikan memahami penggunaan tipe data dan operator dalam algoritma dan bahasa C. Praktikan dapat memahami algoritma kondisi dan pengulangan serta
•
mengimplementasikannya dalam bahasa pemrograman C.
1.2
Teori
1.2.1 Tipe Data Dalam bahasa C terdapat lima tipe data dasar, yaitu: char, int, float, double, dan void. Tabel 1.1 Tipe Data Dasar Berdasarkan bahasa C
1. 2.
Tipe Data Char Int
3.
Float
4 byte
4.
Double
8 byte
5.
Void
0 byte
No
Ukuran 1 byte 2 byte
Range (Jangkauan) - 128 s/d 127 - 32768 s/d 32767 %i - 3.4E-38 s/d 3.4E+38 - 1.7E-308 s/d 1.7+308 -
I-1
Format
Keterangan
%c %d
Karakter/string Integer/bilangan bulat
%f
Float/bilangan pecahan
%lf
Pecahan presisi ganda
-
Tidak bertipe
I-2
1) Tipe Bilangan Bulat Tipe data ini digunakan untuk data-data angka yang tidak mengandung angka di belakang koma (Int). 2) Tipe Bilangan Riil Tipe ini adalah tipe yang merepresentasikan data-data bilangan yang mengandung angka di belakang koma. Tipe data yang termasuk ke dalam kategori ini adalah: float, double. Contoh Algoritma 1: Algoritma variable {Program perbedaan output variable} Deklarasi A : integer B : real C : char X : double Deskripsi A = 10 B = 5.45 C = 'C' X = 2.35E+10 Write("Nilai A adalah : ", A) Write("Nilai B adalah : ", B) Write("Nilai C adalah : ", C) Write("Nilai X adalah : ", X)
/* variabel A diisi dengan 10 */ /* variabel B diisi dengan 5.45 */ /* variabel C diisi dengan karakter "C" */ /* variabel X diisi dengan 2.35E+20 */ /* Menampilkan isi variabel A */ /* Menampilkan isi variabel B */ /* Menampilkan isi variabel C */ /* Menampilkan isi variabel X */
Program Algoritma 1: //Program perbedaan output variable #include <stdio.h> main() { int A; float B; char C; double X; A = 10; B = 5.45;
/* variabel A diisi dengan 10 */ /* variabel B diisi dengan 5.45 */
I-3
C = 'C'; /* variabel C diisi dengan karakter "C" */ X = 2.35E+10; /* variabel X diisi dengan 2.35E+20 */ printf("Nilai A adalah : %i\n", A); /* Menampilkan isi variabel A */ printf("Nilai B adalah : %f\n", B); /* Menampilkan isi variabel B */ printf("Nilai C adalah : %c\n", C); /* Menampilkan isi variabel C */ printf("Nilai X adalah : %lf\n", X); /* Menampilkan isi variabel X */ } 3) Tipe Logika Tipe ini adalah tipe yang merepresentasikan data-data yang mengandung dua buah nilai, yaitu nilai logika (boolean) – true dan false. 4) Tipe Karakter/String Tipe character merupakan kumpulan bermacam-macam character (set of character) yang terdiri dari alfabet. •
Alfabet bilangan desimal (decimal digits):0,1,2…9
•
Alfabet huruf latin (Capital letter):A,B,…Z
•
Alfabet huruf latin kecil (common letter)a..z
Tipe ini hanya terdiri dari 1 karakter. Dalam program konstanta bertipe char ditulis diantara tanda petik misalnya ‘A’ ‘,’
‘4’
1.2.2 Tipe Data Bentukan Tipe data bentukan adalah tipe data yang dibuat sendiri sesuai kebutuhan dalam program yang akan kita buat (disebut juga user defined types). Adapun yang termasuk ke dalam tipe bentukan adalah: 1) Struktur Struktur adalah tipe data bentukan yang menyimpan lebih dari satu variabel bertipe sama maupun berbeda. Untuk mumbuat tipe data struktur dalam C, menggunakan kata kunci struct. Bentuk umum pendeklarasian tipe: Struct nama struktur { Tipe_data variabel1; Tipe_data variabel2; ... }
I-4
2) Enumerasi Tipe Enumerasi adalah tipe data yang nilainya terbatas pada nilao-nilai yang telah didefinisikan saja. Tipe ini digunakan untuk membentuk tipe data yang nilainya bersifat pasti. Misalnya nama hari, jenis kelamin dan seterusnya. Bentuk Umum : enum nama_tipe (nilai1, nilai2, nilai3, ...) Contoh: enum jenis_kelami(pria, wanita) enum hari (minggu, senin, selasa, rabu, kamis, jumat, sabtu) //Membuat tipe enum dengan namahari #include <stdio.h> main() { enum Namahari{Minggu, Senin, Selasa, Rabu, Kamis, Jumat,Sabtu}; printf("%d, ", Minggu); printf("%d, ", Senin); printf("%d, ", Selasa); printf("%d, ", Rabu); printf("%d, ", Kamis); printf("%d, ", Jumat); printf("%d, ", Sabtu); } Contoh Algoritma 2: Algoritma Menampilkan nama siswa
{Membuat tipe struktur dengan nama siswa} Deklarasi Type Siswa
: A : Siswa Deskripsi Read(A.NIS) Read(A.Nama) Read(A.Alamat) Read(A.Kota) Write(A.NIS, ’ – ’, A.Nama, ’ –’, A.Alamat, ’ –’,A.Kota)
I-5
Program Algoritma 2: //Membuat tipe struktur dengan nama siswa #include <stdio.h> main() { typedef struct { char NIS[8],Nama[25],Alamat[20],Kota[15];} Siswa ; Siswa A; printf("NIS : ");scanf("%s",A.NIS); printf("Nama : ");scanf("%s",A.Nama); printf("Alamat : ");scanf("%s",A.Alamat); printf("Kota : ");scanf("%s",A.Kota); printf("%s - %s - %s - %s",A.NIS,A.Nama,A.Alamat,A.Kota); }
1.2.3 Operator Operator digunakan untuk menyatakan suatu perhitungan/operasi. Operator dapat terbagi atas: Operator penugasan, Operator aritmatika, Operator hubungan (perbandingan), Operator logika, Operator bitwise dan operator unary. •
Operator Penugasan Operator Penugasan (Assignment operator) dalam bahasa C berupa tanda sama dengan (“=”). Contoh operator penugasan: nilai = 50; z = x * y;. Artinya: variabel “nilai” diisi oleh 50 dan variabel “z” diisi oleh hasil perkalian x dan y
•
Operator Aritmatika Dalam bahasa C disediakan lima operator aritmatika, yaitu: •
*
: untuk perkalian
•
/
: untuk pembagian
•
% : untuk sisa pembagian (modulus)
•
+ : untuk pertambahan
•
-
: untuk pengurangan
I-6
Catatan: operator % digunakan untuk mencari sisa pembagian antara dua bilangan, misalnya : 9 % 2 = 1. //program penggunaan operator aritmetika: #include "stdio.h" #include "conio.h" main() { printf("Nilai 9 + 4 = %i\n", 9 + 4); printf("Nilai 9 - 4 = %i\n", 9 - 4); printf("Nilai 9 * 4 = %i\n", 9 * 4); printf("Nilai 9 / 4 = %i\n", 9 / 4); printf("Nilai 9 % 4 = %i", 9 % 4); /* mencetak hasil 9 % 4 */ } •
Operator Hubungan (Perbandingan) Operator Hubungan digunakan untuk membandingkan hubungan antara dua buah operand (sebuah nilai atau variabel). Operator-operator hubungan dalam bahasa C adalah sebagai berikut: Tabel 1.4 Operator-operator Perbandinngan Operator Arti < Kurang dari <= Kurang dari sama dengan > Lebih dari >= Lebih dari sama dengan == Sama dengan != Tidak sama dengan
Contoh Apakah x kurang dari y Apakah x kurang dari sama dengan y x>y Apakah x lebih dari y x >= y Apakah x lebih dari sama dengan y x = = y Apakah x sama dengan y x != y Apakah x tidak sama dengan y x
//program penggunaan operator hubungan (perbandingan): #include “stdio.h” #include “conio.h” void main() {printf(“Nilai 10 + 3 = %i”, 10 + 3); /* mencetak hasil 10 + 3 */ printf(“Nilai 10 - 3 = %i”, 10 - 3); /* mencetak hasil 10 - 3 */ printf(“Nilai 10 * 3 = %i”, 10 * 3); /* mencetak hasil 10 * 3 */ printf(“Nilai 10 / 3 = %i”, 10 / 3); /* mencetak hasil 10 / 3 */ printf(“Nilai 10 % 3 = %i”, 10 % 3); /* mencetak hasil 10 % 3 */ }
I-7
•
Operator Logika Jika operator hubungan membandingkan hubungan antara dua buah operand, maka operator logika digunakan untuk membandingkan logika hasil dari operator-operator hubungan. Operator logika ada tiga macam, yaitu :
•
a)
&& : Logika AND (dan)
b)
||
: Logika OR (atau)
c)
!
: Logika NOT (ingkaran)
Operator Bitwise Operator bitwise digunakan untuk memanipulasi bit-bit dari nilai data yang ada di memori. Operator bitwise dalam bahasa C :
•
<<
: Pergeseran bit ke kiri
>>
: Pergeseran bit ke kanan
&
: Bitwise AND
^
: Bitwise XOR (exclusive OR)
|
: Bitwise OR
~
: Bitwise NOT
Operator Unary Operator Unary merupakan operator yang hanya membutuhkan satu operand saja. Dalam bahasa C terdapat beberapa operator unary yang sering digunakan, yaitu :
Tabel 1.5 Beberapa Operator Unary Operator Arti/Maksud Unary minus ++ Peningkatan dengan penambahan nilai 1 -Penurunan dengan pengurangan nilai 1 Sizeof Ukuran dari operand dalam byte
Letak Sebelum operator Sebelum dan sesudah Sebelum dan sesudah Sebelum
Contoh A+-B*C A++
Equivalen A + (-B)*C A=A+1
A--
A=A-1
Sizeof(l)
-
I-8
Pada operator peningkatan ‘++’ dan penurunan ‘--' jika diletakkan sebelum atau sesudah operand akan terdapat perbedaan. Perhatikan contoh berikut: /* Perbedaan operator peningkatan ++ yang diletakkan di depan dan dibelakang operand */ #include <stdio.h> #include void main() { int X, Nilai; X = 5; Y = 10; Nilai = ++X; /* berarti X = X + 1; Nilai = X; */ printf("Nilai = %d, X = %d\n", Nilai, X); nilai = x++; /* berarti Nilai = X; Nilai = X + 1; */ printf("Nilai = %d, X = %d\n", Nilai, X); nilai = --Y; /* berarti Y = Y - 1; Nilai = Y; */ printf("Nilai = %d, Y = %d\n", Nilai, Y); nilai = Y--; /* berarti Nilai = Y; Y = Y - 1; */ printf("Nilai = %d, Y = %d\n", Nilai, Y); }
1.2.4 Input dan Output a.
Memasukkan Data Dalam bahasa C proses pemasukkan data bisa menggunakan beberapa fungsi yang sudah tersedia di dalam program bahasa C (fungsi pustaka). Beberapa fungsi pustaka yang bisa digunakan adalah: 1. scanf() Fungsi ini digunakan untuk menginput data berupa data numerik, karakter dan string secara terformat. Hal-hal yang perlu diperhatikan dalam pemakaian fungsi scanf() : a. Fungsi scanf() memakai penentu format b. Fungsi scanf() memberi pergantian baris secara otomatis c. Fungsi scanf() tidak memerlukan penentu lebar field d. Variabelnya harus menggunakan operator alamat &
I-9
Kode penentu format : %c : Membaca sebuah karakter %s : Membaca sebuah string %i, %d : Membaca sebuah bilangan bulat (integer) %f, %e : Membaca sebuah bilangan pecahan (real)
%o : membaca sebuah bilangan octal %x : Membaca sebuah bilangan heksadesimal %u Membaca sebuah bilangan tak bertanda
2. gets() Fungsi gets() digunakan untuk memasukkan data bertipe karakter dan tidak dapat digunakan untuk memasukkan data numerik. 3. getchar() Fungsi getchar() digunakan untuk membaca data yang bertipe karakter 4. getch() dan getche() Fungsi getch() dan getche() digunakan untuk membaca data karakter. Contoh Program : #include “stdio.h” #include “conio.h” void main() { char Huruf1, Huruf2; printf(“Masukkan sebuah karakter : “); Huruf1 = getche(); // karakter yang dimasukkan akan terlihat di layar printf(“\nKarakter yang Anda masukkan adalah %c\n”, Huruf1); printf(“\nMasukkan sebuah karakter lagi : “); Huruf2 = getch(); // karakter yang dimasukkan tidak terlihat di layar printf(“\nKarakter yang Anda masukkan adalah : %c, Huruf2); getch(); }
b.
Menampilkan Data •
Menampilkan Data ke Layar Monitor Menggunakan fungsi printf() digunakan untuk menampilkan semua jenis data (numerik dan karakter). Fungsi puts() digunakan untuk menampilkan data string dan secara otomatis akan diakhiri dengan perpindahan baris. Fungsi putchar() digunakan untuk menampilkan sebuah karakter. Mengatur tampilan bilangan pecahan (float).
I-10
Bentuk umum : printf(“%m.nf”, argument); Keterangan: m
: menyatakan panjang range
n
: menyatakan jumlah digit di belakang koma.
argument
: nilai atau variabel yang akan ditampilkan.
Contoh: printf(“%5.2f”, nilai); artinya variabel nilai akan ditampilkan sebanyak 5 digit dengan 2 digit di belakang koma. /* Program untuk menampilkan data berupa bilangan pecahan */ #include “stdio.h” #include “conio.h” void main() { float Nilai1,Nilai2; clrscr(); puts(“Masukkan nilai pertama : ); scanf(“%f”, &Nilai1); puts(“Masukkan nilai kedua : ); scanf(“%f”, &Nilai2); printf(“Nilai pertama anda adalah %5.2f”, Nilai1); printf(“Nilai kedua anda adalah %6.4f ?”, Nilai2); } /* Program untuk menampilkan data bilangan integer dan string */ #include “stdio.h” #include “conio.h” void main() { int Umur; char Nama[20]; clrscr(); puts(“Masukkan nama Anda : ); gets(Nama); puts(“Masukkan umur Anda : “); scanf(“%d”, &Umur); printf(“Nama Anda : %s \n”, Nama); //tipe data string printf(“Umur Anda : %d \n”, Umur); } •
Menampilkan data ke printer Untuk menampilkan data ke printer dapat menggunakan fungsi fprintf(), fputs() dan fputc(). o Fungsi fprintf(): digunakan untuk mencetak semua jenis tipe data ke printer dan secara otomatis memberikan efek perpindahan baris.
I-11
o Fungsi fputs(): digunakan untuk mencetak tipe data string ke printer o Fungsi fputc(): digunakan untuk mencetak tipe data karakter ke printer
1.2.5 Kondisi a. IF...THEN..., IF...THEN...ELSE... dan IF Bersarang (Nested IF) Struktur IF, kita dapat membuat algoritma-algoritma yang melakukan perintah berdasarkan kondisi tertentu. Perintah akan dilakukan jika hanya jika ekspresi boolean bernilai true (jika ekspresi boolean bernilai false maka perintah tidak akan dikerjakan). IF...THEN.. IF <ekspresi boolean> then Perintah Endif
.
IF...THEN...ELSE... IF <ekspresi boolean> then Perintah_1 Else Perintah_2 Endif IF Bersarang (Nested IF) IF <ekspresi boolean 1> then Perintah 1 Else if <ekspresi boolean 2> then Perintah 2 Else if <ekspresi boolean n> then Perintah n Else Perintah n+1 Endif
I-12
Contoh Algoritma 3: Algoritma Bilangan_Genap_Ganjil {Mencetak pesan ‘bilangan genap’ jika sebuah bilangan bulat yang dibaca dari piranti masukan merupakan bilangan genap dan sebaliknya} Deklarasi Bil : integer Deskripsi Read(Bil) If Bil mod 2 = 0 then Write(‘bilangan genap’) Else Write(‘bilangan ganjil’) Endif Program Algoritma 3: //Algoritma Bilangan_Genap_Ganjil #include <stdio.h> main() { int Bil; printf("masukan bilangan : ");scanf("%d",&Bil); if (Bil % 2 == 0) { printf("bilangan genap");} else { printf("bilangan ganjil");} } Contoh Algoritma 4: Algoritma Maksimum {Menentukan bilangan terbesar dari tiga buah bilangan bulat} Deklarasi A,B,C,Maks : integer Dekripsi Read(A, B, C) If (A>B) and (A>C) then Maks ← A Else if (B>A) and (B>C) then
I-13
Maks ← B Else Maks ← C Endif Write(’bilangan terbesar adalah, Maks) Program Algoritma 4: //Algoritma Maksimum #include <stdio.h> main() { int A, B, C,Maks; printf("A : ");scanf("%d",&A); printf("B : ");scanf("%d",&B); printf("C : ");scanf("%d",&C); if ((A>B) && (A>C)) maks = A; else if ((B>A) && (B>C)) maks = B; else maks = C; printf("bilangan terbesar adalah %d", Maks); } Contoh Algoritma 5: Algoritma Jumlah_Hari {Menentukan jumlah hari dalam satu bulan} Deklarasi AngkaBulan : integer Tahun : integer JumlahHari : integer
{1..12} {>0}
Deskripsi Read(AngkaBulan,Tahun) Case (AngkaBulan) AngkaBulan = [1,3,5,7,8,10,12] : JumlahHari ← 31 AngkaBulan = [4,6,9,11] : JumlahHari ← 30 AngkaBulan = 2: if Tahun mod 4 = 0 then JumlahHari ← 29 Else JumlahHari ← 28
I-14
Endif Endcase Write(JumlahHari) Program Algoritma 5: //Algoritma Jumlah_Hari #include <stdio.h> main() { int AngkaBulan,Tahun, JumlahHari; printf("Angka Bulan : ");scanf("%d",&AngkaBulan); printf("Tahun : ");scanf("%d",&Tahun); switch (AngkaBulan) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: JumlahHari = 31;break; case 4: case 6: case 9: case 11 : JumlahHari = 30;break; case 2 : if (Tahun % 4 == 0) JumlahHari = 29; else JumlahHari = 28;break; } printf("Jumlah hari %d",JumlahHari); } Contoh Algoritma 6: Algoritma Kalkulator {Mensimulasikan kalkulator sederhana. Menghitung hasil operasi aritmetika bila dibaca operand1, operator dan operand2.} Deklarasi Op1, Op2, Pilih : integer Hasil : float Deskripsi Read(Op1,Op2, Pilih) Case (Pilih)
{operand} {hasil ’+’,’-’,’*’,’/’}
I-15
Pilih = 1 : Hasil ← Op2 + Op2 Pilih = 2 : Hasil ← Op2 - Op2 Pilih = 3 : Hasil ← Op2 * Op2 Pilih = 4 : if Op2 ≠ 0 : hasil ← Op1/Op2 else write(’error’) Endcase Read(Hasil) Program Algoritma 6: //Algoritma Bilangan_Genap_Ganjil #include <stdio.h> main() { int Op1, Op2, Pilih; float Hasil; printf("Operand 1: ");scanf("%d",&Op1); printf("Operand 2: ");scanf("%d",&Op2); printf("1. Operator +\n"); printf("2. Operator -\n"); printf("3. Operator *\n"); printf("4. Operator /\n"); printf("Pilih Operator : ");scanf("%d",&Pilih); switch (Pilih) { case 1 : {Hasil = Op1 + Op2; break;} case 2 : {Hasil = Op1 - Op2; break;} case 3 : {Hasil = Op1 * Op2; break;} case 4 : {if (Op2 != 0) printf("%d",Op1/Op2); else printf("error");break;} } printf("Hasil dari perhitungan tersebut adalah %f",Hasil); }
1.2.6 Pengulangan Struktur pengulangan secara umum terdiri dari dua bagian: 1. Kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk melaksanakan pengulangan. 2. badan (body) pengulangan, yaitu bagian algoritma yang diulang.
I-16
a. Struktur FOR Struktur ini digunakan untuk menghasilkan pengulangan sejumlah kali yang dispesifikasikan. Jumlah pengulangan diketahui atau dapat ditentukan sebelum eksekusi. For Menaik For pencacah ← awal to akhir do Aksi Endfor
For Menurun For pencacah←akhir downto awal do Aksi endfor
Contoh Algoritma 7: Algoritma Penjumlahan_Deret {Menjumlahan deret: 1+2+3+..+N dengan N adalah bilangan bulat positif yang dibaca dari piranti masukan jumlah deret dicetak ke piranti keluaran} Deklarasi N : integer K : integer Jumlah : integer
{banyaknya suku deret} {suku deret} {Jumlah deret}
Deskripsi Read(N) {banyaknya suku deret} Jumlah ← 0 {Inisialisasi jumlah deret} {ulangi sebanyak N kali} For k ← 1 to N Jumlah ← Jumlah + k Endfor Write(Jumlah) Program Algoritma 7: //Algoritma Penjumlahan_Deret #include <stdio.h> main() { int N, K, Jumlah; printf("banyaknya suku deret : ");scanf("%d",&N); Jumlah = 0; for (K=1; K<=N; K++) { Jumlah = Jumlah + K; } printf("%d",Jumlah); }
I-17
Contoh Algoritma 8: Algoritma Hitung_Mundur {hitung mundur peluncuran roket} Deklarasi K : integer Deskripsi For K ← 10 downto 0 do Write(K) Endfor Write(’Go’) Program Algoritma 8: //Algoritma Hitung_Mundur #include <stdio.h> main() { int K; for (K=10;K>=0;K--) { printf("%d ",K); } printf("Go"); } b. Struktur While Bentuk umum: While kondisi do Aksi Endwhile Aksi akan dilaksanakan berulangkali selama kondisi bernilai true. Jika kondisi bernilai false badan pengulangan tidak akan dilaksanakan, yang berarti pengulangan selesai. Yang harus diperhatikan adalah pengulangan harus berhenti. Pengulangan yang tidak pernah berhenti menandakan bahwa logika algoritma tersebut salah.
I-18
Contoh Algoritma 9: Algoritma Menghitung_Rata_Rata {Menghitung rata-rata N buah bilangan bulat yang dibaca dari piranti masukan. N >0} Deklarasi N ,X , K, Jumlah : integer Rerata : real Deskripsi Read(N) Jumlah ← 0 K ←1 While K ≤ N do Read(X) Jumlah ← Jumlah + X K ← K+1 Endwhile {K>N} Rerata ← Jumlah/N write(Rerata) Program Algoritma 9: //Algoritma Menghitung_Rata_Rata #include <stdio.h> main() { int N , X, K, Jumlah; float Rerata; printf("Masukan banyaknya data : ");scanf("%d",&N); Jumlah = 0; K =1; while (K <= N) { printf("Data ke-%d : ",K);scanf("%d",&X); Jumlah = Jumlah + X; K = K+1; } Rerata = Jumlah/N; printf("Rata-rata : %f",Rerata); }
I-19
c. Struktur do.....while Pada dasarnya struktur perulangan do....while sama saja dengan struktur while, hanya saja pada proses perulangan dengan while, seleksi berada di while yang letaknya di atas kemudian proses baru akan dijalankan, sementara pada perulangan do....while, proses akan dilakukan terlebih dahulu baru kemudian, seleksi while dilakukan. Jadi dengan menggunakan struktur do…while sekurang-kurangnya akan terjadi satu kali perulangan. Bentuk Umum: Do Aksi While Contoh Algoritma 10: Algoritma Sandi_Lewat {Memvalidasi sandi-lewat yang dimasukkan oleh pengguna. Sandi-lewat yang benar disimpan sebagai konstanta. Jika sandi-lewat yang dimasukkan benar, sistem boleh dimasuki, tetapi jika salah, ulangi lagi} Deklarasi Const Password = ’abc123’ Sandilewat : string Sah : boolean Deskripsi Sah ← false do Read(Sandilewat) If Sandilewat = Password then Sah ← true Endif while Sah=false Write(’OK’) Program Algoritma 10: //Algoritma Sandi_Lewat #include <stdio.h> main() { #define Password "abc123";
I-20
char Sandilewat; bool Sah; Sah = false; do { printf("Masukan kata sandi : ");scanf("%c",Sandilewat); If (Sandilewat = Password) Sah = true; } while (Sah == false); printf("OK"); }
1.3 Kasus 1.3.1 Kasus 1 Jika kita berbelanja di pasar swalayan/supemarket, nilai total belanja kita seringkali bukan kelipatan pecahan rupiah yang berlaku. Misalnya nilai total belanja sebesar Rp. 19.212. andaikan saat ini pecahan rupiah yang berlaku paling kecil Rp. 25. selain i tu, juga ada pecahan Rp. 50 dan Rp. 100. umumnya kasir pasar swalayan membulatkan nilai belanja ke pecahan yan g terbesar jadi Rp. 19.212 dibulatkan menjadi Rp. 19.225. hal ini jels merugikan konsumen. Misalkan anda memiliki pasar swalayan yang jujur dan tidak merugikan pembeli, sehingga jika ada nilai belanja yang bukan kelipatan pecahan yang ada, maka nilai belanja itu dibulatkan ke pecahan terendah. Jadi Rp. 19.212 dibulatkan menjadi Rp. 19.200. tuliskan algoritma dan program serta cantumkan output/hasilnya yang membaca nilai belanja (integer) lalu membulatkannya ke nilai uang dengan pecahan terendah. 1.3.2 Kasus 2 Seseorang mempunyai tabungan di sebuah bank. Ia dapat menyetor dan mengambil uangnya sendiri di bank tersebut, namun jumlah saldo minimum yang harus disisakan di dalam adalah Rp. 10.000. ini artinya, jika saldonya Rp. 10.000, ia tidak dapat mengambil uang lagi. Kode transaksi untuk menyetor adalah 0 dan
I-21
kode
transaksi
untuk
mengambil
adalah
1.
Buatlah
algoritma
yang
mensimulasikan transaksi yang dilakukan orang tersebut. Algoritma menerima masukan berupa kode transaksi dan jumlah uang yang disetor/diambil. Rancanglah algoritma tersebut sehingga memungkinkan penabung dapat melakukan transaksi berulangkali sampai saldo yang tersisa Rp. 10,000 atau jumlah uang yang diambil lebih besar dari saldonya. Catatan nilai uang yang diambil selalu merupakan kelipatan 20.000. Dari algoritma tersebut, buatlah program dan cantumkan output/hasilnya.
1.4
Tugas – tugas Pendahuluan Tugas pendahuluan akan dikerjakan selama 30 menit di awal jam
praktikum dengan menggunakan software Self Assessment
1.5
Latihan Praktikum I dan II
1.5.1 Latihan Praktikum I (Pertemuan Pertama) Buatlah program berdasarkan algoritma-algoritma di bawah ini: Algoritma 1: Algoritma Hitung_Biaya_Percakapan {Menghitung biaya percakapan telpon dengan menghitung berapa detik seseorang bicara kemudian menghitung biayanya dengan mengkalikan jumlah detik dengan biaya percakapan perdetiknya. Waktu percakapan harus dikonversi ke detik.} Deklarasi Const Biaya_perdetik : 100 Type Waktu <Jam, Menit, Detik : integer> Var Awal, Akhir : Waktu Detik_awal, Detik_akhir, Lama_bicara, Tdetik1, Tdetik2 : integer Biaya : real Deskripsi Read(Awal.Jam, Awal.Menit, Awal.Detik) Read(Akhir.Jam, Akhir.Menit, Akhir.Detik) Tdetik1 ← Akhir.Jam * 3600 + Akhir.Menit * 60 + Akhir.Detik Tdetik2 ← Awal.Jam * 3600 + Awal.Menit * 60 + Awal.Detik Lama_bicara ← Tdetik2 – Tdetik1 If Lama_bicara > = 0 then Biaya ← Lama_bicara * Biaya_perdetik
I-22
Write(’Biaya yang harus dibayar’, Biaya, ’rupiah’) Endif
Algoritma 2: Algoritma Pecahan_Uang {Membaca nilai uang (rupiah) dalam kelipatan 25-an, lalu menentukan berapa nilai tukar pecahan. Pecahan yang tersedia adalah Rp. 1000, Rp. 500, Rp. 100, dan Rp. 50. Jika terakhir masih ada sisa, beri saja Permen (Plus Senyum manis)} Deklarasi Uang : integer Satuan, Puluhan, Ratusan, Limaratusan, Ribuan, Sisa : integer Deskripsi Read(Uang) Ribuan ← Uang div 1000 Sisa ← Ribuan mod 1000 If Sisa <> 0 then Limaratusan ← Sisa div 500 Sisa ← Limaratusan mod 500 Endif If Sisa <> 0 then Ratusan ← Sisa div 100 Sisa ← Ratusan mod 100 Endif If Sisa <> 0 then Puluhan ← Sisa div 50 Sisa ← Puluhan mod 50 Endif If Sisa <> 0 then Satuan ← ’beri permen plus senyum’ Endif Write(Ribuan, ’buah ribuan ’, Limaratusan, ’ buah lima ratusan ’, Ratusan, ’ buah seratusan ’, Puluhan, ’ buah puluhan ’, Sisa , Satuan)
Algoritma 3: Algoritma Angka_mutu_mahasiswa {Nilai_akhir ditentukan dari nilai_tugas, UTS dan UAS dengan formula nilai_akhir ← 20% Nilai_Tugas + 30% UTS + 50% UAS. Angka mutu (A, B, C, D, E) ditentukan oleh nilai_akhir mahasiswa. Setelah itu menentukan angka mutu dengan formula: nilai_akhir >= 80 → ’A’, 60 <= nilai_akhir < 80 → ’B’, 40 <= nilai_akhir < 60 → ’C’, 20 <= nilai_akhir < 40 → ’D’, nilai_akhir < 20 → ’E’}
I-23
Deklarasi Nama : string Nilai_tugas, UTS, UAS : integer Nilai_akhir : real Angka_mutu : char Deskripsi Read(Nama, Nilai_tugas, UTS, UAS) Nilai_akhir ← 0.2 * Nilai_tugas + 0.3 * UTS + 0.5 * UAS If Nilai_akhir >= 80 then Angka_mutu ← ’A’ Else if Nilai_akhir >= 60 then Angka_mutu → ’B’ Else if Nilai_akhir >= 40 then Angka_mutu → ’C’ Else if Nilai_akhir >= 20 then Angka_mutu → ’D’
Else Angka_mutu → ’E’ Endif Write(Nama, ’nilai akhir: ’, Nilai_akhir, ’ angka mutu: ’, Angka_mutu)
Algoritma 4: Algoritma Empat_Persegi_Panjang {Algoritma untuk menampilkan menu perhitungan empat persegi panjang, memilih menu dan melakukan proses perhitungan} Deklarasi NoMenu : integer Panjang, Lebar : real Luas, Keliling, Diagonal : real Deskripsi {cetak menu} write(’ Menu Empat Persegi Panjang write(’ 1. Hitung Luas write(’ 2. Hitung Keliling write(’ 3. Hitung Panjang Diagonal write(’ 4. Keluar Program Masukan pilihan anda(1/2/3/4)? write(’ read(NoMenu) case (NoMenu) NoMenu = 1 : read(Panjang, Lebar) Luas ← Panjang * Lebar Write(Luas)
’) ’) ’) ’) ’) ’)
I-24
NoMenu = 2 : read(Panjang, Lebar) Keliling ← (Panjang + Lebar) * 2 Write(Keliling) NoMenu = 3 : read(Panjang, Lebar) Diagonal ← (Panjang * Panjang + Lebar * Lebar) Write(Diagonal) NoMenu = 4 : write(’Keluar program...sampai jumpa’) Endcase Algoritma 5: Algoritma Upah_Karyawan {Menghitung upah mingguan karyawan. Masukan yang dibaca dari piranti masukan adalah nama karyawan, golongan dan jumlah jam kerja. Nama karyawan dan upahnya dicetak ke piranti keluaran} Deklarasi Const JamNormal = 48 Const UpahLembur = 3000 Nama Gol JJK JamLembur UpahPerJam UpahTotal
: string : char : integer : integer : real : real
{jumlah jam kerja normal per minggu} {upah per jam lembur Rp. 3000}
{’A’,’B’,’C’,’D’} {jumlah jam kerja} {upah per jam}
Deskripsi Read(Nama, Gol, JJK) Case (Gol) Gol = ’A’ : UpahPerJam ← 4000.0 Gol = ’B’ : UpahPerJam ← 5000.0 Gol = ’C’ : UpahPerJam ← 6000.0 Gol = ’D’ : UpahPerJam ← 7000.0 Endcase If JJK ≤ JamNormal then UpahTotal ← JJK * UpahPerJam Else JamLembur ← JJK – JamNormal UpahTotal ← JamNormal * UpahPerJam + JamLembur * UpahLembur Endif Write(Nama,UpahTotal)
I-25
1.5.2 Latihan Praktikum II (Pertemuan Kedua) Buatlah program berdasarkan algoritma di bawah ini Algoritma 1: Algoritma Perpangkatan {Menghitung perpangkatan an dengan n bilangan bulat sembarang > 0. nilai a dan n dibaca dari piranti masukan. Nilai perpangkatan dicetak ke piranti keluaran} Deklarasi A : real {bilangan yang dipangkatkan} N, M : integer {pemangkat} Hasil : real {hasil perpangkatan} K : integer {pencatatan pengulangan} Deskripsi Read(A, N) If N<0 then M ← -N {positifkan pangkatnya} else {N ≥ 0} M←N endif {hitung perpangkatan} Hasil ← 1 for K ← 1 to M do Hasil ← Hasil * A endfor {tuliskan hasil perpangkatan, bergantung pada n} if N < 0 then write(1/Hasil) else write(Hasil) endif Algoritma 2: Algoritma Konversi_Desimal_Ke_Biner {Mengkonversi bilangan bulat tidak negatif dalam sistem desimal menjadi bilangan dalam sistem biner} Deklarasi X, Biner : integer
I-26
Deskripsi Read(X) Biner ←’’ do Sisa ← X mod 2 X ← X div 2 Case (Sisa) 0 : Biner ← ’0’ + Biner 1 : Biner ← ’1’ + Biner endcase while X ≠ 0 write(Biner) Algoritma 3: Algoritma Hitung_Rata_Rata {Menghitung nilai rata-rata data integer (≠9999). Data dibaca dari piranti masukan. Pembacaan data diakhiri dengan 999. nilai rata-rata dicetak ke piranti masukan} Deklarasi Ndata : integer X : integer Jumlah : real U : real
{pencatat jumlah pembacaan data} {data yang dibaca} {jumlah nilai data yang dibaca} {rata-rata data integer}
Deskripsi Jumlah ← 0 Ndata ← 0 {inisialisasi pencatat pembacaan} Read(X) While X ≠ 9999 do Ndata ← Ndata +1 {naikan pencatat jumlah pembacaan data} Jumlah ← Jumlah + X Read(X) {baca data integer selanjutnya} Endwhile {X = 9999} If Ndata ≠ 0 then U ←Jumlah/Ndata {rata-rata data bilangan bulat} Else Write(’data tidak ada’) Endif
I-27
Algoritma 4: Algoritma Data_Minimum {Menentukan bilangan terkecil dari N data integer yang dibaca dari piranti masukan. Nilai N ditentukan terlebih dahulu (N>0)} Deklarasi N : integer {banyaknya data masukan, > 0} {data yang dibaca} X : integer Min : integer {data terkecil/minimum} K : integer {pencacah pengulangan} Deskripsi Read(N) Read(X) {baca data pertama} Min ← X {asumsikan min adalah data pertama} For k ← 2 to N do Read(X) If X < Min then Min ← X Endif Endfor Write(Min) Algoritma 5: Algoritma Upah_Karyawan {Menentukan upah mingguang sejumlah karyawan. Data yang diperlukan adalah nama karyawan dan jumlah jam kerja. Perhitungan upah karyawan diulangi untuk karyawan lain sampai tidak ada lagi karyawan yang dihitung upahnya} Deklarasi Const JamKerjaNormal = 48 Const UpahPerJam = 2000 Const UpahLembur = 3000 Namakar : string JumlahJamKerja : integer JumlahJamLembur : integer UpahTotal : real Jawab : char Stop : boolean Deskripsi
I-28
Stop ← false While not Stop do Read(Namakar, JumlahJamKerja) If JumlahJamKerja ≤ JamKerjaNormal then Upah ← JumlahJamKerja * UpahPerjam Else {jumlah jam kerja > 48} JumlahJamLembur ← JumlahJamKerja – 48 Upahtotal ← JamKerjaNormal * 2000 + JumlahJamLembur * 3000 Endif Write(UpahTotal) Write(’ulangi untuk karyawan lainnya ? (y/t) : ’) Read(Jawab) If Jawab=’t’ or Jawab=’T’ then Stop ← true Endif Endwhile {Jawab = ’t’ or T}