26 Juni 2011

Program Pascal FPB dari n bilangan



Pada kesempatan yang lalu kita telah membahas bagaimana cara membuat program Pascal untuk mencari FPB dari 2 bilangan dan program Pascal untuk mencari FPB dari 3 bilangan. Insya Allah pada kesempatan kali ini sahabat akan mencoba untuk sharing dengan teman-teman semua bagaimana cara membuat program Pascal untuk mencari FPB dari n bilangan. Maksudnya dalam satu program kita bisa mencari FPB dari berapa bilangan yang kita inginkan, misalnya kita ingin mencari FPB dari 2 bilangan, dari 3 bilangan bahkan dari 10 bilangan atau mungkin FPB dari 100 bilangan, maka dengan satu program pascal yang akan kita buat kita bisa mencari FPB dari berapa bilangan yang kita inginkan, sesuai dengan angka yang kita inputkan pertama kali. Jika kita ingin mencari FPB dari 7 bilangan, maka kita tinggal ketikkan angka 7 pada permintaan program dan akan muncul 7 permintaan angka untuk dimasukkan, setelah itu akan langsung muncul FBP dari 7 bilangan tersebut.
Oke teman, kita mulai pembahasannya, algoritma yang akan kita buat, pemahamannya kira-kira beperti berikut.
Bismillahirrahmanirrahim,
misalkan kita akan mencari FPB dari n bilangan, terlebih dahulu kita akan membuat suatu algoritma yang membuat program jika kita memasukkan nilai n, maka program akan meminta kita untuk memasukkan bilangan ke-1, ke-2, ke-3, ..., sampai dengan bilangan ke-n. Jika kita buatkan diagram alir (flow chart) dari algoritma awalnya, maka flow chartnya adalah sebagai berikut:


Kenapa kita gunakan variabel b? Tidak ada alasan khusus kenapa kita gunakan varibel b, jika kita ingin menggunakan variabel a juga bisa, c juga bisa, d1 juga bisa, d2 juga bisa, terus kenapa tidak gunakan variabel a saja? Sebenarnya a juga pasti bisa kita gunakan, namun di sini variabel a nanti akan kita gunakan sebagai larik/array sehingga bisa dikatakan mempunyai fungsi yang lebih umum dari variabel lainnya (jika variabel b sebagai larik/array juga tidak masalah).

Kita lihat kembali algoritma yang ditampilkan melalui flow chart di atas, saat kita memasukkan bilangan ke-b, bilangan tersebut belum dideklarasikan sebagai suatu variabel, maka kita anggap variabel ab adalah variabel untuk menyatakan nilai/bilangan ke-b. Atau ab adalah variabel untuk menyatakan bilangan saat b bernilai 1, saat b bernilai 2, saat b bernilai 3 sampai saat b bernilai n. Jadi kita cuma menambahkan bahwa bilangan ke-b dideklarasikan sebagai ab, dengan kesepakatan ab adalah variabel untuk menyatakan bilangan saat b bernilai 1, saat b bernilai 2, saat b bernilai 3 sampai saat b bernilai n, sehingga algoritmanya menjadi sebagai berikut.



Pada beberapa bahasa pemrograman kita menggunakan suatu fasilitas yang disebut dengan larik/array untuk menyatakan bilangan ke-1, ke-2, ke-3 sampai ke-n sebagai satu variabel. Pada bahasa pemrograman Turbo Pascal kita juga menggunakan fasilitas tersebut, sehingga jika algoritma pada gambar kita tuliskan di dalam Turbo Pascal maka sintaksnya adalah sebagai berikut:

var
a:array[1..5] of integer;
n,b:integer;
begin
write('berapa bilangan yang akan dimasukkan? '); readln(n);
for b:=1 to n do
begin
write ('masukkan bilangan ke - ',b,'! '); readln(a[b]);
end;
readln
end.

Jika program di atas kita jalankan maka hasilnya adalah seperti berikut:

berapa bilangan yang akan dimasukkan? 2
masukkan bilangan ke - 1! 18
masukkan bilangan ke - 2! 12

berapa bilangan yang akan dimasukkan? 5
masukkan bilangan ke - 1! 21
masukkan bilangan ke - 2! 70
masukkan bilangan ke - 3! 49
masukkan bilangan ke - 4! 28
masukkan bilangan ke - 5! 98

Keterangan:
Hasil program di atas adalah hasil dari program yang dijalankan sebanyak 2 kali, program pertama dijalankan dengan menginputkan 2 bilangan dan program kedua memasukkan 5 bilangan. Angka yang digaris bawahi adalah angka yang diketikkan saat kita menjalankan program.

Perhatikan kembali hasil program yang dijalankan di atas!
  • Pada hasil program yang dijalankan untuk pertama kalinya, n bernilai 2 (sesuai dengan yang kita ketikkan), sehingga program akan meminta kita untuk memasukkan bilangan ke-1 sampai dengan bilangan ke-2,
    • 18 adalah bilangan ke-1, pada program ini 18 dideklarasikan sebagai variabel a[1] yaitu bilangan saat b bernilai 1,
    • 12 adalah bilangan ke-2, pada program ini 12 dideklarasikan sebagai variabel a[2] yaitu bilangan saat b bernilai 2.
  • Pada hasil program yang dijalankan untuk kedua kalinya, n bernilai 5 (sesuai dengan yang kita ketikkan), sehingga program akan meminta kita untuk memasukkan bilangan ke-1 sampai dengan bilangan ke-5,
    • 21 adalah bilangan ke-1, pada program ini 21 dideklarasikan sebagai variabel a[1] yaitu bilangan saat b bernilai 1
    • 70 adalah bilangan ke-2, pada program ini 70 dideklarasikan sebagai variabel a[2] yaitu bilangan saat b bernilai 2,
    • 49 adalah bilangan ke-3, pada program ini 49 dideklarasikan sebagai variabel a[3] yaitu bilangan saat b bernilai 3,
    • 28 adalah bilangan ke-4, pada program ini 28 dideklarasikan sebagai variabel a[4] yaitu bilangan saat b bernilai 4,
    • 98 adalah bilangan ke-5, pada program ini 98 dideklarasikan sebagai variabel a[5] yaitu bilangan saat b bernilai 5.

Pada sintak program, pada pendeklarasian variabel a,
a:array[1..5] of integer


angka 5 menyatakan bahwa banyak elemen atau bilangan maksimum dari nilai array a adalah sebanyak 5 elemen, jadi paling banyak kita bisa memasukkan bilangan adalah sebanyak 5 bilangan, jika kita ingin agar kita bisa memasukkan bilangan sampai dengan 100 bilangan, kita cukup mengganti angka 5 dengan angka 100, sehingga pendeklarasian variabel a menjadi:
a:array[1..100] of integer


Sampai di sini paham kan teman?Smiley

Ok kita lanjut...

FPB dari n bilangan pasti adalah salah satu bilangan dari suatu bilangan yang akan dicari FPBnya sampai dengan 1, maksudnya begini:
  • FPB dari 18 dan 12
    • FPB dari 18 dan 12 adalah salah satu bilangan mulai dari 18 sampai dengan 1, yaitu salah satu bilangan dari 18, 17, 16, ..., 1; atau
    • FPB dari 18 dan 12 adalah salah satu bilangan mulai dari 12 sampai dengan 1, yaitu salah satu bilangan dari 12, 11, 10, ..., 1
  • FPB dari 21, 70, 49, 28 dan 98
    • FPB dari 21, 70, 49, 28 dan 98 adalah salah satu bilangan yang dimulai dari 21, 20, 19, ..., 1; atau
    • FPB dari 21, 70, 49, 28 dan 98 adalah salah satu bilangan yang dimulai dari 70, 69, 68, ..., 1; atau
    • FPB dari 21, 70, 49, 28 dan 98 adalah salah satu bilangan yang dimulai dari 49, 48, 47, ..., 1; atau
    • FPB dari 21, 70, 49, 28 dan 98 adalah salah satu bilangan yang dimulai dari 28, 27, 26, ..., 1; atau
    • FPB dari 21, 70, 49, 28 dan 98 adalah salah satu bilangan yang dimulai dari 98, 97, 96, ..., 1.
Pada penjabaran di atas diketahui bahwa untuk menentukan nilai dari suatu variabel yang akan dijadikan FPBnya, bisa kita ambil dari a[1] atau dari a[2] atau dari a[3] atau dari a[n].

Misalkan kita akan mneggunakan a[1] untuk menentukan FPB dari n bilangan. FPB dari n bilangan tersebut adalah salah satu bilangan mulai dari a[1], a[1]-1, a[1]-2, ..., 3, 2, 1. Bilangan-bilangan inilah yang akan kita curigai sebagai FPB dari n bilangan tersebut. Kita anggap bilangan-bilangan yang dicurigai sebagai FPB itu sebagai variabel d. Jadi d=a[1], a[1]-1, a[1]-2, ..., 3, 2, 1. Akan diperiksa satu persatu apakah a[1], a[2], a[3], ..., a[n] habis dibagi dengan d. Jika ditemukan kondisi untuk pertama kalinya bahwa d merupakan faktor dari a[1], a[2], a[3], ..., a[n], maka nilai d saat itu adalah FPBnya dan kita tidak perlu memeriksa untuk nilai d lainnya, karena FPB dari n bilangan itu hanya satu. Atau dengan kata lain, jika ditemukan kondisi untuk pertama kalinya bahwa a[1], a[2], a[3], ..., a[n] habis dibagi dengan d, maka nilai d saat itu adalah FPBnya dan kita tidak perlu lagi untuk memeriksa nilai d lainnya, karena FPB dari n bilangan itu hanya satu. Algoritma untuk pengertian ini adalah sebagai berikut:


Perhatikan bagian algoritma pada baris ketiga, kita akan memeriksa dulu apakah a[e] mod d = 0 ? Pada baris di atasnya sudah didefinisikan bahwa e := 1 sampai n, berarti rencana akan diperiksa apakah:
  • a[1] habis dibagi dengan d?
  • a[2] habis dibagi dengan d?
  • a[3] habis dibagi dengan d?
  • a[n] habis dibagi dengan d?

Tetapi pada panah sebelah kanan a[e] mod b = 0?, jika a[e] mod d 0, maka langsung didefinisikan e := n. Hal ini bertujuan supaya program tidak lanjut ke panah bawah sesudah a[e] mod d = 0 ?, dengan kata lain tidak perlu lagi diperiksa apakah a[e] selanjutnya habis dibagi dengan nilai d saat itu, jadi pendefinisian e := n bertujuan agar pemeriksaan langsung dilanjut pada nilai d berikutnya. Dan jika a[e] mod d = 0, dan juga jika e = n, berarti sudah terjadi a[e] mod d = 0 sebanyak n kali, berarti program sudah mencatat bahwa:
  • a[1] mod d = 0, dan
  • a[2] mod d = 0, dan
  • a[3] mod d = 0, dan
  • a[n] mod d = 0,

maka d saat itu adalah nilai FPB dari n bilangan tersebut. Dan setelah didapat bahwa d saat itu adalah nilai FPBnya, maka setelah itu nilai d langsung kita definisikan menjadi nilai terakhirnya yaitu 1, supaya program tidak mengulang lagi untuk nilai d yang lainnya, sehingga programpun berakhir.

Jika kita buatkan algoritma secara keseluruhan untuk membuat program mencari FPB dari n bilangan, algoritmanya adalah sebagai berikut:


Jika algoritma ini kita tulis dalam bahasa pemrograman Pascal, maka akan didapat sintak seperti berikut:
var
a:array[1..5] of integer;
n,b,d,e:integer;
begin
write('FPB dari berapa bilangan yang akan dicari? '); readln(n);
for b:=1 to n do
begin
write('masukkan bilangan ke - ',b,' ! '); readln(a[b]);
end;
for d:=a[1] downto 1 do
for e:=1 to n do
begin
if a[e] mod d = 0 then

  begin
  if e=n then
    begin
    writeln ('FPB dari ',n,' bilangan tersebut adalah ',d); d:=1;
    end;
  end else e:=n;
end;
readln
end.

Itulah sintaks program Pascal untuk mencari FPB dari n bilangan versi sahabat-informasi.blogspot.com. Pada sintaks di atas, baris kedua tampak a:array [1..5] of integer;, berarti program tersebut hanya bisa mencari FPB paling banyak dari 5 bilangan, jika ingin bisa mencari paling banyak FPB dari 100 bilangan, maka tinggal mengganti a:array[1..5] of integer menjadi a:aray[1..100] of integer, atau mungkin kalau kita ingin agar bisa mencari paling banyak FPB dari 10000 bilangan, maka cukup menggantinya dengan angka 10000 (walaupun tidak mungkin rasanya kita butuh untuk mencari FPB dari 10000 bilangan), sehingga sintaksnya menjadi:
var
a:array[1..10000] of integer;
n,b,d,e:integer;
begin
write('FPB dari berapa bilangan yang akan dicari? '); readln(n);
for b:=1 to n do
begin
write('masukkan bilangan ke - ',b,' ! '); readln(a[b]);
end;
for d:=a[1] downto 1 do
for e:=1 to n do
begin
if a[e] mod d = 0 then

  begin
  if e=n then
    begin
    writeln ('FPB dari ',n,' bilangan tersebut adalah ',d); d:=1;
    end;
  end else e:=n;
end;
readln
end.

Bagi teman-teman yang ingin mendownload program pascal untuk mencari FPB dari n bilangan dapat mendownloadnya di sini dan yang ingin mendownload file .doc (file microsoft word dari postingan ini dapat mendownloadnya di sini.

ingin dapat update dari program pascal lainnya? silakan Join Group facebook sahabat-informasi.com dan Like Fanpage sahabat informasi dengan dengan account facebook kamu,

Baca juga:

1 komentar:

wah banyak banget code dan bilangannya gan, jadi pusing nih,, tapi ini bermanfaat bagtC