binnery tree


program konversi;
uses crt;
var i, j, nilai,  code: integer;
    kalimat, kodebiner, subtext, hasil, m, temp, cbaru, bit8 : string;
    lagi : char;
{**Prosedur mengkonversi bilangan desimal ke biner 8 bit**}
function dec2biner8bit(var angka : integer):string;
var bytestr, buf : string;
begin
  bytestr := '';
  repeat
    str(angka mod 2,buf);
    bytestr := buf + bytestr;
    angka := angka div 2;
  until(angka = 0);
  {**Jika panjang bytestr bukan kelipatan 8,**}
  {**maka panjangnya jadikan kelipatan 8**}
  while(length(bytestr) mod 8 <> 0) do bytestr := '0'+bytestr;
  dec2biner8bit := bytestr;
end;


{**Prosedur mengubah kode ASCII  ke bilangan biner**}
function ascii2biner(var kata : string):string ;
var hasil : string;
    kodeascii, i : integer;
begin
  hasil := '';
  for i := 1 to length(kata) do
  begin
    kodeascii := ord(kata[i]);
    hasil := hasil + dec2biner8bit(kodeascii);
  end;
  ascii2biner := hasil;
end;

function dec2biner3bit(var angka : integer):string;
var bytestr, buf : string;
begin
  bytestr := '';
  repeat
    str(angka mod 2,buf);
    bytestr := buf + bytestr;
    angka := angka div 2;
  until(angka = 0);
  while(length(bytestr) mod 3 <>0) do bytestr := '0'+bytestr;
  dec2biner3bit:= bytestr;
end;


{**Prosedur menghitung pangkat suatu bilangan**}
function pangkatbyte(x : integer; n : integer):integer;
var i, hasil : integer;
begin
  hasil := 1;
  for i := 1 to n do
    hasil := hasil*x;
  pangkatbyte := hasil;
end;


{**Prosedur mengubah bilangan biner ke bilangan desimal**}
function biner2dec(var kata : string):integer;
var ntemp, i, code : integer;
    hasil : integer;
begin
  hasil := 0;
  for i := 1 to length(kata) do
  begin
    val(kata[i],ntemp,code);
    if code <> 0 then write('Kesalahan pada posisi ',code)
    else
    begin
      if(ntemp > 1) then write('Ada kesalahan format bilangan ')
      else
        hasil := hasil + ntemp * pangkatbyte(2,length(kata)-i);
    end;
  end;
  biner2dec := hasil;
end;


begin
  lagi := 'Y';
  while (upcase(lagi)='Y')do
  begin
    clrscr;
    write('Masukkan kalimat : '); readln(kalimat);

    {Proses Enkripsi}

    {ubah kode ascii ke format biner}
    kodebiner := ascii2biner(kalimat);

    {ubah dari kode biner ke bentuk biner 3 bit dan geser 2}
    i := 1; hasil :='';
    while(i <=length(kodebiner)) do
    begin
      subtext := copy(kodebiner,i,3);
      if (length(subtext) < 3) then temp:= subtext
      else
      begin
        str((biner2dec(subtext) + 2) mod 8,m);
        val(m,nilai,code);
        temp := dec2biner3bit(nilai);
      end;
      hasil := hasil+temp;
      i := i+3;
    end;

    {ubah ke karakter baru}
    j:=1; cbaru :='';
    while(j < length(hasil)) do
    begin
      bit8 := copy(hasil,j,8);
      cbaru := cbaru + char(biner2dec(bit8));
      j := j+8;
    end;
    write('Karakter Hasil Enkripsi : ',cbaru);
    writeln;


    {Proses Dekripsi}

    {ubah kode ascii ke format biner}
    kodebiner := ascii2biner(cbaru);

    {ubah dari kode biner ke bentuk biner 3 bit dan geser 2}
    i := 1; hasil:='';
    while(i <=length(kodebiner)) do
    begin
      subtext := copy(kodebiner,i,3);
      if (length(subtext) < 3) then temp:= subtext
      else
      begin
        str((biner2dec(subtext)+ 8 - 2 ) mod 8,m);
        val(m,nilai,code);
        temp := dec2biner3bit(nilai);
      end;
      hasil := hasil+temp;
      i := i+3;
    end;

    {ubah ke karakter baru}
    j:=1;cbaru := '';
    while(j < length(hasil)) do
    begin
      bit8 := copy(hasil,j,8);
      cbaru := cbaru + char(biner2dec(bit8));
      j := j+8;
    end;
    writeln('Karakter Hasil Dekripsi : ',cbaru);
    write('Lagi : '); lagi := readkey;
  end;
end.

Komentar

Postingan populer dari blog ini

algoritma dan pascal

CERITA

cara enkripsi dengan chiper