Program Pencari Pembagi

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.




Post a Comment

[blogger]

Author Name

Contact Form

Name

Email *

Message *

Powered by Blogger.