Pengurutan data dan pencarian data tanpa menggunakan array

January 5, 2009

3 min read.

program tugas_takehome;
(**************************
*PROGRAM INI DIBUAT OLEH: *
*SAKTI DWI CAHYONO *
*613081029 *
*D3IF-32-01 *
*h1zbullah@yahoo.co.id *
***************************)
uses crt;
type
data=record {tipe bentukan untuk menyimpan data user}
nilai:integer;
end;
var
i,j,c,n:integer;{variabel i,j untuk perulangan. c untuk data yang dicari. n banyak data}
fh:file of data;{fh variabel file untuk menyimpan data, yang digunakan untuk pengurutan dan pencarian}
simpan:text;{variabel file text yang digunakan untuk menyimpan hasil perhitungan program}
td:data;{variabel yang digunakan untuk membaca data dan menulis data pada file fh}
tstring:string;{variabel untuk menampung, data ditemukan di urutan mana saja}
cari:boolean;{variabel yang menandakan apakah data ditemukan}

procedure turun(d:integer);{procedure yang digunakan untuk animasi turun, angka yang kita cari}
begin
randomize;
textcolor(random(16));{random bilangan untuk warna}
for j:=1 to 24 do{perulangan dari atas sampai bawah}
begin
gotoxy(2+d*5,j);
write(c);
gotoxy(2+d*5,j-1);
write(' ');
delay(100);
end;
textcolor(white);
end;

function caridata:boolean;{function untuk pencarian data pada file, dengan mencari c}
var tmpsc:string;
begin
caridata:=false;
for i:=0 to n-1 do{perulangan dari awal ke akhir file}
begin
seek(fh,i);
read(fh,td);
if td.nilai=c then{bandingkan nilai}
begin
caridata:=true;
str(i+1,tmpsc);
tstring:=tstring+tmpsc+' ';{jika sama tstring di tambah dengan urutan ke}
turun(i);{jalankan procedure turun untuk membuat animasi turun}
end;
end;
end;

{procedure yg digunakan untuk menginsert data ke file, jadi ketika kita menginput dan simpan ke file
dalam keadaan terurut}
procedure insertsdata;
var l,k:integer;
tempd:data;
check:boolean;
begin
check:=false;
for l:=filesize(fh)-1 downto 0 do{perulangan dari akhir file ke awal}
begin
seek(fh,l);
read(fh,tempd);
if (tempd.nilai>td.nilai) then{jika nilai pd file lebih besar dari nilai inputan}
begin
check:=true;
k:=l;{masukan urutan l ke variabel k, variabel k menyimpan tempat yang seharusnya ditempati data yang kita input}
end;
end;
if check then {jika ada nilai yg lebih kecil}
begin
for l:=filesize(fh)-1 downto k do {menurunkan data}
begin
seek(fh,l);
read(fh,tempd);
seek(fh,l+1);
write(fh,tempd);
end;
seek(fh,k);{menulis data inputan ke posisi k}
write(fh,td);
end
else
begin {tulis data ke urutan paling akhir}
seek(fh,filesize(fh));
write(fh,td);
end;
end;

begin
{inisialisasi variable}
clrscr;
tstring:='';
assign(simpan,'data.txt');{file yang digunakan untuk output}
rewrite(simpan);
assign(fh,'data.tmp');{file yang digunakan sebagai perhitungan}
rewrite(fh);
reset(fh);
write('masukan jumlah data : ');
readln(n);
for i:=1 to n do{perulangan input data sebanyak n}
begin
write('masukkan data ke-',i,' : ');
readln(td.nilai);
write(simpan,td.nilai,' ');{menyimpan data tak terurut ke file simpan}
insertsdata;{sisipkan ke file fh}
end;
cari:=false;
repeat{perulangan program}
clrscr;
for i:=0 to filesize(fh)-1 do{menuliskan data terurut di atas layar}
begin
seek(fh,i);
read(fh,td);
gotoxy(2+i*5,1);
write(td.nilai);
end;
writeln;
write('data yang dicari = ');
readln(c);{input data yang dicari}
if caridata then {jika ditemukan perulangan berakhir}
cari:=true
else
begin
writeln('angka tidak ditemukan');{jika tidak tulis pesan dan ulangi}
readln;
end;
until cari=true;
reset(simpan);
append(simpan);
writeln(simpan,' ');{mengganti baris file simpan}
for i:=0 to filesize(fh)-1 do{menulis data terurut ke file simpan}
begin
seek(fh,i);
read(fh,td);
write(simpan,td.nilai,' ');
end;
writeln(simpan,' ');
write(simpan,c,' ditemukan di urutan ke ',tstring);{menuliskan hasil pencarian ke file simpan}
erase(fh);{menghapus file fh}
close(simpan);{menutup file}
close(fh);
readln;
end.
{^_^}