Gyakorlati alapok
Pascal-háromszög
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.
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.
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.
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