Struktur Data
Disusun Oleh :
2019
BAB I
Tipe data
Contoh Program 1
program pertama;
uses wincrt;
var p,l,luas:real;
begin
write('Panjang :');readln(p);
Write('Lebar:');readln(l);
Luas :=p*l;
end.
Contoh Program 2
Program TipeInteger;
uses wincrt;
var A,B,C:integer;
D:real;
begin
write('A=');readln(A);
write('B=');readln(B);
C:=A+B;writeln('A+B=',C);
C:=A-B;writeln('A-B=',C);
C:=A*B;writeln('A*B=',C);
D:=A/B;writeln('A/B=',D:7:2);
Contoh Program 3
program typechar;
uses wincrt;
var A,B:char;
D:byte;
begin
write('Ketik 1 karakter:');readln(A);
end.
TUGAS
program luas_dan_volume_tabung;
uses wincrt;
var r,t:integer;
l,v:real;
begin
l:=(2*(3.14*r*r)+(3.14*(2*r)*t));
v:=(3.14*r*r)*t;
readln;
end.
BAB II
Contoh 1
program contoh1;
uses wincrt;
var p,l,t,vol:real;
begin
write('tinggi : ')readln(t);
end;
begin
MASUKAN (p,l,t);
vol:=p*l*t;
end;
begin
VOLUME (p,l,t,vol);
end.
Contoh 2
program contoh2;
uses crt;
var s:string;
function BOBOT(s:string):integer;
var i,nilai,jumlah:integer;
begin
jumlah:=0;
for i:=1 to length(s) do
begin
nilai:=0;
case s[i] of
'A' , 'a':nilai:=1;
'E' , 'e':nilai:=2;
'O' , 'o':nilai:=0;
'I' , 'i':nilai:=-1;
'U' , 'u':nilai:=-2;
end;
jumlah:=jumlah+nilai;
end;
BOBOT:=jumlah;
end;
begin
end.
Tugas 1
program meghitung_luas;
uses crt;
procedure segitiga;
begin
writeln('LUAS SEGITIGA');
write('Masukkan nilai alas :=');readln(a);
luas:=0.5*(a*t);
end;
begin
segitiga;
end.
Tugas 2
program faktorial;
uses crt;
Function Fakt(N:integer):integer;
begin
if N=0 then
fakt:=1
else
fakt:=N*Fakt(N-1);
end;
var angka,hasil:integer;
begin
clrscr;
hasil:=Fakt(angka);
write('Hasil : ',hasil);
readkey;
end.
BAB III
Rekursif
Contoh Program
PROGRAM SUSUN_PERMUTASI;
uses crt;
const MAX=5;
var A : larik;
C_Permutasi,C_Elemen,I:integer;
Lagi :char;
var I:integer;
temp:char;
begin
if K=N then
begin
B:=SUCC (B);
write(A[I]:3);
end
else
for I:=K to N do
begin
temp:=A[I];
A[I]:=A[K];
A[K]:=temp;
PERMUTASI(B,A,K+1,N);
end;
end;
begin
repeat
clrscr;
repeat
gotoxy(47,1);write(' ');
gotoxy(47,1);readln(C_Elemen);
until C_Elemen<=MAX;
A[I]:=chr(I+64);
clrscr;
writeln;
C_Permutasi:=0;
PERMUTASI(C_permutasi,A,1,C_Elemen);
writeln;
end.
Latihan 1
*Buatlah program untuk menghitung Nilai Faktorial dengan cara Rekursif , bila diketahui:
- Faktorial (0)=1
program deretfibonacci;
uses crt;
var a, b, c, d, f : integer;
begin
clrscr;
writeln;
readln(a);
d := 0;
f := 1;
c := 0;
for b := 1 to a do
begin
c := d + c;
d :=f;
f :=c;
write(c);
write(' ');
end;
readln;
end.
Latihan 2
*Buatlah program untuk menghitung Deret Fibonacci dengan cara Rekursif , bila diketahui :
- Fibo(1)=1
- Fibo(2)=1
Program Faktorial;
uses crt;
var
i, n, x : integer;
begin
clrscr;
writeln('Program Faktorial');
writeln('============');
writeln;
writeln;
if (n <= 0) then
else
begin
x := 1;
for i := 1 to n do
x :=x*i;
end;
readkey;
end.
BAB IV
Tumpukan (Stack)
Contoh Program 1
program Konversi_Infix_Ke_Postfix;
uses crt;
const max_elemen=255;
tumpukan = record
rinci : s255;
atas : 0..max_elemen;
end;
lagi : char;
begin
case tanda_op of
end;
end;
begin
T.Atas:=T.Atas+1;
T.Rinci[T.Atas]:=elemen
end;
begin
pop:=T.Rinci[T.Atas];
T.Atas:=T.Atas-1;
end;
var I : integer;
Temp,kar : char;
T : Tumpukan;
Test : Boolean;
begin
Operator := ['$']+['*']+['/']+['+']+['-'];
begin
kar := Infix[I];
begin
while T.rinci[T.Atas]<>'(' do
write(pop (T):2);
temp:=pop(T);
end
begin
write (pop(T):2);
push (T,Kar)
end
write (kar:2)
end;
if T.Atas <> 0 then
repeat
write (pop(T):2)
until T.Atas = 0;
end;
begin
clrscr;
writeln('-------------------------------------');
writeln;
repeat
readln(infix);writeln;
KONVERSI_CETAK(infix);
writeln;writeln;
readln (lagi);
writeln;
end.
TUGAS 1
program membalik_kata;
uses crt;
tumpukan = record
isi:s255;
atas: 0..elemen;
end;
var t: tumpukan;
i: integer;
kata: s255;
ulang : string;
begin
t.atas:=0;
end;
begin
t.atas:=t.atas+1;
t.isi[t.atas]:= x;
end;
begin
pop:=t.isi[t.atas];
t.atas:=t.atas-1;
end;
begin
clrscr;
writeln;
awalan(t);
writeln('*==========================================*');
writeln;
repeat
clrscr;
push(t, kata[i]);
write(pop(t)); writeln;
writeln;
writeln;
writeln;
clrscr;
writeln;
readln;
clrscr;
end.
BAB V
Contoh program
Program Senarai_Berantai;
uses crt;
data = record
nama : string;
alamat : string;
berikut : simpul;
end;
var
awal,akhir : simpul;
pilih : char;
cacah : integer;
var P : char;
begin
clrscr;
repeat
gotoxy(48,20); write('':10);
until P in ['A'..'H'];
MENU := P;
end;
var B : simpul;
begin
new(B);
with B^ do
begin
berikut := nil;
end;
SIMPUL_BARU := B;
end;
var
baru : simpul;
begin
if N <> 0 then
begin
writeln(copy(garis,1,45));
end;
writeln;
baru := SIMPUL_BARU;
if awal=nil then
akhir:= baru
else
baru^.berikut := awal;
awal := baru;
end;
var
baru : simpul;
begin
if N <> 0 then
begin
writeln(copy(garis,1,46));
end;
writeln;
baru := SIMPUL_BARU;
if awal=nil then
awal := baru
else
akhir^.berikut := baru;
akhir := baru;
end;
procedure TAMBAH_TENGAH;
posisi,i : integer;
begin
writeln(garis); writeln;
repeat
readln(posisi)
else
begin
writeln;
baru := SIMPUL_BARU;
bantu:= awal;
bantu := bantu^.berikut;
baru^.berikut := bantu^.berikut;
bantu^.berikut := baru;
end;
end;
procedure HAPUS_PERTAMA;
begin
begin
awal := awal^.berikut;
end
else
writeln(pesan);
end;
procedure HAPUS_TERAKHIR;
H : integer;
begin
if awal=nil then
begin
writeln(pesan);
H := 0;
end
begin
awal := nil;
akhir:= nil;
H := 1;
end
else
begin
bantu := awal;
bantu := bantu^.berikut;
akhir := bantu;
akhir^.berikut := nil;
H := 1;
end;
if H=1 then
end;
procedure HAPUS_TENGAH;
bantu,bantu1 : simpul;
begin
if cacah=0 then
begin
writeln(pesan); writeln;
end
else
begin
writeln(copy(garis,1,35)); writeln;
repeat
gotoxy(37,5); write('':5);
readln(posisi);
else
begin
bantu := awal;
bantu:= bantu^.berikut;
bantu1 := bantu^.berikut;
bantu^.berikut := bantu1^.berikut;
bantu1^.berikut := nil;
dispose(bantu1);
end;
end;
end;
procedure BACA_SENARAI;
i : integer;
begin
i := 1;
writeln(copy(garis,1,42)); writeln;
bantu := awal;
if bantu=nil then
writeln(pesan)
else
begin
writeln('':15,'Alamat: ',bantu^.alamat);
bantu := bantu^.berikut;
inc(i);
end;
end;
{PROGRAM UTAMA}
begin
cacah := 0;
awal := nil;
akhir := nil;
repeat
pilih := MENU;
clrscr;
case pilih of
'A' : TAMBAH_AWAL(1);
'B' : TAMBAH_TENGAH;
'C' : TAMBAH_AKHIR(1);
'D' : HAPUS_PERTAMA;
'E' : HAPUS_TENGAH;
'F' : HAPUS_TERAKHIR;
'G' : BACA_SENARAI;
end;
dec(cacah)
until pilih='H'
end.
TUGAS
Program Hitung_Ungkapan_Postfix;
Uses crt;
Const Max=80;
Operand =['0'..'9'];
Operator =['*','/','+','-','^'];
tumpukan =^Elemen;
elemen =record
Huruf :char;
Angka :real;
Berikut :Tumpukan;
End;
Salah : Boolean;
Lagi : char;
Hitungan : real;
Salah : Boolean;
I1,I2 : char;
Begin
Salah:=false;
N:=length(inf);
if N<=2 then
Salah:=true
Salah:=true
Else
Begin
Kar_Sah:=operand+operator+['(',')'];
C_Buka:=0; C_Tutup:=0;
Begin
I1:=Inf[I] ;I2:=Inf[I+1];
Begin
Salah:=true;
I:=N-1;
End
End;
Begin
For I:=1 to N do
Case Inf[1] of
')':C_Tutup:=succ(C_Tutup);
')':C_Buka:=succ(C_Buka);
End
Else
Begin
Salah:=true;
I:=N
End;
If C_Tutup>C_BUka then
Salah:=true
End
End;
CEK_NOTASI:=Salah
End;
var Baru:Tumpukan;
Begin
New(Baru);
Baru^.Huruf:=Hrf;
baru^.Angka:=Digit;
if T=nil then
Begin
T:=Baru;
T^.Berikut:=nil
End
Else
Begin
Baru^.Berikut:=T;
T:=Baru
End
End;
Begin
Bantu:=T;
Hrf:=T^.Huruf;
Digit:=T^.Angka;
T:=T^.Berikut;
Dispose (Bantu)
End;
Var I : integer;
Buram : real;
Begin
Case Tanda_Op of
'^' : VALENSI:=3;
'*','/' : VALENSI:=2;
'+','-' : VALENSI:=1;
'(' : VALENSI:=0;
End
End;
Procedure OPER;
Begin
POP (T,Temp,Buram);
J:=J+1;
Write (Temp:2);
Postfix[J]:=Temp
End;
Begin
T:=nil;
Begin
Kar:=Infix[I];
If Kar='(' then
PUSH (T,Kar,0)
Begin
POP (T,Temp,Buram)
End
begin
OPER;
PUSH (T,Kar,0)
End
Else
Begin
J:=J+1;
Write (kar:2);
Postfix[J]:=Kar
End
End;
if T<>nil then
Repeat
OPER
Until T=nil;
End;
Hsl : real;
Begin
Nol:=false;
Case op of
Else nol:=true;
End
End;
Begin
begin
Kar:=postfix [I];
Begin
POP (awal,temp,dua);
POP (awal,temp,satu);
HASIL (Kar,satu,dua,nol,hsl);
End
ELse
Begin
Val (Kar,Kode,kode1);
End
End;
Begin
POP (awal,temp,satu);
Hitungan:=Satu
End
End;
Begin
Repeat
Clrscr;
Write ('--------------------------------');
Writeln ('-----------------------------------');
Writeln;
Readln (infix);writeln;
if CEK_NOTASI (infix) then
Else
Begin
Cacah:=0;
INFIX_KE_POSTFIX (infix,postfix,cacah);
Writeln;writeln;
HITUNG_UNGKAPAN (Cacah,postfix,hitungan,salah);
if salah then
begin
End
Else
begin
Writeln(Hitungan:0:0)
End;
End;
Writeln;
End.
BAB VII
Antrian (Queue)
Contoh program
program Ilustrasi_Antrian;
uses crt;
const max_elemen=10;
Depan,Belakang,Pilih : Integer;
Elemen : Char;
Procedure KOTAK;
Var I:integer;
Begin
Gotoxy (20,15);
Gotoxy (20,16);
Writeln('<-- Masuk');
End;
Begin
Gotoxy(18+4*R,16);
Write(X);
End;
Begin
Kosong:=(depan=belakang)
End;
Begin
Else Belakang:=Belakang+1;
Begin
Antrian[Belakang]:=X;
LETAKKAN(X,Belakang)
End
else
Begin
Gotoxy(40,9);
Write('Antrian Sudah Penuh');
Repeat
Until keypressed;
Gotoxy(40,9);
If Belakang=0 then
Belakang:=Max_Elemen
End
End;
Begin
If Depan=Max_Elemen then
Depan:=1
Else
Begin
Depan:=Depan+1;
Hapus:=Antrian[Depan]
End
End;
Begin
Clrscr;
KOTAK;
Depan:=0; Belakang:=0;
Repeat
For Pilih:=5 to 9 do
Begin
End;
Gotoxy(1,1);
Writeln('-------------------');
Writeln;
Writeln('2.Menghapus Elemen');
Writeln('3.Selesai');
Writeln;Writeln;
repeat
gotoxy(22,9); readln(pilih)
case pilih of
1:begin
Gotoxy (40,5);
Writeln('Menambah Elemen');
Gotoxy (40,6);
Writeln('-----------------------');
Gotoxy (40,8);
Readln (Elemen);
TAMBAH (Antrian,Elemen);
End;
2:begin
Begin
Elemen:=HAPUS(Antrian);
LETAKKAN(' ',Depan)
End
Else
Begin
Gotoxy (30,9);
Writeln('Antrian Kosong...');
Elemen:=readkey;
End
End
End;
Until Pilih=3
End.
TUGAS
*Buatlah Program untuk simulasi tempat parkir dengan memanfaatkan struktur antrian.
Program Parkiran;
Uses Crt;
Kanan = 75;
UpBound = 5;
LowBound = 1;
X,Y,Mentok : Byte;
Procedure init;
Procedure gerak;
End;
Antrian = object
Noel : integer;
Procedure insertion;
Procedure deletion;
Procedure doproses;
End;
Procedure Orang.Init;
Begin
End;
Procedure Orang.Gerak;
Begin
repeat
GotoXY(X,Y); Write(Badan[1]);
GotoXY(X,Y+1); Write(Badan[2]);
GotoXY(X,Y+2); Write(Badan[3]);
If X = 75 Then
Begin
GotoXY(X,Y); Clreol;
GotoXY(X,Y+1); Clreol;
Delay(20);
End;
Until X = Mentok;
End;
Procedure Antrian.input;
Begin
End;
Procedure Antrian.create;begin
GotoXY(1,19);
Write('________________________________________________________________________________ ');
GotoXY(1,22);
Write('________________________________________________________________________________ ');
GotoXY(1,27);
Write('________________________________________________________________________________ ');
GotoXY(1,30);
Write('________________________________________________________________________________ ');
End;
Procedure Antrian.Insertion;
Begin
Begin
GotoXY(3,21);
gotoxy(3,21);
write(' ');
Noel := UpBound;
End
Else
Begin
Inc(Noel); Queue[Noel].Init;
Queue[Noel].Gerak;
End;
End;
Procedure Antrian.Deletion;
Var I : integer;
Front : Orang;
Begin
Begin
GotoXY(59,21);
End
Else
Begin
Dec(Noel);
readln;
GotoXY(35,29); clreol;
Front := Queue[1];
Front.Mentok := 75;
Front.X := 72;
Front.Gerak;
End;
End;
Procedure Antrian.DoProses;
Begin
create;
Noel := 0;
Repeat
Textcolor(15); Input(Menu);
GotoXY(1,23); Clreol;
Case Menu Of
'1' : Insertion;
'2' : Deletion;
End;
End;
{* PROGRAM UTAMA *}
Begin
Clrscr;
queue.doproses;
End.
Mobil Masuk
Pengurutan (Sorting)
Contoh Program
program sorting;
uses crt;
var
VEKTOR:LARIK;
BANTU : REAL;
BEGIN
BEGIN
LOKASI:=I;
FOR J:= I + 1 TO N DO
IF X [LOKASI]>X[J] THEN
LOKASI:=J;
BANTU:=X[I];
X [I]:=X[LOKASI];
X [LOKASI] :=BANTU
END
END.
VAR I:INTEGER;
BEGIN
FOR I:=1 TO N DO
BEGIN
WRITE (X[I]:8:2);
WRITELN
END
END;
BEGIN
CLRSCR;
BANTU:=1;
BEGIN
READ(VEKTOR[I]);
WRITE(' ');
IF I=BANTU*10 THEN
BEGIN
BANTU:=BANTU + 1;
WRITELN
END
END;
WRITELN ('-----------------------------------------');
WRITELN;
WRITELN;
WRITELN; WRITELN;
WRITELN;
END;
Tugas1
program bubble_sort;
uses crt;
type
var
i,n:integer;
a:data;
var c:integer;
begin
c:=a;
a:=b;
b:=c;
end;
procedure tampil(a:data);
var i:integer;
begin
for i:=1 to n do
write (a[i]:5);
writeln;
end;
var i,j:integer;
begin
begin
tampil(a);
begin
tampil(a);
end;
end;
end;
begin
clrscr;
for i:=1 to n do
begin
end;
writeln;
tampil(a);
writeln;
writeln;
buble(a);
tampil(a);
writeln;
readln;
end.
Tugas2
*Buatlah program untuk mengurutkan data dengan menggunakan metode insertion sort
program insertion_sort;
uses wincrt;
var
jmldata,i,j:integer;
data,x:array[1..100] of integer;
procedure asc_insert;
var temp:integer;
begin
begin
temp:=data[i];
j:=i-1;
while (data[j]>temp)and(j>0)do
begin
data[j+1]:=data[j];
dec(j);
end;
data[j+1]:=temp;
end;
writeln('urutan datanya adalah : ');
begin
write(data[i],' ');
end;
readln;
end;
begin
clrscr;
readln(jmldata);
begin
readln(data[i]);
end;
asc_insert;
readln;
end.
BAB XII
SEARCHING
Contoh program
PROGRAM MENCARI_DATA
USES CRT;
var
data:angka;
var i:integer;
begin
for i := 1 to n do
begin
readln (data[i]);
end;
end;
Ada:=False;
Atas:=n;
Bawah:=1;
Begin
Atas:=Tengah - 1
Bawah := Tengah + 1
Else
Begin
Ada:=True;
Posisi:=Tengah;
Bawah := Atas + 1;
End;
End;
End;
Begin
clrscr;
readln(n);
Input(n);
readln(cari);
CariBiner(n,indeks,cari);
readln;
end.
TUGAS
uses wincrt;
Var
ketemu :boolean;
Begin
for i:=1 to x do
begin
end;
for i := 1 to x do
begin
write(arr[i],' ');
end;
for i:=1 to x do
begin
if (arr[i]>arr[j+1]) then
begin
temp:=arr[i];
arr[i]:=arr[j+1];
arr[j+1]:=temp;
end;
end;
writeln;
for i:=1 to x do
begin
end;
writeln;
readln(cari);
kiri:=arr[x];
kanan:=1;
ketemu:=false;
while not(ketemu) do
begin
If arr[tengah]=cari then
begin
ketemu:=true;
end
kiri := tengah - 1
else
kanan:= tengah+1;
begin
ketemu:=true;
end;
end;
readln;
end.