You are on page 1of 28

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


Tipe Range
No Ukuran Format Keterangan
Data (Jangkauan)
1. Char 1 byte - 128 s/d 127 %c Karakter/string
2. Int 2 byte - 32768 s/d 32767 %d Integer/bilangan bulat
%i
3. Float 4 byte - 3.4E-38 s/d %f Float/bilangan pecahan
3.4E+38
4. Double 8 byte - 1.7E-308 s/d %lf Pecahan presisi ganda
1.7+308
5. Void 0 byte - - Tidak bertipe

I-1
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 /* variabel A diisi dengan 10 */
B = 5.45 /* variabel B diisi dengan 5.45 */
C = 'C' /* variabel C diisi dengan karakter "C" */
X = 2.35E+10 /* variabel X diisi dengan 2.35E+20 */
Write("Nilai A adalah : ", A) /* Menampilkan isi variabel A */
Write("Nilai B adalah : ", B) /* Menampilkan isi variabel B */
Write("Nilai C adalah : ", C) /* Menampilkan isi variabel C */
Write("Nilai X adalah : ", X) /* 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; /* variabel A diisi dengan 10 */


B = 5.45; /* 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 <NIS[8], Nama[25], Alamat[20], Kota[15] : string> :
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 Contoh
< Kurang dari x<y Apakah x kurang dari y
<= Kurang dari sama x <= y Apakah x kurang dari sama
dengan dengan y
> Lebih dari x>y Apakah x lebih dari y
>= Lebih dari sama x >= y Apakah x lebih dari sama dengan
dengan y
== Sama dengan x = = y Apakah x sama dengan y
!= Tidak sama dengan x != y Apakah x tidak sama dengan y

//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 Letak Contoh Equivalen
- Unary minus Sebelum operator A+-B*C A + (-B)*C
++ Peningkatan dengan Sebelum dan A++ A=A+1
penambahan nilai 1 sesudah
-- Penurunan dengan Sebelum dan A-- A=A-1
pengurangan nilai 1 sesudah
Sizeof Ukuran dari operand Sebelum Sizeof(l) -
dalam byte
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 <conio.h>
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 %o : membaca sebuah bilangan
%s : Membaca sebuah string octal
%i, %d : Membaca sebuah %x : Membaca sebuah bilangan
bilangan bulat (integer) heksadesimal
%f, %e : Membaca sebuah %u Membaca sebuah bilangan
bilangan pecahan (real) 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 {1..12}
Tahun : integer {>0}
JumlahHari : integer

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 {operand}
Hasil : float {hasil ’+’,’-’,’*’,’/’}

Deskripsi
Read(Op1,Op2, Pilih)
Case (Pilih)
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 Menurun
For pencacah ← awal to akhir do For pencacah←akhir downto awal do
Aksi Aksi
Endfor 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 {banyaknya suku deret}
K : integer {suku deret}
Jumlah : integer {Jumlah deret}

Deskripsi
Read(N) {banyaknya suku deret}
Jumlah ← 0 {Inisialisasi jumlah deret}
For k ← 1 to N {ulangi sebanyak N kali}
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 ’)
write(’ Masukan pilihan anda(1/2/3/4)? ’)
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 {jumlah jam kerja normal per minggu}
Const UpahLembur = 3000 {upah per jam lembur Rp. 3000}

Nama : string
Gol : char {’A’,’B’,’C’,’D’}
JJK : integer {jumlah jam kerja}
JamLembur : integer
UpahPerJam : real {upah per jam}
UpahTotal : real

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 {pencatat jumlah pembacaan data}
X : integer {data yang dibaca}
Jumlah : real {jumlah nilai data yang dibaca}
U : real {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}
X : integer {data yang dibaca}
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}

You might also like