Segitiga Pascal

Soal 2 Olimpiade Sains Mahasiswa 2007, Yogyakarta.

Deskripsi Soal :

Buatlah program yang meminta input bilangan asli n dan mengoutputkan segitiga pascal dari baris 0 hingga baris n

Contoh Input :

7

Contoh Output :

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

Solusi :

Ada berbagai algoritma untuk membuat program segitiga pascal, seperti menggunakan flying table dll. Berikut ini listing program saya untuk membuat segitiga pascal

var num:array[1..100] of longint;

i,j,n,batas:integer;

begin

readln(n);

num[1]:=1;

writeln(1);

for i:=1 to n do

begin

batas:=(i+1) div 2;

if not odd(i) then

num[batas+1]:=num[batas]*2;

for j:=batas downto 2 do

num[j]:=num[j]+num[j-1];

for j:=1 to batas do

write(num[j],’ ‘);

if not odd(i) then write(num[batas+1],’ ‘);

for j:=batas downto 1 do

write(num[j],’ ‘);

writeln;

end;

end.

68 thoughts on “Segitiga Pascal

  1. Riza Post author

    Jujur, saya belum pernah coding pakai bahasa C, tapi seharusnya algoritma dari listing program Pascal diatas tidak terlalu sulit dimengerti. Mungkin yang sedikit tampak susah karena saya cuma mencari setengah bagian dari setiap baris (karena setengahnya yang lain pasti sama kan? Cuma urutannya yang terbalik). Jadi kalau mau simple, proses saja seluruh baris dengan menggunakan flying table.

    Reply
  2. Rob-B

    Maz gmna iah cranya bkin segitiga pascal pk program turbopascal yg outputnya nanti berbentuk piramida dan terletak d tengah2..
    untuk balasannya silahkan dkirim k “robby.programmer@gmail.com”
    saya tunggu ….

    trims

    Reply
  3. Riza Post author

    Hmm, kayaknya susah kalo mau dibikin persis berbentuk piramida (ditengah-tengah)
    Langkah paling mudah, sebelum di writeln, convert output setiap baris menjadi string, simpan dalam buffer, trus pas mau di write, tambahkan karakter spasi di setiap baris. Masalah jumlah spasinya berapa, coba diitung2 sendiri, simple math kok :p

    Reply
  4. Fitri

    Mas, tolong dong….
    Kalo program buat segitiga pascal pake perulangan (for/while/repeat), bisa nggak?
    Kalo bisa gimana caranya?
    Soalnya saya lagi belajar looping.

    Terima kasih sebelumnya 🙂

    Reply
  5. Riza Post author

    @lusi : C# mirip2 JAVA/ C kan?
    yah, kurang lebih sama kaya yg di segitiga pascal II itu lah 🙂

    @Fitri : lho, kan udah pake looping ntuh ^_^”

    Reply
  6. hilda

    Ass…,
    kk aku baru mengenal pascal ni……
    harap maklum ya!!!
    aku mau tanya,apa sich fungsi dari segi tiga pascal itu?????
    makacih

    Reply
    1. Riza Post author

      Hmm, apa yah fungsi umum dari segitiga pascal?
      Tapi secara umum, segitiga pascal bisa dikatakan sebagai penyusunan geometris dari koefisian binomial.
      Beberapa pola menarik kemudian bisa kita dapatkan dari segitiga pacal, seperti bilangan trigonal bahkan deret fibonacci!
      Silahkan klik di sini atau di situ atau mungkin di sono untuk informasi lebih lanjut.

      Kalau di dunia pemrograman sendiri, segitiga pascal sering digunakan sebagai topik latihan bagi programmer pemula untuk mempelajari manipulasi perulangan (nested loop), penggunaan array multidimensi, atau bahkan rekursi.

      Reply
  7. yansen

    baik kita masi belajar sama2, coba dunk w pengen megetahui cara pembuatan sgetiga yg di bawah ini

    bisa buat segita pascal seperti ini…………….tolong y kk ^^

    *******************|_|*******************
    ******************|_||_|******************
    *****************|_||_||_|****************
    ***************|_||_||_||_|***************
    **************|_||_||_||_||_|***************
    ************|_||_||_||_||_||_|***************

    dan seterus nya……….(* adalah spasi)……………

    Reply
    1. Riza Post author

      hmm, kok pada penasaran bikin segitiga pascal yang balance ya? 🙂
      Ok2, gini, kita coba akalin, untuk setiap elemen segitiga pascalnya, kita write dengan space/ alokasi tempat yang sama dan genap, misal 4 karakter. Nah, karena spacenya genap, yang bawah nanti bisa bercabang kan? jadi codenya seperti ini

      type segitiga_pascal = array[0..100,0..100] of integer;
      var n:integer;
          pas:segitiga_pascal;
      
      procedure genpas(n:integer;var pas:segitiga_pascal);
      var i,j:integer;
      begin
        pas[1,1]:=1;
        for i:=2 to n do
          for j:=1 to i do
            pas[i,j]:=pas[i-1,j-1]+pas[i-1,j];
      end;
      
      procedure tulis(n:integer;var pas:segitiga_pascal);
      var i,j,indent,space:integer;
      begin
        space:=4; (*harus berupa bilangan genap*)
        indent:=(n-1)*(space div 2);
        for i:=1 to n do
          begin
            write('':indent);
            for j:=1 to i do
              write(pas[i,j]:space);
            writeln;
            dec(indent,space div 2);
          end;
      end;
      
      begin
        readln(n);
        genpas(n, pas);
        tulis(n,pas);
      end.
      
      Reply
  8. mumet_nih

    Kalo logika algoritma ataupun program pascal nya buat seperti di bawah ini gmana yach, tolong donk

    input nya : 6 dan output nya seperti ini :

    1
    2 7
    3 8 12
    4 9 13 16
    5 10 14 17 19
    6 11 15 18 20 21

    terima kasih

    Reply
    1. Riza Post author

      haduh haduuuh, piyo to iki? ^_^”
      yawis, moggo code dibawah ini dicoba…

      var n,i,j,k:integer;
      
      begin
        readln(n);
        for i:=1 to n do
          begin
            k:=i;
            for j:=1 to i do
              begin
                write(k,' ');
                k:=k+n-j;
              end;
            writeln;
          end;
      end.
      
      Reply
  9. rico

    mas mau tanya untuk cara buat segitiga pascal dalam fortran 77 atau 90 gmana????

    tolong bantuannya….
    hatur nuhun!!!!!!!!!!!!!!!!!!

    Reply
  10. nisa

    aslmkn….
    mas tlong buatin program pascalnya donk…..
    1 * 3 * 5
    * 2 * 4 *
    1 * 3 * 5
    * 2 * 4 *
    1 * 3 * 5
    terus kl punyaknya yansen yg no 22 kl menggunakan for ato while do gmn?
    syukron.

    Reply
  11. vibie

    Mantap JAya!!!
    Teng qyu,,Riza..
    Qwuh udah nyari muter2 nyari jawaban buad pertanyaan kayak punya “yansen”.. Finally,,ketemu juga di ni blog…
    Teng qyu….Be ge te…Ea…

    Reply
  12. moety

    mohon bantuannya nyari output dari

    1
    112
    11122
    11112223
    11111222233
    tolong ya..
    mendesak benget nich..
    thanks before

    Reply
  13. sumiati

    mnt tlng kk ,program c# yang meminta input bilangan asli n dan mengoutputkan segitiga pascal dari baris 1 hingga baris n
    Contoh Input : Jumlah deret = 7
    Output :
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    1 6 15 20 15 6 1
    1 7 21 35 35 21 7 1

    Reply
  14. Josh

    bro, kalau segitiga pascal nya pake netbeans gimana?
    untuk jumlah barisnya diinput user.
    hasil segitiga pascalnya di rotate 90 derajat kekanan bro… bisa?

    contoh 3 baris aja:
    output segitiga pascal:
    1
    1 1
    1 2 1

    output rotate 90 derajat ke kanan :

    1
    1
    2 1
    1
    1

    Reply
  15. Josh

    waduh contohnya kok jd hancur…
    gini yg bener bro

    contoh 3 baris aja:
    output segitiga pascal:
    *******1
    ***1******1
    *1 ****2**** 1

    output rotate 90 derajat ke kanan :

    1
    ***1
    2 ****1
    ***1
    1

    (* = spasi)

    Reply
  16. Neng helmi

    Aslm. k’ klo output nya kyak gini
    1
    1 2
    3 5 8
    13 21
    34
    gmn source nya t k’…???
    dan kalau diminta masukkan nilai n
    ex. n=3
    khan hasilnya kayak gini
    1
    1 2
    3
    bantuin dunk k’ gmn source nya….pusing bgt ne k’…! udah coba2 tapi hasilnya berantakan.
    thanks b4 y k’….

    wassalam.

    Reply
  17. Neng Helmi

    Aslm. gimana caranya bikin segitiga pascal pke bilangan fibonacci ka’…??

    hasilnya yang kayak gini ka’….

    1
    1 2
    3
    thanks b4 untuk jawabannya k’…!!

    Reply
  18. dorkas

    kok programnya sy coba di pas kal,,,hasil outputnya gak ada ya???
    aku dah coba ketik ulang tp sama aja,,hasil outputnya gak ada….

    Reply
  19. ururunstrive

    wuaaah…. uda lama ga belajar bahasa pascal…
    padahal penasaran sama segitiga pascal…

    gini ni mas/mba riza,
    saya ga ngerti bagian
    yang

    if not odd(i) then…

    nah kalau odd gimana?
    oya, oddnya juga harus di ubah jadi bilangan mod 2=0dulu kan?
    (soalnya saya pake C, hehe)

    bingung nih…
    kalau ga ngerepotin bisa ubah pake pseudo-code aja ga?
    tolong dong…

    pleaseeee ..
    (entah dibales berapa bulan kedepan) :p

    Reply
    1. Riza Post author

      Yak betul! odd() adalah fungsi di pascal yang akan mengembalikan nilai true jika parameternya merupakan bilangan ganjil.
      if not odd(i) …
      kalo di C kurang lebih seperti ini
      if (i % 2 != 1) …

      Reply
  20. Zulfikar

    wah kacau ini pada minta bikinin program semua. Kalo program tuh ga boleh dibikinin. Kalo yang simpel aja kayak gini ga bisa, gimana suruh bikin program yang besar

    Reply
  21. tier

    kl punya koding nya ini… minta…. 😛
    masukan kata = SurabayaZ
    S
    u u
    r r
    a a
    b b
    a a
    y y
    a a
    JJJJJJJJJJJJJJJJJJJJJ

    Reply
    1. Maldy

      uses wincrt;
      var
      hor,ver,a:integer;
      begin
      clrscr;
      writeln(‘==Program Menampilkan Angka==’);
      write(‘Masukkan Batas : ‘);
      readln (hor);
      a:=1;
      for ver:=a to hor do
      begin
      for hor:=a to ver do
      write(ver);
      writeln;
      end;
      end.

      Reply

Leave a reply to Neng Helmi Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.