Beranda

Jumat, 04 April 2014

Menyimpan dan Memampatkan Data Angka ke dalam File Menggunakan BilanganBerbasis 256

Bilangan berbasis biasa yang kita kenal adalah bilangan berbasis 10 atau disebut desimal yaitu angka yang berjumlah 10 dari angka 0 sampai 9, ada juga bilangan berbasis 2 yaitu bilangan yang terdiri dari 0 dan 1, dan ada juga bilangan yang menggunakan basis 16 atau disebut heksadesimal yaitu bilangan yang tersusun oleh 16 simbol yang terdiri dari angka 0 sampai 9 dan a - f.

Contoh cara untuk mentransformasi dari bilangan berbasis 10 ke bilangan berbasis 2 adalah sebagai berikut, misalnya angka 6 berbasis 10 akan dirubah menjadi bilangan berbasis 2, yaitu dengan cara :
6 : 2 = 3 sisa 0
3 : 2 = 1 sisa 1
1 : 2 = 0 sisa 1


jadi hasilnya disusun terbalik dari hasil di atas menjadi 110 berbasis 2

Untuk mengebalikan bilangan berbasis 2 ke bilangan berbasis 10 yaitu dengan cara sebagai berikut :
110 ditransformasi dengan cara
110 basis 2 = 2^2*1 + 2*1 + 0 = 4 + 2 + 0 = 6

Contoh cara mentransformasi dari bilangan berbasis 10 ke bilangan berbasis 16 adalah sebagai berikut, misalnya angka 500 berbasis 10 akan dirubah menjadi bilangan berbasis 16, yaitu dengan cara :
500 : 16 = 31 sisa 4
 31 : 16 = 1  sisa 15 atau diganti dengan simbol F
  1 : 16 = 0  sisa 1

jadi haslinya menjadi 1F4. Untuk mengembalikan bilangan berbasis 16 menjadi bilangan berbasis 10 dengan cara seperti di atas
1F4 basis 16 = 16^2*1 + 16*15 + 4 = 256 + 240 + 4 = 500

Dengan menggunakan prinsip dasar di atas kita aplikasikan pada bilangan berbasis 256, dan digunakan pada penyimpanan data angka ke dalam file yang dimampatkan dengan menggunakan algoritma di atas.

Saya buat contoh dalam bahasa pemrograman delphi seperti berikut :
function Convert(value:real):string;
var j:int64;
    i:integer;
    e:byte;
    s:string;
begin
  result:='';
  i:=0;
  if value=0 then
  while length(result)0 then
    begin
      value:=strtofloat(copy(s,1,e-1));
      i:=strtoint(copy(s,e+1,length(s)-e));
    end;
      if value>mxint then
      begin
        while value>mxint do
        begin
          value:=value/10;
          inc(i);
        end;
        j:=round(value);
      end else
      begin
        while value0 then
  for i:=1 to round(j) do
    result:=result*10 else
  for i:=1 to -round(j) do
  result:=result/10;
end;

function Invers(data:Array of Char):real;
var i:byte;
    j:real;
begin
  result:=0;
  j:=1;
  for i:=high(data) downto low(data)+1 do
  begin
    result:=result+ord(data[i])*j;
    j:=j*256;
  end;
  result:=result-mxint+1;
  j:=ord(data[low(data)])-127;
  if j>0 then
  for i:=1 to round(j) do
    result:=result*10 else
  for i:=1 to -round(j) do
  result:=result/10;
end;

Sebelum dikompress/dimampatkan :


Setelah dimampatkan :


Setelah dikembalikan ke keadaan semula :


sebagai perbandingan file yang dibuat :


Script lengkapnya dapat di download di sini

2 komentar:

  1. wah... jos gandos... mantep.... sudah saya coba tp untuk data real 10 000 000 ternyata aplikasinya error mas bro...
    mau tanya.... Kalo memampatkan array byte yang panjang ke array byte yang lebih pendek bisa tidak mas??? dan juga mengembalikan array byte panjangnya seperti semula..... matur tingkyu sebelumnya.

    BalasHapus
  2. Tentu saja muncul error, karena program ini di desain terbatas. Insyaallah pada posting berikutnya akan saya perbaiki.

    BalasHapus