Gyakorlati alapok

Pascal-háromszög

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A Pascal-háromszög a kombinatorikában, pontosabban annak kombinációval foglalkozó részénél oly fontos binomiális együtthatók háromszög alakú elrendezése.

 

www.informatika-programozas.hu

 

Felépítése: két, egymás mellett lévő számot összeadunk és összegét a két szám alá, pontosan középre írjuk. Ezáltal egy belső logikával bíró számháromszög-alakzat jön létre.

 

Az alábbi futtatható Java-kód egyszerű megvalósítását tartalmazza. Természetesen 2 db for ciklust kell használnunk, a főciklus a sorok számát szabályozza (i < sorokSzama;), míg a belső ciklus a legfontosabb, értékadó művelettel a kiírandó számokat (szam = szam * (seged - j) / j;). Ugyanakkor fontos a változók pontos inicializálása is, például int seged = i + 1, illetve ez a feltétel (if (j > 0), mert ezzel elkerüljük a 0-val osztást, hiszen j kezdőértéke 0.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
    int sorokSzama = 9;
    int szam = 1;
        for (int i = 0; i < sorokSzama; i++) {
            int seged = i + 1;
                for (int j = 0; j <= i; j++) {
                    if (j > 0) {
                        szam = szam * (seged - j) / j;
                    }
                System.out.print(szam + " ");
            }
        System.out.println();
        }
    }
}

 

Végeredmény:

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
1 8 28 56 70 56 28 8 1

 

A kiírás sikerült, ám láthatóan nem kezeltük le a háromszögalakzatot. Azonban fontos felismernünk, hogy ezt csak korlátozottan tudjuk megtenni konzolos környezetben, mert az egyre nagyobb számok digitjei kissé elcsúsztatni, torzítani fogják a háromszögalakzatot. Ezt tudomásul véve kísérelhetjük meg az alakzat kirajzolását. Megoldása egy egyszerű for ciklus, amelyik a számkiírás előtt üres helyekkel tölti fel a sorok előtti részeket (System.out.print(" ");):

 

for(int k = sorokSzama - i; k > 0; k--){
    System.out.print(" ");
}

 

A ciklus léptetőváltozóját k-val jelöltem, mert nem akartam a már felhasznált j változót átnevezni.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
    int sorokSzama = 9;
    int szam = 1;
        for (int i = 0; i < sorokSzama; i++) {

            for(int k = sorokSzama - i; k > 0; k--){
                System.out.print(" ");
            }
            int seged = i + 1;
                for (int j = 0; j <= i; j++) {
                    if (j > 0) {
                        szam = szam * (seged - j) / j;
                    }
                System.out.print(szam + " ");
            }
        System.out.println();
        }
    }
}

 

Végeredmény:

            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
1 8 28 56 70 56 28 8 1