Anda di halaman 1dari 21

TEL 2103

Dasar Komputer & Pemograman

Latihan Pemecahan Masalah 1


Dosen: Abdillah, S.Si, MIT
Email: abdill01@gmail.com
Website: http://abdill01.wordpress.com
Tujuan
Mahasiswa mampu menyelesaikan masalah
berdasar contoh-contoh algoritma
penyelesaian masalah.
1. Menentukan Data Terkecil
Tulislah algoritma untuk menentukan bilangan
terkecil dari N buah data integer yang dibaca dari
papan ketik. Nilai N dibaca terlebih dahulu (N > 0).

Penyelesaian
Baca data terlebih dahulu. Asumsikan data pertama
ini sebagai data terkecil (min) sementara. Kemudian
baca data berikutnya. Jika data tersebut lebih kecil
daripada min, maka ia menjadi min yang baru.
Ulangi untuk data masukan yang lain. Pada akhir
pengulangan min menjadi nilai terkecil dari seluruh
data.
Algoritma
PROGRAM Cari_Minimum
{Menentukan bilangan terkecil dari N buah data integer}
DEKLARASI
N, x, min, i : integer
ALGORITMA:
read (N, x)
min  x
for i  2 to N do
read (x)
if x < min then
min  x
endif
endfor
write (min)
Algoritma
PROGRAM Cari_Minimum
{Menentukan bilangan terkecil dari N buah data integer}
DEKLARASI
N, x, min, i : integer
ALGORITMA:
read (N, x)
min  x
for i  2 to N do for (i=2; i<=N; i++)
read (x) printf (“masukkan nilai x:”); scanf (“%d”, &x);
if x < min then if (x < min)
min  x
endif
endfor
write (min)
2. Menentukan Perpangkatan
Tulislah algoritma untuk membaca bilangan bulat a
dan n lalu menghitung perpangkatan an. (n  0).

Penyelesaian
Misalkan nilai perkalian disimpan di dalam peubah
bernama p. Peubah p ini diinisialisasi dengan 1,
karena ia akan selalu dikalikan a. Kemudian
lakukan perkalian p dengan a sebanyak n kali.
Algoritma
PROGRAM Perpangkatan
{Menghitung perpangkatan an, a bilangan bulat dan n  0}
DEKLARASI
a, n, p, i : integer
ALGORITMA:
read (a, n)
p1
for i  1 to n do for (i=1; i<=n; i++)
p  p * a p = p * a;
endfor
write (p) printf (“Hasil perpangkatan adalah %d”, p);
3. Menentukan Faktorial
Tulislah algoritma untuk membaca bilangan bulat n lalu
menghitung n faktorial.

Penyelesaian
Faktorial sebuah bilangan bulat positif n didefinisikan
sebagai: n! = 1 * 2 * 3 * ... * n
dan khusus untuk n =0, maka 0! = 1.
Misalkan nilai faktorial disimpan dalam peubah fak.
Inisialisasi fak dengan 1:
fak  1
Kalikan fak dengan i, mulai dari 1 sampai n:
fak  fak * i
Algoritma
PROGRAM Faktorial
{Menghitung n faktorial, n > 0}
DEKLARASI
n, fak, i : integer
ALGORITMA:
read (n)
fak  1
for i  1 to n do for (i=1;i<=n;i++)
fak  fak * i
endfor
write (fak)
4. Menentukan Nilai Rata-Rata
Tulislah algoritma untuk menentukan nilai rata-rata
dari N buah data integer yang dibaca dari papan
ketik. Nilai N dibaca terlebih dahulu (N > 0).

Penyelesaian
Baca nilai N dan data terlebih dahulu kemudian
jumlahkan. Pada akhir pengulangan bagi jumlah
data dengan N.
Algoritma
PROGRAM Nilai_Rerata
{Menentukan nilai rata-rata dari N buah data integer}
DEKLARASI
N, x, jumlah, rerata, i : integer
ALGORITMA:
read (N)
Jumlah  0
i1
while i ≤ N do while (i<=N)
read (x)
jumlah  jumlah + x
i  i+1 i++;
endwhile
rerata  jumlah / N rerata = jumlah/N;
write (rerata)
5. Menentukan Selisih Waktu
Tulislah algoritma untuk membaca waktu T1 dan T2
lalu menghitung selisih waktu T1 dan T2 (T1 < T2).

Penyelesaian
Baca T1 dan T2, kemudian konversi ke total_detik1
dan total_detik2. Hitung total_detik2 – total_detik1
kemudian konversi ke jam-menit-detik.
Algoritma
PROGRAM Selisih_Waktu
{Menghitung selisih dua waktu T1 dan T2}

DEKLARASI
type Jam : record < hh, mm , ss : integer >
T1, T2 : Jam
TotalDetik1, TotalDetik2, SelisihDetik, sisa, hh, mm, ss : integer
ALGORITMA:
read (T1, T2)
printf (“Masukkan T1 (hh:mm:ss)”);
scanf (“%d:%d:%d”, &T1.hh, &T1.mm, &T1.ss);
TotalDetik1  (T1.hh*3600) + (T1.mm*60) + T1.ss
TotalDetik2  (T2.hh*3600) + (T2.mm*60) + T2.ss
Algoritma Lanjutan
SelisihDetik  TotalDetik2 – TotalDetik1
hh ← SelisihDetik div 3600 /
sisa ← SelisihDetik mod 3600 %
mm ← sisa div 60
ss ← sisa mod 60
write (hh, mm, ss)
printf (“Selisih waktu adalah %d jam %d menit %d detik”,
hh, mm,ss);
6. Validasi Password
Tulislah algoritma untuk membaca password dan
melakukan validasi terhadap password tsb. Apabila
password yang dibaca salah, maka pembacaan
maksimum hanya boleh 3 kali.

Penyelesaian
Password disimpan sebagai konstanta dan
divalidasi dengan operasi perbandingan.
Algoritma
PROGRAM Validasi_Password
{Melakukan simulasi pembacaan password, maksimum tiga kali}
DEKLARASI
const password = ‘xyz’ const char password = ‘xyz’;
SandiLewat : char char SandiLewat;
sah, i : integer
ALGORITMA:
count  1
sah  0
while (sah = 0) and (i ≤ 3) do while ((sah==0)&&(i<=3))
read (SandiLewat) scanf (“%c”, SandiLewat);
if SandiLewat = password then if (SandiLewat == password)
sah  1
else i  i + 1 else i++;
endif
endwhile
7. Mencetak Segitiga Bintang
Tulislah algoritma yang mencetak segitiga bintang
berikut, jika diberikan tinggi segitiga adalah N (N >
0). Contohnya, jika N = 5, maka segitiga yang
dihasilkan adalah:
***
***
****
*****
Penyelesaian
Perhatikan gambar segitiga untuk N = 5. Baris ke-1
terdiri atas satu bintang, baris ke-2 dua bintang, dan
seterusnya baris ke-5 lima bintang.
Algoritma
PROGRAM Cetak_Segitiga_Bintang
{Mencetak segitiga bintang dengan tinggi N }

DEKLARASI
N, i, j : integer

ALGORITMA:
read (N)
for i  1 to N do for (i=1;i<=N;i++)
for j  1 to i do for (j=1;j<=i;j++)
write ( * ) printf (“*”);
endfor
endfor
8. Konversi Desimal-Biner
Tulislah algoritma yang mengkonversi bilangan bulat positif
ke dalam bilangan biner.
Penyelesaian
Untuk mendapatkan bentuk biner dari sebuah bilangan
desimal, bagi bilangan desimal tersebut dengan 2 terus
menerus sampai hasil pembagian = 0. Deretan sisa hasil
pembagian menyatakan bilangan biner dari bilangan desimal
tersebut. Contoh: Konversi bilangan desimal 18
18/2 =9 sisa 0
9/2 =4 sisa 1
4/2 =2 sisa 0
2/2 =1 sisa 0
1/2 =0 sisa 1
Urutan bilangan biner sesuai arah panah: 10010.
Penjelasan
Misalkan bilangan yang akan dikonversikan ke biner adalah x.
Algoritma pengkonversiannya adalah membagi x dengan 2 secara
berulang-ulang sampai hasil pembagiannya = 0. Urutan pembagian-
nya adalah menghitung sisa pembagian terlebih dahulu:
sisa  x mod 2.
Baru kemudian menghitung hasil pembagian:
x  x div 2.
Bit biner yang merupakan sisa pembagian ditampung dalam sebuah
peubah string yang bernama biner. Inisialisasi biner dengan
karakter kosong ‘ ‘. Setiap kali diperoleh sisa pembagian,
sambungkan dengan operator + sisa pembagian tersebut dengan
biner:
biner  ‘0’ + biner. Jika sisa = 0
biner  ‘1’ + biner. Jika sisa = 1
Algoritma
PROGRAM Desimal_Biner
{Mengkonversi bilangan bulat positif ke bilangan biner}
DEKLARASI
x, sisa : integer
biner : string char biner[ ];
ALGORITMA:
read (x)
biner  “ “ biner = “”;
repeat do
sisa  x mod 2
x  x div 2
case sisa switch (sisa)
0 : biner  “0” + biner case 0 : biner = “0” + biner; break;
1 : biner  “1” + biner
endcase
until x = 0 while (x==0)
write (biner) printf (“Bilangan biner adalah %s”, biner);

Anda mungkin juga menyukai