Minggu, 24 April 2011

Program Konversi Bilangan menggunakan Pascal

Program ini saya buat menggunakan Turbo Pascal For Windows Versi 1.5. Program ini dibuat hanya untuk belajar saja jadi masih banyak kekurangannya. Pada program ini tidak ada validasi input dll.

Silahkan dicoba, dipenthelengi dan dikritisi.
Berikut Source code nya:


program konversi_bilangan;

uses wincrt;

const max_array=25; {menentukan panjang karakter yang dapat ditangani}

var input : string; {menampung inputan bilangan}
pilih_menu : byte; {menampung pilihan menu}
kembali : char; {kembali ke menu}

{Untuk mengubah input menjadi nilai dalam desimal agar mempermudah penghitungan}
function nilaiBil(_bil:char):integer;
var Code : Word;
nilai: integer;
begin
case upcase(_bil) of
'A': nilaiBil:=10;
'B': nilaiBil:=11;
'C': nilaiBil:=12;
'D': nilaiBil:=13;
'E': nilaiBil:=14;
'F': nilaiBil:=15;
else
begin
Val(_bil,nilai,Code);
nilaiBil:=nilai;
end;
end;
end;

{ Convert integer type to a string }
function IntToStr(I: Longint): String;
var
S: string[11];
begin
Str(I, S);
IntToStr := S;
end;

{Untuk menghitung pangkat}
function pangkat(a,b:real) : integer;
begin
pangkat := round(exp(b * ln(a)));
end;

{Mengubah bilangan dari desimal ke tipe lain}
function dariDesimal(bil,basis : string): String;
var hasil : string;
Code:Word;
sisa,_bil,_basis:Integer;
begin
Val(basis,_basis,Code);
Val(bil,_bil,Code);
hasil:='';
repeat
sisa:=_bil mod _basis;
case sisa of
0: hasil:= '0' + hasil;
1: hasil:= '1' + hasil;
2: hasil:= '2' + hasil;
3: hasil:= '3' + hasil;
4: hasil:= '4' + hasil;
5: hasil:= '5' + hasil;
6: hasil:= '6' + hasil;
7: hasil:= '7' + hasil;
8: hasil:= '8' + hasil;
9: hasil:= '9' + hasil;
10:hasil:= 'A' + hasil;
11:hasil:= 'B' + hasil;
12:hasil:= 'C' + hasil;
13:hasil:= 'D' + hasil;
14:hasil:= 'E' + hasil;
15:hasil:= 'F' + hasil;
end;
_bil:=_bil div _basis;
until _bil=0;
dariDesimal:=hasil;
end;

{Untuk mengubah bilangan ke tipe desimal}
function keDesimal(bil,basis:String):String;
var i,j,_basis : Byte;
Code : Word;
hasil : Integer;
begin
Val(basis,_basis,Code);
hasil:=0;
j:=0;
for i:=Length(bil) downto 1 do
begin
hasil := hasil + nilaiBil(bil[i])*pangkat(_basis,j);
inc(j);
end;
keDesimal:=IntToStr(hasil);
end;

{Untuk menggambar garis horisontal menyesuaikan panjang string inputan}
function garisbawah(kalimat:string):string;
var i:byte;
garis : String;
begin
garis:='';
for i:=1 to Length(kalimat) do
garis:=garis+'=';
garisbawah:=garis;
end;

{Prosedur tampilan konversi bilangan}
procedure konversiBilangan(x,y:String);
var _x,_y : String;
ulangi : char;
begin
repeat
clrscr;
if x='2' then _x:='biner'
else if x='8' then _x:='oktal'
else if x='10' then _x:='desimal'
else _x:='heksa';

if y='2' then _y:='biner'
else if y='8' then _y:='oktal'
else if y='10' then _y:='desimal'
else _y:='heksa';

writeln('Konversi bilangan ',_x,' ke ',_y);
writeln(garisbawah('Konversi bilangan '+_x+' ke '+_y));
writeln;
write('Masukkan bilangan: ');readln(input);
if y='10' then
writeln('Nilai desimal dari bilangan ',input,' = ',keDesimal(input,x))
else if x='10' then
writeln('Nilai ',_y,' dari bilangan ',input,' = ',dariDesimal(input,y))
else
begin
write('Nilai ',_y,' dari bilangan ',input,' = ',dariDesimal(keDesimal(input,x),y));
end;
writeln;
write('Apakah anda ingin mengulangi ?[Y/T]');
ulangi:=readkey;
until upcase(ulangi)='T';
end;

{Prosedur tampilan menu}
procedure Menu;
begin
clrscr;
writeln('Program Konversi Bilangan');
writeln(garisbawah('Program Konversi Bilangan'));
writeln;
writeln('Menu :');
writeln('1. Konversi biner ke oktal');
writeln('2. Konversi biner ke desimal');
writeln('3. Konversi biner ke heksa');
writeln('4. Konversi oktal ke biner');
writeln('5. Konversi oktal ke desimal');
writeln('6. Konversi oktal ke heksa');
writeln('7. Konversi desimal ke biner');
writeln('8. Konversi desimal ke oktal');
writeln('9. Konversi desimal ke heksa');
writeln('10.Konversi heksa ke biner');
writeln('11.Konversi heksa ke oktal');
writeln('12.Konversi heksa ke desimal');
writeln('13.Keluar program');
writeln;
write('Masukkan pilihan anda : ');readln(pilih_menu);
case pilih_menu of
1 : konversiBilangan('2','8');
2 : konversiBilangan('2','10');
3 : konversiBilangan('2','16');
4 : konversiBilangan('8','2');
5 : konversiBilangan('8','10');
6 : konversiBilangan('8','16');
7 : konversiBilangan('10','2');
8 : konversiBilangan('10','8');
9 : konversiBilangan('10','16');
10 : konversiBilangan('16','2');
11 : konversiBilangan('16','8');
12 : konversiBilangan('16','10');
13 : donewincrt;
end;
end;

{Program utama}
begin
repeat
menu;
until false;
end.