Program yang mungkin terlihat paling
ribet, tapi sebenarnya alurnya sederhana. Berungsi untuk menampilkan
pembagi dan hasil bagi bilangan bulat yang di masukan. Selain itu,
disini juga bisa digunakan untuk menentukan bilangan mana yang prima
atau bukan. Sebelumnya program ini sudah pernah di publish di artikel ini, namun saya tidak tampilkan source kodenya. Silahkan bila ingin langsung mencoba bisa langsung kesana.
Sebenarnya ada cacat di program
ini, yaitu ada 2 perulangan disini. Yang satu untuk menentukan bilangan
prima, satunya lagi untuk menentukan pembagi. Sebenarnya 2 perulangan
itu dapat dipangkas menjadi satu saja. Sehingga 2 perulangan menjadi
tidak efisien. Kenapa harus 2?
Sejarahnya begini, awalnya saya
menulis program ini iseng-iseng hanya untuk mencari yang mana bilangan
prima. Lalu saya kembangkan lagi menjadi bisa menuliskan daftar bilangan
pembagi, waktu itu, daripada repot mengedit perulangan untuk menentukan
bilangan prima yang sudah mapan, saya membuat perulangan baru. Dan
akhirnya program ini punya 2 perulangan yang strukturnya hampir mirip.
Tapi nampaknya tidak masalah,
toh selisih waktu kalkulasinya hanya beberapa milidetik, bahkan untuk
bilangan yang mencapai ratusan juta sekalipun. Mau edit lagi, rasanya
malas……Berikut kodenya…….:
Hint: Sebelum di compile, buat dulu file bernama output.txt di folder yang sama dengan source code pembagi.
program pembagi;
uses crt;
var x,y,q,w,z,e,f,g:longint;
l,a:string;
out:text;
label k;
{prosedur untuk sekedar merapikan hasil output}
procedure rapikan(s:longint;var t:string);
begin
if s<10 then
t:=' '
else if (s>9) and (s<100) then
t:=' '
else if (s>99) and (s<1000) then
t:=' '
else if (s>999) and (s<10000) then
t:=' '
else if (s>9999) and (s<100000) then
t:=' '
else if (s>99999) and (s<1000000) then
t:=' '
else if (s>999999) and (s<10000000) then
t:=' '
else if (s>9999999) and (s<100000000) then
t:=' '
else if (s>99999999) and (s<1000000000) then
t:=' '
else if (s>999999999) and (s<1000000000) then
t:=' '
else t:=' ';
end;
{program utama}
begin
textbackground(blue);
textcolor(Yellow);
clrscr;
assign(out,'output.txt');
append(out);
gotoxy(3,1);writeln('+______________________________________________________+');
gotoxy(3,2);writeln('|Copyright@2009, Xenovon, http://komputok.blogspot.com |');
gotoxy(3,3);Writeln('+------------------------------------------------------+');
writeln;
writeln;
gotoxy(3,5);writeln('Hint: Masukan angka 2 untuk keluar');
gotoxy(3,6);writeln(' hasil juga dioutputkan ke output.txt');
writeln;
writeln;
gotoxy(15,9);writeln('----[MENENTUKAN PEMBAGI SUATU BILANGAN BULAT]------');
writeln;
writeln;
{menuliskan ke output.txt}
writeln(out);
writeln(out);
writeln(out);
writeln(out,'+______________________________________________________+');
writeln(out,'|Copyright@2009, Xenovon, http://komputok.blogspot.com |');
Writeln(out,'+------------------------------------------------------+');
writeln(out);
writeln(out);
writeln(out);
writeln(out,'----[MENENTUKAN PEMBAGI SUATU BILANGAN BULAT]------');
writeln(out);
begin
{input bilangan yang akan di cari}
k:
write('masukan bilangan yang akan di cek : ');readln(x);writeln;
{error handling}
if x<2 then goto k else
{pemeriksaan kondisi untuk keluar program, yaitu dengan menginput angka 2}
if x=2 then
begin
writeln('2 adalah bilangan prima');
writeln;
write('Mau keluar?(y/x)');readln(l);
writeln;
if l='y' then exit else goto k;
end;
{Menentukan apakah bilangan prima atau bukan}
begin
y:=1;
repeat
y:=y+1;
q:=x mod y;
until (q=0);
end;
if y=x then
begin
writeln(x,' adalah bilangan prima');writeln;
writeln(out,x,' adalah bilangan prima');writeln(out);
end
else
begin
{apabila bukan prima, maka program menentukan pembagi yang mungkin}
writeln('Pembagi dari ',x,': ');
writeln('--------------------');
writeln(out,'Pembagi dari ',x,': ');
writeln(out,'--------------------');
writeln(out);
w:=1;
repeat
w:=w+1;
e:=x mod w;
if e=0 then
begin
{menuliskan pembagi & hasil bagi ke konsole dan ke output.txt}
g:=x div w;
rapikan(w,a);
writeln(w,a,'--> ',x,'/',w,'= ',g);
writeln(out,w,a,'--> ',x,'/',w,'= ',g);
end;
until (w=x);
writeln;
writeln(out);
end;
goto k;
end;
close(out);
end.