• Tidak ada hasil yang ditemukan

Buatlah sebuah program untuk mendeteksi password / kata sandi Gunakan metode single lisked list Jika passwordnya benar, program akan selesai, jika salah maka user akan

diminta memasukkan password kembali.

Jawaban: Program PasswordPascal(input,output); Uses crt; Type Point = ^Rec ; Rec = record Isi : char ; Next : Point ; end; Const

Password = ‘PASCAL’ {karakter passwaord yang harus dimasukkan} Var

i : byte ;

Tekan : char ;

Passwd : boolean ;

Head, Tail, Now : Point ;

Procedure Init; {Inisialisasi pembuatan simpul linked list) Begin

Head := nil ; Tail := nil ; End;

Procedure Push(isi : char); Var

Now : Point ; Begin

New(Now); {buat sebuah simpul baru} If Head = nil then {mendeteksi simpul awal}

Begin

Head := Now ; Tail := Head; End

Else Begin {menyambung simpul baru pada simpul yang telah ada} Tail^.next := Now ;

Tail := Tail^.next ; End ;

Now^.isi := isi ; {mengisi simpul yang baru} Now^.next := nil ;

End ;

Function Check : boolean; {function untuk mengcheck input yang dimasukkan} var

temp : string[20]; Begin

Temp := ‘’ ; Now := Head ;

While Now <> nil do Begin

Temp := Temp + Now^.isi ; Now := Now^.next ;

End ;

If Temp <> Password tehn check := False; End ;

Procedure BuatBingkai(x1, y1, x2, y2 : byte); {buat tampilan aplikasi} Var i : byte;

Begin

Gotoxy(x1,y1); write(#201); GotoXY(x2, y1); write(#187); Gotoxy(x1,y2); write(#200); GotoXY(x2, y2); write(#188); For i := x1 + 1 to x2 - 1 do

Begin

Gotoxy(i, y1) ; write(#205) ; Gotoxy(i, y2) ; write(#205) ; End;

For i := y1 + 1 to y2 - 1 do Begin

Gotoxy(x1, i) ; write(#186) ; Gotoxy(x2, i) ; write(#186) ; End;

End;

Procedure BlueScreen(x1, y1, x2, y2 : byte) ;{mencetak layar bewarna biru}

Begin {prosedur ini sifatnya optional / tidak mesti}

TextAttr := $07; ClrScr ;

Window(x1, y1, x2, y2); {membentuk area layar} TextBackGround(Blue);

ClrScr; Window(1, 1, 80, 25); BuatBingkai(x1, y1, x2, y2);

GotoXY(x1+2, y1+1); write(‘Enter your password : ‘); End;

Procedure Pop; {prosedure penghapus simpul)

Begin

Now := head; Head := head^.next; While Now <> nil do Begin Dispose(Now); Now := head; Head := Head^.next; End; End; (******************** PROGRAM UTAMA ********************) Begin Repeat BlueScreen(25, 8, 60, 10); Init; I := 0; Repeat Tekan := ReadKey; Write(Tekan);

If Tekan <> #13 then Push(Tekan); Inc(i);

Until (Tekan = #13) or (i = 10);{enter ditekan atau panjang = 10} Passwd := Check;

Pop; Until Passwd; End.

07. Buatlah sebuah program animasi yang menampilkan animasi salju berjatuhan. Butiran salju bisa digambarkan dengan sebuah character (misalnya ‘@’). Butiran salju harus

bermunculan dengan posisi acak dan jika ditekan tombol tanda-tambah (+) maka butiran salju akan bertambah satu, dst.

Jawaban : Program Single_Linked_List_FIFO; Uses crt; Const S = ‘@’; Max = 100; Type PKar = ^RecKar; RecKar = record Isi : char; x, y, col : byte; next : Pkar; end; Var

Head, Tail, Now : PKar ; Procedure Push;

Begin

New(Now); {buat sebuah simpul baru) If Head = nil then

Head := Now ; Else

Tail^.next := Now; Tail := Now;

Tail^.next := nil;

Now^.isi := s ; {mengisi simpul yang baru}

Now^.x := random(79) + 1; {mengisi nilai X dengan nilai acak} Now^.col := random(16) ; {mengisi nilai col dengan nilai acak} Now^y := 1 ; End ; Procedure Anim; Var Ch : char; I, jml : byte; Procedure Tekan; Begin Ch := ReadKey ;

If (ch <> #27) and (ch = ‘+’) and (jml < Max) then {menambah salju} Begin

Push ; Inc(jml) ; End;

End;

(*************** Awal Prosedur Animasi *********************) Begin

Repeat

Now := Head;

While (Now <> nil ) do Begin

TextColor(Now^,col) ; {meng’set’ warna tulisan} GotoXY(Now^,x, Now^,y); write(Now^.isi);

If Now^.y = 25 then Now^.y := 1 ; Inc(Now^.y);

Now := Now^.next; End;

Delay(10); ClrScr ; {menghapus layar} If KeyPressed then Tekan ;

Until ch = #27; {sampai tombol ESCAPE ditekan}

End;

Procedure Cursor_Off; assembler; {mematikan kursor sifatnya optional /} { tidak mesti dibuat}

asm

mov ah, 01; mov cx, 2020h; int 10h end;

Procedure Cursor_On; assembler; {menyalakan kursor sifatnya optional untuk dibuat} asm

mov ah, 01; mov cx, 1314h; int 10h end;

(*************** AWAL PROGRAM UTAMA ******************) Begin ClrScr; Head := nil ; Tail := nil ; Cursor_Off; Randomize ; Push ; Anim ; Cursor_On ; End.

08. Buatlah sebuah program yang meminta user untuk memasukan sampai maksimal 10 buah string. Jika string yang diisikan kosong maka program akan berhenti meminta string baru.

Kemudian string-string tersebut akan ditampilkan semua disertai tanda (di-bold) pada string pertama. Jika tombol panah-ke-bawah ditekan, tanda tersebut akan berpindah kestring dibawahnya. Begitu juga jika panah-ke-atas ditekan, maka tanda tersebut akan bergerak kearah string diatasnya. Bila tanda tersebut telah sampai di ujung bawah dari daftar string dan ditekan tombol panah-ke-bawah maka tanda tersebut akan berpindah ke ujung atas dari daftar string. Begitu pula sebaliknya, bila tanda tersebut telah sampai pada daftar string paling atas dan ditekan tombol panah-ke-atas maka tanda akan berpindah ke ujung bawah dari daftar string, begitu pula sebaliknya.

Jawaban :

Program AnimasiTandaBergerak; Uses crt;

Const

Atas = #72 ; {tombol panah arah ke atas} Bawah = #80 ; {tombol panah arah ke atas} Esc = #27 ; {tombol Esc atau ESCAPE} Type Str30 = string[30] ; Point = ^rec ; Rec = record Item : str30 ; Next : point ; Prev : point ; End; Var J : byte ;

Now, Head, Tail : point ;

Procedure Create; {menyatakan nilai pointer awal atau inisialisasi} Begin

Head := nil ; Tail := nil ; Now := nil ; End;

Procedure Push(item : str30) ; {memasukan simpul} Var temp : Point ;

Begin

New(Temp) ; {membuat simpul baru}

If head = nil then Head := temp Else Begin

Temp^.prev := tail ; {menyambung simpul baru} Tail^.next := temp ; {dengan simpul yang telah ada} End;

Temp^.item := item ; Tail := temp ;

Head^.prev := tail ; {menyambung simpul awal ke akhir} End; Procedure Input; Var Item : str30 ; Jumlah : byte ; Begin Clrscr ;

Writeln(‘********* Circular Double Linked List ***********’); Writeln(‘========================================’); Writeln;

Jumlah := 0 ; Repeat

Inc(jumlah);

Write(‘Menu Item Ke – ‘,jumlah, ‘ = ‘); readln(item); If item <> ‘’ then Push(item) ;

Until (item = ‘’ ) or (jumlah = 10); End;

Procedure Pilih ; Begin

Gotoxy(7,j + 7); ClrEol; TextAttr := $07 ;

Write(‘Pilihan Anda : ‘,Now^.item); End;

Procedure Anim ; {prosedur animasi} Var I : byte ;

Tekan : char ; Begin

ClrScr ;

Gotoxy(6,1); Write(‘********* Circular Double Linked List ***********’); Gotoxy(6,2); Write(‘========================================’); Gotoxy(12,4); Write(‘Menu Pilih’);

Gotoxy(12,5); Write(‘==========’); Now := head ;

J := 0 ; Repeat

Inc(j) ;

GotoXY(13, 5 + j) ; write(j,’. ‘,Now^.item); Now := Now^.next ;

Until Now = Head ;

I := 1 ; Now := head ;

Pilih; GotoXY(13,16); TextAttr := $1f; Write(i, ‘. ‘, Now^.item);

Repeat

Case Tekan of

Atas : begin {menggerakkan pilihan keatas} GotoXY(13, i + 5); TextAttr := $07;

Write(i,’. ‘, Now^.item); dec(i); If i < 1 then i := j; Now := Now^.prev; Pilih; GotoXY(13, i + 5); TextAttr := $1f; Write(i,’. ‘, NoW^.item); End;

Bawah : begin {menggerakkan pilihan kebawah} GotoXY(13, i + 5); TextAttr := $07;

Write(i,’. ‘, Now^.item); inc(i); If i > 1 then i := 1; Now := Now^.next; Pilih; GotoXY(13, i + 5); TextAttr := $1f; Write(i,’. ‘, NoW^.item); End; End;

Until Tekan = esc; End;

Begin {main program}

Create; Input; Anim; End.

09. Buatlah suatu program untuk mencari hasil perkalian 2 buah bilangan komplek dalam bentuk rectangular (Z = R + jX).

Listing programnya adalah sbb: Program KaliKomplex;

{Program untuk mencari hasil perkalian 2 bilangan kompleks} {Lengkapi pula program ini dengan komentar di bagian-bagian yang dianggap penting untuk dikomentari}

Uses Crt; Type BilanganComplex = Record R : Real; I : Real; End;

Complex = ^BilanganComplex; {complex bertipe data pointer} Var

R1,I1,R2,I2 : Real; Z1,Z2,ZT : Complex;

Function BilComplex(R,I : Real) : Complex;

{ Fungsi untuk memasukan nilai Real dan Imajiner } Var Dummy : Complex;

Begin New(Dummy); Dummy^.R := R; Dummy^.I := I; BilComplex := Dummy; End;

Function BilReal(C : Complex) : Real; { Fungsi untuk mengambil bilangan real} Begin

BilReal := C^.R; End;

Function BilImajiner(C : Complex) : Real; {Fungsi untuk mengambil bilangan imajiner} Begin

BilImajiner := C^.I; End;

Procedure Tulis(C : Complex); Begin

If BilImajiner(C) < 0 Then Begin

Write(BilReal(C),' - j',Abs(BilImajiner(C))); End

Else If BilImajiner(C) >= 0 Then Begin

Write(BilReal(C),' + j',BilImajiner(C)); End;

End;

Function KaliComplex(C1,C2 : Complex) : Complex; {Fungsi untuk perkalian bilangan komplex :

Z = Z1 x Z2

(R + jX) = (R1 + jX1) x (R2 + jX2)

= (R1 x R2 – X1 x X2) + j(R1 x X2 + R2 x X1)} Var Dummy : Complex;

Begin

New(Dummy);

Dummy^.R := (C1^.R * C2^.R) - (C1^.I * C2^.I); Dummy^.I := (C1^.R * C2^.I) + (C1^.I * C2^.R); KaliComplex := Dummy;

End;

Begin ClrScr;

{Buat JUDUL program yang sesuai untuk masalah ini, di sini!} Write('Z1 = ');Read(R1);Write(' + j');Read(I1);

Write('Z2 = ');Read(R2);Write(' + j');Read(I2); Z1 := BilComplex(R1,I1);

Z2 := BilComplex(R2,I2); ZT := KaliComplex(Z1,Z2);

Write('Nilai Z1 = ');Tulis(Z1);Writeln; Write('Nilai Z2 = ');Tulis(Z2);Writeln; Write('Nilai Z Total = ');Tulis(ZT);Writeln; End.

Simpan file ini dengan nama : LATIH8A.PAS Catatan :

Pada latihan-latihan berikut dibawah ini, hampir sama dengan latihan diatas (LATIH8A.PAS). Jadi untuk latihan berikut ini anda dapat menggunakan LATIH8A.PAS, merubah beberapa bagian dan menyimpannya dengan nama yang lain (sesuai dengan nama latihan yang dikerjakan) .

10. Buatlah suatu program untuk mencari hasil bagi 2 buah bilangan komplek dalam bentuk rectangular (Z = R + jX).

Listing programnya adalah sbb: Program BagiKomplex;

{Program untuk ... --- lengkapi komentar ini dengan benar!--}

{Lengkapi pula program ini dengan komentar di bagian-bagian yang dianggap penting untuk dikomentari}

Uses Crt; Type BilanganComplex = Record R : Real; I : Real; End; Complex = ^BilanganComplex; Var A,B : Real; R1,I1,R2,I2 : Real; Z1,Z2,ZT : Complex;

Function BilComplex(R,I : Real) : Complex; Var Dummy : Complex;

New(Dummy); Dummy^.R := R; Dummy^.I := I;

BilComplex := Dummy; End;

Procedure Tulis(C : Complex); Begin

If BilImajiner(C) < 0 Then Begin

Write(BilReal(C),' - j',Abs(BilImajiner(C))); End

Else If BilImajiner(C) >= 0 Then Begin

Write(BilReal(C),' + j',BilImajiner(C)); End;

End;

Function BagiComplex(C1,C2 : Complex) : Complex; {Fungsi untuk pembagian bilangan komplex :

Z = Z1/Z2 (R + jX) = (R1 + jX1)/(R2 + jX2) = (R1.R2 + X1.X2)/(R2.R2 + X2.X2) + j(R2.X1 – R1.X2)/(R2.R2 + X2.X2)} var Dummy : Complex; Begin New(Dummy); Dummy^.R:=((C1^.R*C2^.R)+(C1^.I*C2^.I))/(SQR(C2^.R)+SQR(C2^.I)); Dummy^.I:=((C2^.R*C1^.I)-(C1^.R*C2^.I))/(SQR(C2^.R)+SQR(C2^.I)); BagiComplex := Dummy; End;

{Awal program induk} Begin

ClrScr;

{Buat JUDUL program yang sesuai untuk masalah ini, di sini!} Write('Z1 = ');Read(R1);Write(' + j');Read(I1);

Write('Z2 = ');Read(R2);Write(' + j');Read(I2); Z1 := BilComplex(R1,I1);

Z2 := BilComplex(R2,I2); ZT := BagiComplex(Z1,Z2);

Write('Nilai Z1 = ');Tulis(Z1);Writeln; Write('Nilai Z2 = ');Tulis(Z2);Writeln; Write('Nilai Z Total = ');Tulis(ZT);Writeln;

End. {Akhir program induk}

11. Buatlah suatu program untuk mencari hasil perkalian 2 buah bilangan komplek dalam bentuk rectangular (Z = R + jX).

Listing programnya adalah sbb: Program BagiKomplex;

{Program untuk ... --- lengkapi komentar ini dengan benar!--}

{Lengkapi pula program ini dengan komentar di bagian-bagian yang dianggap penting untuk dikomentari}

Uses Crt; Type BilanganComplex = Record R : Real; I : Real; End; Complex = ^BilanganComplex; Var A,B : Real; R1,I1,R2,I2 : Real; Z1,Z2,ZT : Complex;

Function BilComplex(R,I : Real) : Complex; Var Dummy : Complex;

Begin New(Dummy); Dummy^.R := R; Dummy^.I := I; BilComplex := Dummy; End;

Procedure Tulis(C : Complex); Begin

If BilImajiner(C) < 0 Then Begin

Write(BilReal(C),' - j',Abs(BilImajiner(C))); End

Else If BilImajiner(C) >= 0 Then Begin

Write(BilReal(C),' + j',BilImajiner(C)); End;

End;

Function TambahComplex(C1,C2 : Complex) : Complex; Var Dummy : Complex;

Begin

Dummy^.R := C1^.R + C2^.R; Dummy^.I := C1^.I + C2^.I; TambahComplex := Dummy; End;

{Awal program induk} Begin

ClrScr;

{Buat JUDUL program yang sesuai untuk masalah ini, di sini!} Write('Z1 = ');Read(R1);Write(' + j');Read(I1);

Write('Z2 = ');Read(R2);Write(' + j');Read(I2); Z1 := BilComplex(R1,I1);

Z2 := BilComplex(R2,I2); ZT := TambahComplex(Z1,Z2);

Write('Nilai Z1 = ');Tulis(Z1);Writeln; Write('Nilai Z2 = ');Tulis(Z2);Writeln; Write('Nilai Z Total = ');Tulis(ZT);Writeln;

End. {Akhir program induk}

Simpan file ini dengan nama : LATIH8C.PAS

12. Buatlah suatu program untuk mencari hasil pengurangan 2 buah bilangan komplek dalam bentuk rectangular (Z = R + jX). Simpan file ini dengan nama : LATIH8D.PAS 13. Buatlah suatu program untuk mencari arus yang mengalir pada rangkaian dibawah

ini, frekuensi = 50 Hz :

R = 10  C = 100 F

V = 220 + j0 Volt I

Listing programnya adalah sbb : Program MencariArus;

{Program untuk ... --- lengkapi komentar ini dengan benar!--}

{Lengkapi pula program ini dengan komentar di bagian-bagian yang dianggap penting untuk dikomentari}

Uses Crt; Type BilanganComplex = Record R : Real; I : Real; End;

Complex = ^BilanganComplex; Var

R,C,XC : Real; V,I,Z : Complex;

Function BilComplex(R,I : Real) : Complex; Var Dummy : Complex;

Begin New(Dummy); Dummy^.R := R; Dummy^.I := I; BilComplex := Dummy; End;

Procedure Tulis(C : Complex); Begin

If BilImajiner(C) < 0 Then Begin

Write(BilReal(C),' - j',Abs(BilImajiner(C))); End

Else If BilImajiner(C) >= 0 Then Begin

Write(BilReal(C),' + j',BilImajiner(C)); End;

End;

Function BagiComplex(C1,C2 : Complex) : Complex; var Dummy : Complex;

Begin

New(Dummy);

Dummy^.R := ((C1^.R*C2^.R) + (C1^.I*C2^.I)) / (SQR(C2^.R) + SQR(C2^.I));

Dummy^.I := ((C2^.R*C1^.I) - (C1^.R*C2^.I)) / (SQR(C2^.R) + SQR(C2^.I));

BagiComplex := Dummy; End;

Begin ClrScr;

{Buat TAMPILAN JUDUL program yang sesuai untuk masalah ini, di sini!} R := 10; C := 100E-6; XC := -(1/(2*3.14*50*C)); Z := BilComplex(R,XC); V := BilComplex(220,0); I := BagiComplex(V,Z);

Write('Nilai Impedansi = ');Tulis(Z);Writeln; Write('Nilai Tegangan = ');Tulis(V);Writeln;

Write('Nilai Arus = ');Tulis(I); Writeln;

End.

Simpan file ini dengan nama : LATIH8E.PAS 7.4. TEST FORMATIF KEGIATAN BELAJAR 6

01. Buatlah program untuk membaca, menyimpan dan menampilkan data berupa informasi pribadi dan nilai beberapa mata kuliah dari sejumlah mahasiswa D-3 program studi Teknik Elektronika Angkatan 200X. Program harus Bahan Ajarar dan terstruktur, serta menggunakan konsep single linked-list (senarai berkait tunggal)

Simpan file ini dengan nama TUGS8_A.PAS.

02. Anda diminta untuk membuat sebuah program animasi yang akan menampilkan seekor “cacing” yang terdiri dari karakter-karakter yang teruntai dan bergerak secara diagonal. Jika cacing tersebut sampai ke sudut layar maka ia akan memantul. Karakter-karakter tersebut di input melalui penekanan tombol keyboard yang akan langsung ditampilkan dilayar. Jika ada tombol yang ditekan ketika cacing sedang bergerak, maka karakter tersebut akan langsung ditambahkan di ekor “cacing” tersebut. Jika tombol tanda-minus (‘-‘) ditekan maka ekor “cacing” akan berkurang satu untuk setiap penekanan tombol kurang tersebut. Program ini akan selesai jika tombol ESC (Escape) ditekan.

Simpan file ini dengan nama TUGS8_B.PAS.

3. Buatlah program untuk mencari arus yang mengalir pada rangkaian dibawah ini, frekuensi = 50 Hz :

R = 10  C = 100 F

R = 45 

L = 100 mH

V = 220 + j0 Volt

Buat juga bentuk program interaktifnya, yang dapat memasukan besaran selain nilai yang dicantumkan di atas. Simpan file ini dengan nama : TGS-8A1.PAS untuk program

dengan nilai yang telah ditetapkan. Simpan file ini dengan nama: TGS-8A2.PAS untuk program bentuk interaktif

4. Buatlah program untuk menghitung daya, jika diketahui nilai R = 90 , L= 85 mH, arus = 23 + j2 ampere, frekuensi = 50 Hz, dimana R dan L seri.

Simpan file ini dengan nama : TGAS8B.PAS.

05.Buatlah program untuk menghitung daya, jika diketahui nilai R = 90 , L= 85 mH, arus = 23 + j2 ampere, frekuensi = 50 Hz, dimana R dan L seri.

Simpan file ini dengan nama : TGAS8B.PAS.

06.Buatlah suatu program untuk mencari hasil pengurangan 2 buah bilangan komplek dalam bentuk rectangular (Z = R + jX).

Dokumen terkait