Anda di halaman 1dari 11

LATIHAN UTS

Tim Pengajar KU1071


Sem. 1 2010-2011

Soal 1
Buatlah sebuah program prosedural dalam notasi
algoritmik yang akan membaca sebuah variabel
Grs yang bertipe Garis. Informasi yang
terkandung dalam tipe Garis tersebut meliputi titik
awal dan titik akhir yang masing-masing bertipe
Point. Tipe Point mengandung informasi x dan y
yang bertipe integer. Program selanjutnya akan
menghasilkan nilai kuadrat dari panjang garis
tersebut. Untuk program ini, asumsi yang
digunakan adalah bahwa masukan user selalu
valid.

25/10/2010

NUM/KU1071

program PjgGaris
Kamus
type point : <x,y : integer>
type garis : <pA,pB : point>
Grs
: Garis
PjgKdr : integer
Algoritma
input(Grs)
PjgKdr  ((Grs.pB.x Grs.pA.x) ^ 2) +
((Grs.pB.y Grs.pA.y) ^ 2)
output(PjgKdr)

25/10/2010

NUM/KU1071

Soal 2
Garis dapat dibentuk dari dua buah titik. Jika diketahui
koordinat titik A(x1,y1) dan B(x2,y2), maka dapat
dibentuk garis dengan persamaan :
y = mx + c
dengan m adalah gradient garis dengan rumus
m = y2 y1 / x2 x1
Dua buah garis dikatakan sejajar, jika mgaris1 = mgaris2
Dan dua buah garis dikatakan tegak lurus jika
mgaris1.mgaris2 = -1

Buatlah program GradienGaris untuk menghitung


gradien 2 buah garis yang setiap garis dibentuk dari 2
buah titik bertipe Point. Kemudian dari perhitungan
gradien masing masing garis, program menampilkan
ke layar apakah kedua garis saling sejajar atau tegak
lurus atau tidak termasuk keduanya. Untuk perhitungan
gradien, buatlah prosedur hitungGradien.

25/10/2010

NUM/KU1071

Program GradienGaris
Kamus
type Point : <x: integer,
y: integer>
TitikAwalG1,TitikAkhirG1 : Point
TitikAwalG2,TitikAkhirG2 : Point
GradienG1, GradienG2 : integer
Procedure hitungGradien (input P1,P2 : Point ; output m : integer)
Algoritma
m  p2.y p1y / p2.x p1.x
Algoritma {program utama}
input (TitikAwalG1)
input (TitikAkhirG1)
input (TitikAwalG2)
input (TitikAkhirG2)
hitungGradien(TitikAwalG1, TitikAkhirG1, GradienG1)
hitungGradien(TitikAwalG2, TitikAkhirG2, GradienG2)
if GradienG1 = GradienG2 then
output (dua garis adalah saling sejajar)
else if GradienG1 * GradienG2 = -1 then
output (dua garis adalah saling tegak lurus)
else
output (dua garis tidak saling sejajar atau tegak lurus)

Soal 3
Buatlah sebuah program prosedural dalam notasi
algoritmik yang menghitung banyaknya titik di
setiap kuadran dari masukan pengguna berupa
sekumpulan data titik.
Pemasukan titik diakhiri jika pengguna
memasukkan nilai <99,99>. Jika pengguna
langsung memasukkan <99,99>, maka tampilkan
pesan Tidak ada data
Buatlah fungsi getKuadran yang menerima
masukan sebuah titik dan menghasilkan nilai
integer yang menyatakan kuadran titik tsb;
menghasilkan 0 jika titika ada di garis sumbu, dan
menghasilkan 9 jika titik adalah <99,99>
Untuk algoritma utama, PILIH SKEMA
PEMROSESAN SEKUENSIAL YANG TEPAT !

25/10/2010

NUM/KU1071

program PilahTitik
Kamus
type titik : <x,y : integer>
T
: titik
N0, N1, N2, N3, N4
: integer
function getKuadran(p : titik) 
Algoritma
{first elemen}
input(T)
if (getKuadran(T) = 9) then
output(Tidak ada data)
else
{inisialisasi}
N0  0; N1  0
N2  0; N3  0; N4  0
repeat
kuadran  getKuadran(T)
depend on kuadran:
kuadran = 0 : N0  N0 +
kuadran = 1 : N1  N1 +
kuadran = 2 : N2  N2 +
kuadran = 3 : N3  N3 +
kuadran = 4 : N4  N4 +
input(T)
{next elemen}
until (kuadran = 9)
output(N0,N1,N2,N3,N4)
25/10/2010

NUM/KU1071

integer

1
1
1
1
1

function getKuadran(p : titik)  integer


kamus lokal:
Algoritma
depend on p:
p.x > 0 and p.y > 0 :  1
p.x < 0 and p.y > 0 :  2
p.x < 0 and p.y < 0 :  3
p.x > 0 and p.y < 0 :  4
p.x = 99 and p.y = 99 :  9
else  0

25/10/2010

NUM/KU1071

Soal 4
Didefinisikan tipe array berikut ini:
constant NMin : integer = 1
constant NMax : integer = 50
TabChar : <
TC : array [NMin..NMax] of character,
N : integer [0..NMax] >
{ N indeks efektif maksimum, 0 jika kosong}
Buatlah:
Fungsi IsPalindrom yang menerima masukan
sebuah TabChar tidak kosong dan mengembalikan
sebuah nilai boolean yang bernilai true jika isi TC
adalah palindrom (dibaca dari depan dan belakang
sama, misalnya: katak, kasur rusak, nababan).
Prosedur ShiftKiri yang memiliki parameter bertipe
TabChar, dan melakukan pergeseran elemenelemen TC ke kiri, sedangkan elemen paling depan
(pertama) dipindah ke belakang. Misalnya:
ABCDEFGHIJ  BCDEFGHIJA
Jika TC kosong, maka TC tetap

25/10/2010

NUM/KU1071

function isPalindrom(T : TabChar)  boolean


{Fungsi isPalindrom mengembalikan nilai true
jika T.TC merupakan rangkaian karakter yang
palindrom (dibaca dari depan dan belakang
sama)}
Kamus Lokal:
i : integer
Algoritma:
i  NMin
while (i < T.N div 2) and
(T.TCi = T.TCT.N-i+1) do
i  i + 1
{(i = T.N div 2) or (T.TCi T.TCT.N-i+1)}
if T.TCi = T.TCT.N-i+1 then
 true
else
 false

25/10/2010

NUM/KU1071

10

procedure ShiftKiri(input/output T : TabChar)


{Menggeser elemen T.TC satu indeks ke kiri,
elemen pertama pindah ke belakang}
{I.S.: T bisa kosong/isi}
{F.S.: Jika T.TC kosong  T.TC tetap, jika
T.TC isi, maka setiap elaman T.TC ke 2 hingga
T.N digeser ke kiri, sedangkan elemen pertama
pindah menjadi elemen ke T.N}
Kamus Lokal:
i : integer
temp : character
Algoritma:
if T.N > 1 then
temp  T.TC1
i traversal [2..T.N]
T.TCi-1  T.TCi
T.TCT.N  temp

25/10/2010

NUM/KU1071

11

Anda mungkin juga menyukai