Struktur Data


SOAL :
1. Buatlah program untuk menyusun permutasi sekumpulan karakter dengan menggunakan rekursi. Jika ada 3 karakter (A,B,C) maka permutasinya adalah 3!
ABC, BAC, CAB, ACB, BCA, CBA.
2. Buatlah laporan mengenai kelebihan dan kekurangan rekursi dan iterasi.
3. Buatlah program yang menampilkan pergerakan karakter masuk ke wadah dan keuar hingga terbaca terbalik.

JAWABAN :
1. program permutasi;
uses crt;
const
max = 10;
type
TPermutasi = array[1..10] of char;
var
Ax : TPermutasi;
I, N : byte;
procedure DoPermutasi (A : Tpermutasi; mulai : byte);
var
I : byte;
temp : char;
begin
if (mulai = N) then
begin
for i := 1 to N do
write (a[i]);
writeln;
end
else
begin
for i := mulai to N do
begin
temp := A[i];
A[i] := A[mulai];
A[mulai]:= temp;
DoPermutasi (A, mulai + 1);
end;
end;
end;

Begin
clrscr;
write('Masukkan N : ');
readln(n);
for i :=1 to N do
Ax[i] := chr (i + 64);
DoPermutasi (Ax, 1);
readln;
end.



2.
Metode Perulangan Kelebihan Kekurangan
Rekursi • Dapat mempermudah solusi karena kemampuan memanggil dirinya sendiri

• Dapat memecahkan masalah yang sulit dengan tahapan yang mudah dan singkat
• Memungkinkan terjadinya overflow pada stack (stack tak lagi mampu menangani permintaan pemanggilan subrutin karena kehabisan memori)
• Untuk menyelesaikan masalah butuh waktu dan jarak karena butuh fungsi panggilan tambahan
• Sulit dipahami
Iteratif • Waktu yang digunakan menyelesaikan masalah lebih singkat karena memory yang digunakan lebih sedikit. • Tidak dapat memanggil dirinya sendiri.



3. Program ArrayStack;
Uses crt;

Const
Max = 6;
var
Top,i : byte;
Choice,temp,e : char;
Stack : array [1..max] of char;

Procedure PushAnim;
begin
for i:=1 to 14-top do
begin
GotoXY(41,1+i); write(' ');
GotoXY(41,2+i); write(temp);
end;
end;

procedure PopAnim(temp:char);
begin {keatas}
for i:= 1 to 8-top do
begin
GotoXY(41,17-i-top); write(temp);
GotoXY(41,17-i-Top); write(' ');
end;

{kesamping}
for i:=1 to 21 do
begin
GotoXY(40+i,7); write(temp);
GotoXY(39+i+1,7); write(' ');
end;

{kebawah}
for i:= 1 to 6+top do
begin
GotoXY(61,2+i); write(' ');
GotoXY(61,3+i); write(temp);
end;
end;

procedure Push(e:char);
begin
inc(top);
Stack[top]:=e;
PushAnim;
end;

procedure Pop(e:char);
begin
if Top <> 0 then
begin
e:=stack[top]; PopAnim(e);
dec(top);
end else
begin
GotoXY(1,7); write('Stack sekarang kosong'); readkey;
GotoXY(1,7); ClrEol;
end;
end;

begin
Writeln('PENGOLAHAN GAMBAR DENGAN STACK');
Writeln('1. Memasukkan (Push) ');
Writeln('2. Mengeluarkan (Pop) ');
Writeln('3. Program Selesai(Quit)');
Writeln('Pilih [1/2/3] = ');
{gotoXY(59,6); write('\');
gotoXY(59,8); write('/');}
GotoXY(56,18); write('Tong Sampah');
GotoXY(39,18); write('Wadah');
gotoXY(37,9); write('\ /');
for i:=1 to 7 do
begin
gotoXY(38,9+i);
if i=7 then write('|_____|')
else write('| |');
end;
gotoXY(57,9); write('\ /');
for i:=1 to 7 do
begin
gotoXY(58,9+i);
if i=7 then write('|_____|')
else write('| |');
end;
Top:=0;
Repeat
gotoXY(19,5); ClrEol;
choice:=readkey; Write(choice);
if choice='1' then
begin
if top<> max then
begin
GotoXY(1,7); write('Masukkan Alphabet= ');
temp:=readkey; write(temp);
push(temp);
GotoXY(1,7); ClrEol;
end
else
begin
GotoXY(1,7); write('Stack sudah penuh');
readkey;
GotoXY(1,7); ClrEol;
end;
end
else if Choice='2' then Pop(temp);
until Choice='3';
clrscr;
End.

0 komentar:

Posting Komentar

Silakan Tinggalken Pesan