Jumat, 02 Januari 2009

latihan soal menjelang UAS

program tugas;
uses crt;
type
mhs=record
nim: longint;
nama, alamat: string;
ipk: real;
end;

tab=array [1..99] of mhs;

var
t: tab;
i, j, p, n: integer;

procedure input (var a: tab; n: integer);
var
i: integer;
begin
for i:=1 to n do
begin
write('NIM : ');
readln(a[i].nim);

write('Nama : ');
readln(a[i].nama);

write('Alamat : ');
readln(a[i].alamat);

write('IPK : ');
readln(a[i].ipk);
writeln;

end;
end;

procedure bubble_sort (var a: tab; n: integer);
var
i, j: integer;
tmp: longint;
begin
for i:=n downto 2 do
for j:=2 to i do
if (a[j-1].nim > a[j].nim) then
begin
tmp:= a[j-1].nim;
a[j-1].nim:= a[j].nim;
a[j].nim:= tmp;
end;
end;

procedure insertion_sort (var a: tab; n: integer);
var
i, j: integer;
tmp: longint;
begin
for i:=2 to n do
begin
tmp:= a[i].nim;
j:= i;
while (j > 1) and (tmp < a[j-1].nim) do
begin
a[j].nim:= a[j-1].nim;
j:= j-1;
end;
a[j].nim:= tmp;
end;
end;

procedure selection_sort (var a: tab; n: integer);
var
i, j, max: integer;
tmp: longint;
begin
for i:=n downto 2 do
begin
max:= 1;
for j:=2 to i do
begin
if a[max].nim < a[j].nim then
max:= j;
end;
tmp:= a[max].nim;
a[max].nim:= a[i].nim;
a[i].nim:= tmp;
end;
end;

procedure counting_sort (var a: tab; n: integer);
var
i, j, k: integer;
b: array [1..99] of integer;
begin
for i:=1 to n do
b[a[i].nim]:=0;

for i:=1 to n do
b[a[i].nim]:= b[a[i].nim]+1;

k:=0;
for i:=1 to n do
if b[i] <> 0 then
for j:=1 to b[i] do
begin
k:= k+1;
a[k].nim:= i;
end;
end;

procedure sekuensial_search (var a: tab);
var
idx, i: integer;
begin
for idx:=1 to n do
begin
if a[i].ipk > a[i+1].ipk then
idx:=i;
end;
writeln(a[idx].ipk:0:2);
readln;
end;
{ clrscr;
writeln('Mahasiswa dengan IPK tertinggi adalah: ');
writeln('NIM : ',t[idx].nim);
writeln('Nama : ',t[idx].nama);
writeln('Alamat : ',t[idx].alamat);
writeln('IPK : ',t[idx].ipk:0:2);
readln;
i:=1;
while (i <> x) do
i:= i+1;
if a[i]=x then
idx:= i;
else
idx:=-1;
end;}



{procedure binary_search (a: tab; n, x: integer; var idx:integer);
var
k, l, m: integer;
found: boolean;
begin
readln(x);
k:= a[n];
l:= a[1];
m:= n div 2;

while x <> a[m] do
if x > a[m] then
begin
l:= a[m];
m:= (m+n+1) div 2;

end;}


begin
clrscr;
write('Masukkan jumlah data mahasiswa yang akan di input: ');
readln(n);
writeln('Masukkan data mahasiswa');
input(t,n);

clrscr;
writeln('Pilih procedure pengurutan');
writeln('1. Bubble Sort');
writeln('2. Counting Sort');
writeln('3. Insertion Sort');
writeln('4. Selection Sort');
writeln;
readln(p);

case p of
1: begin
bubble_sort(t,n);
writeln('Mengurutkan dengan Bubble Sort');
readln;
end;
2: begin
counting_sort(t,n);
writeln('Mengurutkan dengan Counting Sort');
readln;
end;
3: begin
insertion_sort(t,n);
writeln('Mengurutkan dengan Insertion Sort');
readln;
end;
4: begin
selection_sort(t,n);
writeln('Mengurutkan dengan Selection Sort');
readln;
end;
end;
{pilih(p);}

for i:=1 to n do
begin
writeln('NIM : ',t[i].nim);
writeln('Nama : ',t[i].nama);
writeln('Alamat : ',t[i].alamat);
writeln('IPK : ',t[i].ipk:0:2);
writeln;
end;
readln;
clrscr;
sekuensial_search(t);

writeln;
end.