Monday, August 9, 2010

soal 2a

program list1;
uses crt;
type list = ^node;
node=record
data: record
kode:string[5];
harga:real;
end;
next:list;
end;

var
L:list;

Procedure inisialisasi(var L:list);
begin
L:=nil;
end;

Procedure tambahbarusimpul(kode:string;harga:real; var L:List);
var
pbaru,ekor:list;
begin
ekor:=L;
if ekor <> NIL then
begin
new(pbaru);
pbaru^.data.kode:=kode;
pbaru^.data.harga:=harga;
pbaru^.next:=NIL;

while ekor^.next<>nil do
ekor:=ekor^.next;
ekor^.next:=pbaru;

end
else
begin
new(L);
L^.data.kode:=kode;
L^.data.harga:=harga;
L^.next:=NIL;
end;
end;


procedure cetaksenarai(L:list);
var
ekor:list;

begin
ekor:=L;
if ekor <> NIL then

while ekor<>nil do
begin
writeln(ekor^.data.kode);
writeln(ekor^.data.harga:8:2);
ekor:=ekor^.next;
end
else
writeln('kosong');
writeln;
end;

procedure cariganti(var a:list);

var
bantu: list;
kode :string[5];

begin
if a = nil then Writeln('List tidak ada')
else
begin
write('masukkan kode barang : ');
readln(kode);

bantu :=a;

while (bantu<> nil) Do
begin
if bantu^.data.kode= kode then
bantu^.data.harga:=bantu^.data.harga*1.5;
bantu:=bantu^.next;
end;
end;
end;


BEGIN
inisialisasi(L);
cariganti(L);
tambahbarusimpul('a1123',10000,L);
tambahbarusimpul('a1124',11000,L);
cetaksenarai(L);
cariganti(L);
cetaksenarai(L);
readln;
end.

Thursday, August 5, 2010

pembahasan radix short

PEMBAHASAN PROGRAM

berikut merupakan pembahasan dari tulisan ini

http://laksonoadi.blogspot.com/2010/08/radix-short-dengan-pascal.html

Implementasi dari algoritma tersebut dibuat menggunakan bahasa pascal, dengan menggunakan random pada penginputan kemudian Array A adalah array input dan array B adalah array A yang sudah terurut kanan dan Array C adalah array A yang sudah terurut.

PROGRAM UTAMA

program radix_sort;

uses crt;

type list = array [1..10]of integer;

var

list1,list2,list3 :list;

b:integer;

i,k,jum,max:byte;

//fungsi pangkat

function pangkat(a : integer; b : integer) : integer;

var i : integer; temp : integer;

begin

temp := 1;

for i := 1 to b do

begin

temp := temp * a;

end;

pangkat := temp;

end;

//fungsi input

procedure input(var a,b,c:list;max:integer);

begin

for i:=1 to max do

begin

a[i]:=random(999);c[i]:=a[i];b[i]:=a[i];

end;

end;

Keterangan:

a: 134 b: 134 c: 134

251 251 251

224 224 224

352 352 352

Jadi array a,b,c pada proses awal input nilainya adalah sama

//PROCEDURE LEBAR => untuk mengetahui lebar angka

procedure lebar(var jum:byte;a:list;max:byte);

var i,j:byte;

begin

j:=0;

jum:=0;

for i:=1 to max do

begin

b:=a[i];

while (b<>0) do

begin

b:=b div 10;

j:=j+1;

end;

if (jum

j:=0;

end;

end;

Keterangan:

For i:=1 to max (max=4)

i=1, j=0

b:=a[i]

b:=a[1] = 134

Periksa apakah b<>0 ? Ya

b:= b div 10

b:= 134 div 10

b:= 13

j:=j+1

j:=0+1=1

b:=13 dan b<>0 maka

b:= b div 10

b:= 13 div 10

b:= 1

j:=j+1

j:=1+1=2

b:=1 dan b<>0 maka

b:= b div 10

b:= 1 div 10

b:= 0

j:=j+1

j:=2+1=3

If (0<3)>

Jum:=3

J:=0

//FUNGSI PENGURUTAN RADIX

procedure radix(var a,c:list;jum,max:byte);

var e,i,j,k,konter:byte;

b:integer;

begin

for i:=1 to jum do

begin

konter:=0;

for e:=0 to 9 do

begin

for j:=1 to max do

begin

b:=(a[j]div(pangkat(10,i-1))) mod 10;

if (b=e) then

begin

konter:=konter+1;

c[konter]:=a[j];

writeln('berubah pada saat i=',i,' bilangan=',e,' dan urutan ke=',j);

writeln('yang di konter=',konter,' adalah ',c[konter]);

end;

end;

end;

writeln;

writeln;

for k:=1 to max do

begin

a[k]:=c[k];

end;

end;

end;

for i:= 1 to jum do (jum=3)

konter=0

for e=0 to 9 do

for j:=1 o max(max=4)

j=1,i=1,e=0

b=a[j] div(pangkat(10,i-1)) mod 10

b=a[1] div(pangkat(10,i-1)) mod 10

b=134 div(pangkat(10,1-1)) mod 10

b=(134 div (10^0)) mod 10

b=(134 div 1) mod 10

b=4

Jadi, if (b=e) → (4≠0) then lanjutkan sampai e=9

PROGRAM UTAMA

begin

max:=5;

input(list1,list2,list3,max);

lebar(jum,list3,max);

radix(list1,list2,jum,max);

for k:=1 to max do

begin

writeln(list3[k],' ',list1[k]);

end;

end.

KESIMPULAN

Ø Radix sort adalah algoritma pengurutan data yang cepat, efektif dan sederhana

Ø Dalam penggunaannya radix sort bahkan bisa dimodifikasi sehingga bisa digunakan untuk mengurutkan data - data negative, float dan pecahan untuk kasus – kasus tertentu

konsep radix short

posting berikut
http://laksonoadi.blogspot.com/2010/08/radix-short-dengan-pascal.html

merupakan source dari program sederhana yang menggambarkan radix short
berikut ilustrasi yang bisa di gambarkan dari radix short


RADIX SORT

Radix Sort merupakan salah satu algoritma Non-Comparasion Sort (pengurutan tanpa pembandingan). Proses yang dilakukan dalam metode ini adalah mengklasifikasikan data sesuai dengan kategori terurut yang tertentu, dan tiap kategori dilakukan pengklasifikasian lagi, dan seterusnya sesuai kebutuhan, lalu subkategori-kategori tersebut digabungkan kembali.
Secara harfiah Radix dapat diartikan sebagai posisi dalam angka, karena metode ini pertamakalinya mengurutkan nilai-nilai input berdasarkan radix pertamanya, lalu pengurutan dilakukan berdasarkan radix keduanya, dan begitu seterusnya. Pada system desimal, radix adalah digit dalam angka desimal. Dalam system bilangan desimal, digit – digit suatu bilangan dapat dikelompokkan menjadi 10 kelompok, yaitu kelompok “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, dengan demikian harga suatu bilangan dapat diidentifikasikan ke dalam kelompok – kelompok digit tersebut.
Ide dasar dari metode Radix sort ini adalah mengkategorikan data – data menjadi subkumpulan data sesuai dengan nilai radixnya kemudian mengkategorikannya kembali berdasar nilai radix lainnya.

IMPLEMENTASI RADIX SORT

Pengurutan data dengan metoda Radix sort dilakukan dengan cara membandingkan setiap digit bilangan yang akan diurutkan mulai dari digit paling kanan, misalnya

121 076 823 367 232 434 742 936 274

Pertama kali data dibagi-bagi sesuai dengan digit terkanan :
121 076 823 367 232 434 742 936 274
Sehingga dapat ditabelkan :
Kategori Digit Isi Kanan
0 -
1 12
1
2 232, 74
2
3 82
3
4 43
4, 274
5 -
6 07
6, 936
7 36
7
8 -
9 -

Kategori Digit Isi Tengah
0 -
1 -
2 1
21, 823
3 2
32, 434, 936
4 7
42
5 -
6 3
67
7 2
74, 076
8 -
9 -

Kategori Digit Isi (kiri)
0
076
1
121
2
232, 274
3
367
4
434
5 -
6 -
7
742
8
823
9
936

Tabel 1 Hasil Pengkategorian Pertama
Hasil pengkategorian tersebut kemudian digabung kembali menjadi :
121 232 274 823 434 274 076 936 367

Kemudian dilakukan pengkategorian lagi berdasar digit kedua(tengah) :
121 232 274 823 434 274 076 936 367

Sehingga penabelannya dapat dilihat pada table 2
Hasil pengkategorian tersebut kemudian digabung kembali menjadi :
121 823 232 434 936 742 367 274 076

Kemudian langkah ketiga, dilakukan pengkategorian lagi berdasar digit ketiga (terakhir) :
121 823 232 434 936 742 367 274 076

Tabel 1.3 Hasil Pengkattegorian Ketiga
Yang kemudian hasil akhirnya dapat dituliskan :
076 121 232 274 367 434 742 823 936








radix short dengan pascal

program radix_sort;

type list = array [1..10]of integer;
var
list1,list2,list3 :list;
b:integer;
i,k,jum,max:byte;


//fungsi pangkat
function pangkat(a : integer; b : integer) : integer;
var i : integer; temp : integer;
begin
temp := 1;
for i := 1 to b do
begin
temp := temp * a;
end;
pangkat := temp;
end;


//fungsi input
procedure input(var a,b,c:list;max:integer);
begin
for i:=1 to max do
begin
a[i]:=random(999);c[i]:=a[i];b[i]:=a[i];
end;
end;


//fungsi lebar=> untuk mengetahui lebar angka
procedure lebar(var jum:byte;a:list;max:byte);
var i,j:byte;
begin
j:=0;
jum:=0;
for i:=1 to max do
begin
b:=a[i];
while (b<>0) do
begin
b:=b div 10;
j:=j+1;
end;
if (jum
j:=0;
end;
end;

//fungsi pengurutan radix
procedure radix(var a,c:list;jum,max:byte);
var e,i,j,k,konter:byte;
b:integer;
begin
for i:=1 to jum do
begin
konter:=0;
for e:=0 to 9 do
begin
for j:=1 to max do
begin
b:=(a[j]div(pangkat(10,i-1))) mod 10;
if (b=e) then
begin
konter:=konter+1;
c[konter]:=a[j];
writeln('berubah pada saat i=',i,' bilangan=',e,' dan urutan ke=',j);
writeln('yang di konter=',konter,' adalah ',c[konter]);
end;
end;

end;
writeln;writeln;
for k:=1 to max do begin
a[k]:=c[k];
end;
end;
end;



begin
max:=5;
input(list1,list2,list3,max);
lebar(jum,list3,max);
radix(list1,list2,jum,max);
for k:=1 to max do begin
writeln(list3[k],' ',list1[k]);
end;

end.