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).