• Tidak ada hasil yang ditemukan

procedure identitas; forward; (* memperkenalkan proc identitas yang blm dibuat, tp akan sering dipakai di procedure2 diatasnya *)

N/A
N/A
Protected

Academic year: 2021

Membagikan "procedure identitas; forward; (* memperkenalkan proc identitas yang blm dibuat, tp akan sering dipakai di procedure2 diatasnya *)"

Copied!
5
0
0

Teks penuh

(1)

program geometri_with_record;

{© yunisusanti informatic engineering UNS} uses wincrt;

type titik = record x, y : real; end;

garis = record

p, q : titik; end;

var garisA, garisB : garis; grad, inter, x, y, jrk : real;

procedure identitas; forward; (* memperkenalkan proc identitas yang blm dibuat, tp akan sering dipakai di procedure2 diatasnya *)

{================================= fungsi fungsi boolean ============================================} function ISSETITIK (p, q : titik): boolean; {syarat fungsi gradien, intercept, titikpot, dan jarak}

begin

issetitik := (p.x = q.x) and (p.y = q.y); {issetitik bila xP = xQ dan yP=yQ / x1 = x2 & y1 = y2}

end;

function ISVERTIKAL (p, q : titik): boolean; {syarat fungsi gradien} begin

isvertikal := (p.x = q.x) and (p.y <> q.y); {isvertikal bila x1 = x2 dan y1 tdk sm dgn y2} end;

function ISHORISONTAL (p, q : titik): boolean; {ishorisontal bila y1 = y2 dan x1 tdk sm dgn x2}

begin

ishorisontal := (p.y = q.y) and (p.x <> q.x); end;

{================================= end fungsi boolean ==============================================}

{================================= begin procedure manipulasi ======================================} procedure manipulasi;

{---begin of gradien---} procedure gradienku;

function GRADIEN (p, q : titik): real;

begin (* syarat dari menghitung gradien adl garis TIDAK setitik maupun vertikal *)

if (isvertikal(garisA.p, garisA.q) = false) and (issetitik(garisA.p, garisA.q) = false)

and (isvertikal(garisB.p, garisB.q) = false) and (issetitik(garisB.p, garisB.q) = false) then

begin

grad := (q.y - p.y) / (q.x - p.x); writeln; {rumus menghitung gradien} writeln(' ',grad:5:2); end

else begin clrscr;

gotoXY(15, 8); writeln('ada garis yang setitik/ vertikal, gradien tidak bisa dihitung !!');

gotoXY(15,10); write ('anda harus kembali ke menu !!');readln; identitas; end; end;

begin

clrscr;

gotoXY(15, 6); writeln('" gradien kedua garis "');

(2)

gradien(garisA.p,garisA.q); {memanggil fungsi gradien} gotoXY(15,13); writeln('- gradien garis B'); {untuk gradien dr garis B} gradien(garisB.p,garisB.q); {memanggil fungsi gradien} end;

{---end of gradien---} {--- begin of intercept ---} procedure intersepku;

function INTERCEPT (p,q: titik): real;

begin {intercept bisa dihitung jika garis tdk setitik}

if (issetitik(garisA.p, garisA.q) = false) and (issetitik(garisA.p, garisA.q) = false) then

begin {rumus menghitung intercept} inter := (p.y)-((p.x)*((q.y - p.y) / (q.x - p.x))); writeln; writeln(' ',inter:5:2);

end

else begin

clrscr; {jika garis setitik, maka intercept tdk bs dhitung}

gotoXY(15, 8); writeln('ada garis yang setitik, intercept tidak bisa dihitung !!');

gotoXY(15,10); write ('anda harus kembali ke menu !!');readln; identitas; end; end;

begin

clrscr;

gotoXY(15, 6); writeln('" intercept kedua garis "');

gotoXY(15, 9); writeln('- intercept garis A'); {intercept garis A}

intercept(garisA.p,garisA.q); {memanggil fungsi intercept} gotoXY(15,13); writeln('- intercept garis B'); {intercept garis B}

intercept(garisB.p, garisB.q); {memanggil fungsi intercept} end;

{--- end of intercept ---} {--- begin of titikpot ---} procedure TITIKPOTONG;

var grad1, grad2, int1, int2 : real; begin

with garisA do begin {menghitung gradien dan intersep garis A} grad1 := (q.y - p.y) / (q.x - p.x);

int1 := (p.y)-((p.x)*((q.y - p.y) / (q.x - p.x))); end;

with garisB do begin {menghitung gradien dan intersep garis A} grad2 := (q.y - p.y) / (q.x - p.x);

int2 := (p.y)-((p.x)*((q.y - p.y) / (q.x - p.x))); end;

{dibawah ini bentuk lain fungsi ISPARALEL -> yaitu mengecek apakah kedua gradien sama}

if (grad1 = grad2) then writeln(' tidak bisa dihitung titik potongnya !!') else begin {jika gradien tidak sama maka hitung titikpotong} x := (int2 - int1) / (grad1 - grad2);

y := grad1*x + int1;

writeln(' (',x:2:0,',',y:2:0,')'); end; end;

{--- end of titikpot ---} {--- begin of persamaan garis ---} procedure PERSAMAAN1; {mencetak persamaan dari garis A / garis yg pertama} begin

(3)

begin {persamaan y=intercept bila isvertikal false dan

{ishorisontal true}

if (ishorisontal(garisA.p, garisA.q) = true) then writeln(' y = ',inter:2:1) else {persamaan utuh / y=gradX + intercept jika

{isvertikal dan ishorisontal false} begin writeln(' y = ',grad:2:1,'x + ',inter:2:1,''); end;

end

else writeln(' x = ',garisA.p.x); {pers x=pX jika garisnya vertikal} end;

procedure PERSAMAAN2; {mencetak persamaan garis B / garis kedua} begin

if (isvertikal(garisB.p, garisB.q) = false) then begin

if (ishorisontal(garisB.p, garisB.q) = true) then writeln(' y = ',inter:2:1) else

begin writeln(' y = ',grad:2:1,'x + ',inter:2:1,''); end; end

else writeln(' x = ',garisB.p.x); end;

{--- end of persamaan garis ---} begin

clrscr;

gradienku; readln; {memanggil/ menampilkan gradien dan intercept} intersepku; readln;

clrscr; {menampilkan persamaan garis }

gotoXY(10, 6); writeln('" persamaan garis A dan garis B "');writeln; persamaan1; writeln; persamaan2; readln;

clrscr; {menampilkan titik potong}

gotoXY(10, 6); writeln('" titik potong garis A dan garis B "');writeln; titikpotong;

writeln; writeln;

write(' # press -enter- to back to menu... '); readln;

identitas; {kembali ke identitas / menu} end;

{================================= end procedure manipulasi =======================================} {================================= begin menghitung jarak =========================================} procedure jarakqu;

function JARAK (p, q : titik): real ; begin

jrk := sqrt(sqr(q.x - p.x) + sqr(q.y - p.y));writeln; {rumus menghitung jarak} writeln(' jarak is ', jrk:5:1);

end; var pil : char; begin

clrscr;

gotoXY(15, 7); writeln('" ingin menghitung jarak titik dari garis mana "'); gotoXY(15, 9); writeln('a. garis A B. garis B ');

gotoXY(13,18); write ('silahkan pilih !! '); readln(pil); if pil = 'a' then {jika ingin menghitung jarak titik dari garis A} begin {syarat menghitung jarak jika tidak setitik} if (issetitik(garisA.p, garisA.q) = false) then

jarak(garisA.p, garisA.q) else begin

clrscr;

gotoXY(15, 8); writeln('garis setitik, jarak tidak bisa dihitung !!'); gotoXY(15,10); write ('anda harus kembali ke menu !!');end;

end;

(4)

begin

if issetitik(garisB.p, garisB.q) = false then jarak(garisB.p, garisB.q)

else begin

clrscr; {jika garis ternyata setitik}

gotoXY(15, 8); writeln('garis setitik, jarak tidak bisa dihitung !!'); gotoXY(15,10); write ('anda harus kembali ke menu !! ');end; end;

readln;

identitas; {kembali ke menu utama / identitas} end;

{==================================== end menghitung jarak =======================================}

{================================= begin procedure cetaktitik ====================================} procedure CETAKTITIK;

var i : byte; begin

clrscr;

gotoXY(19, 6); writeln('" hasil cetak titik "');

gotoXY(15, 8); writeln('---'); gotoXY(15, 9); writeln('-- nama garis titik ke x y --'); gotoXY(15,10); writeln('---'); with garisA do {mencetak titik garis A}

begin writeln('garis a':25, '1':11, p.x:9:0, p.y:7:0);

writeln('garis a':25, '2':11, q.x:9:0, q.y:7:0); writeln; end;

with garisB do {mencetak titik garis B}

begin writeln('garis b':25, '1':11, p.x:9:0, p.y:7:0); writeln('garis b':25, '2':11, q.x:9:0, q.y:7:0); end;

writeln;

gotoXY(15,21); write('please select -enter- untuk menghitung jarak 2 titik !! '); readln;

jarakqu; {memanggil proc untuk menghitung jarak} end;

{================================= end procedure cetaktitik ========================= ============}

{================================= begin procedure inputdata =====================================} procedure INPUTDATA;

procedure garissatu; {input untuk garis A} begin

clrscr;

gotoXY(15,7); writeln('" inputkan 2 buah titik untuk garis A " '); writeln;writeln; writeln(' " titik ke (1) "');

with garisA do begin

write(' nilai x = '); readln(p.x);

write(' nilai y = '); readln(p.y); writeln; end;

writeln(' " titik ke (2) "'); with garisA do

begin

write(' nilai x = '); readln(q.x);

write(' nilai y = '); readln(q.y); writeln; end;

end;

procedure garisdua; {input untuk garis B} begin

clrscr;

gotoXY(15,7); writeln('" inputkan 2 buah titik untuk garis B" '); writeln;writeln; writeln(' " titik ke (1) "');

with garisB do begin

(5)

write(' nilai x = '); readln(p.x);

write(' nilai y = '); readln(p.y); writeln; end;

writeln(' " titik ke (2) "'); with garisB do

begin

write(' nilai x = '); readln(q.x);

write(' nilai y = '); readln(q.y); writeln; end;

end; var pil : char; label 1;

begin

garissatu; garisdua; 1: clrscr;

gotoXY(15, 6); writeln('" ingin manipulasi titik atau garis "'); gotoXY(15, 8); writeln('a. titik');

gotoXY(15,10); writeln('b. garis');

gotoXY(15,13); write('silahkan pilih !! '); readln(pil);

if pil = 'a' then cetaktitik; {jika ingin manipulasi titik/ cetak titik dan menghitung jarak}

if pil = 'b' then manipulasi {jika ingin manipulasi garis/ gradien, intersept, dll} else goto 1;

end;

{================================ begin procedure inputdata ======================================}

{================================= begin procedure identitas =====================================} procedure IDENTITAS;

label 1;

var pil : char; begin

1: clrscr;

gotoXY(15, 9); write('- n a m e " yuni susanti "'); gotoXY(15,11); write('- n i m " M0507054 "');

gotoXY(15,13); write('- program name " manipulasi perhitungan dasar geometri "'); gotoXY(15,15); write('- d a t e " 6 Maret 2008, at 07.39 pm "');

gotoXY(25,21); write('select (a) to start, and (b) to quit '); gotoXY(25,23); write('then press enter !! '); readln(pil); if pil = 'a' then inputdata; {memanggil procedure inputdata} if pil = 'b' then begin

clrscr;

gotoXY(15, 6); write('Thanks 4 Use This Program Of Geometry Manipulation !!!');

gotoXY(15,10); write('... press any key to quit ^^ ... '); readkey; donewincrt;

end

else goto 1; {jika pil selain a/ b maka akan kembali ke label 1} end;

{================================= end procedure identitas =======================================}

{================================= MAIN program ==================================================} begin

screensize.x := 90; {lebar screen horisontal/ x } screensize.y := 400; {lebar screen vertikal/ y } identitas;

end.

Referensi

Dokumen terkait

Hasil kompresi dari aplikasi memungkinkan pengguna dapat mengirimkan karakter pesan hingga 21% lebih banyak dari batas maksimal dengan biaya satu kali pengiriman, tergantung

Firmware OpenWRT terdiri dari dua versi yaitu White-Russian dan Kamikaze, dan yang akan digunakan pada wireless router ini adalah versi White- Russian 0.9, versi ini dipilih

Proses uji coba jadwal mata pelajaran adalah proses penyimpanan untuk data jadwal mata pelajaran, perubahan data untuk data mata pelajaran yang telah tersimpan

Pada Skripsi ini penyusun melakukan penelitian dengan merancang sebuah aplikasi kompresi SMS yang ditujukan pada HP berbasis Java, karena pada HP jenis ini di dalamnya telah

 Foun adalah suatu kata yang digunakan untuk menamai orang, ben da, hewan, tempat, dan konsep abstrak. #ata benda bahasa Inggris ini merupakan satu dari delapan part of

1) Produsen susu formula tidak punya cukup kesadaran bahwa konsumen susu formula di negara berkembang seperti Indonesia adalah ibu-ibu yang kurang pendidikannya,

Adaptor merupakan komponen yang cukup vital dalam pembuatan alat ini sebagai pengubah tegangan 220 Vac menjadi 5 Vdc untuk suplai daya mikrokontroler, catu daya atau

Permasalahan Proses pemesanan jasa bus tersebut biasanya dilakukan secara konvensional, dimana penumpang harus mendatangi konter penjualan tiket untuk membeli tiket dan kemudian