Gyakorlati alapok
Pitagoraszi számhármasok
Pithagoraszi számhármasok tételének alapja nyilvánvalóan maga Pithagorasz tétele:
Derékszögű háromszög leghosszabb oldalának (átfogójának) négyzete
megegyezik a másik 2 oldal (befogók) négyzetösszegével.
A tétel szerint Pithagoraszi számhármast alkot minden olyan pozitív egész szám, amelyekre igaz az alábbi összefüggés (amely voltaképpen Pithagorasz tétele):
a2 + b2 = c2
Kiszámításához 3 bemeneti adatfolyamra van szükségünk, ezeket folyamatosan léptetve, azaz szekvenciálisan kell összehasonlítanunk egymással pontosan olyan módon, hogy kijöjjön a fenti összefüggés. Ez valójában egyfajta keresés, amelynek tipikus művelete az iterálás (for ciklus). Ezért "kívülről jövő", azaz felhasználói adatbekérésre nincs is szükség, valamint a hatványozást is egyszerűen, "belsőleg" oldjuk meg ((i*i) * (j*j) == (k*k)).
Adott tehát 3 bemeneti adatszekvencia: minden elemet össze kell vetnünk minden elemmel, még pedig a képlet szerint:
a2 + b2 = c2
Az ilyen keresések legtöbbször egymásba ágyazott (nested) for ciklusokkal történnek, működésük a for ciklus című fejezetben részletesen be van mutatva. További durváskodás, hogy a mi esetünkben nem 2, hanem 3 for ciklust kell felhasználnunk, hiszen 3 bemeneti adatszekvenciánk van. Ezeket a for ciklusok léptetői fogják nekünk reprezentálni (int i, j, k). Nézzük meg a futtatható Java-kódot c (átfogó) = 50 értékig, ahol c-t int k képviseli:
public class Main {
public static void main(String[] args) {
for(int i = 1;i <= 50; i++){
for(int j = 1; j <= 50; j++){
for(int k =
1; k <= 50; k++){
if((i * i) + (j * j) == (k * k)){
System.out.println((i * i) + " + " + (j * j) + " = " + (k * k)
+", ahol i = " + i + " j = " + j + " k = " + k);
}
}
}
}
}
}
Végeredmény:
9 + 16 = 25, ahol i = 3 j = 4 k = 5
16 + 9 = 25, ahol i = 4 j = 3 k = 5
25 + 144 = 169, ahol i = 5 j = 12 k = 13
36 + 64 = 100, ahol i = 6 j = 8 k = 10
49 + 576 = 625, ahol i = 7 j = 24 k = 25
64 + 36 = 100, ahol i = 8 j = 6 k = 10
64 + 225 = 289, ahol i = 8 j = 15 k = 17
81 + 144 = 225, ahol i = 9 j = 12 k = 15
81 + 1600 = 1681, ahol i = 9 j = 40 k = 41
100 + 576 = 676, ahol i = 10 j = 24 k = 26
144 + 25 = 169, ahol i = 12 j = 5 k = 13
144 + 81 = 225, ahol i = 12 j = 9 k = 15
144 + 256 = 400, ahol i = 12 j = 16 k = 20
144 + 1225 = 1369, ahol i = 12 j = 35 k = 37
196 + 2304 = 2500, ahol i = 14 j = 48 k = 50
225 + 64 = 289, ahol i = 15 j = 8 k = 17
225 + 400 = 625, ahol i = 15 j = 20 k = 25
225 + 1296 = 1521, ahol i = 15 j = 36 k = 39
256 + 144 = 400, ahol i = 16 j = 12 k = 20
256 + 900 = 1156, ahol i = 16 j = 30 k = 34
324 + 576 = 900, ahol i = 18 j = 24 k = 30
400 + 225 = 625, ahol i = 20 j = 15 k = 25
400 + 441 = 841, ahol i = 20 j = 21 k = 29
441 + 400 = 841, ahol i = 21 j = 20 k = 29
441 + 784 = 1225, ahol i = 21 j = 28 k = 35
576 + 49 = 625, ahol i = 24 j = 7 k = 25
576 + 100 = 676, ahol i = 24 j = 10 k = 26
576 + 324 = 900, ahol i = 24 j = 18 k = 30
576 + 1024 = 1600, ahol i = 24 j = 32 k = 40
729 + 1296 = 2025, ahol i = 27 j = 36 k = 45
784 + 441 = 1225, ahol i = 28 j = 21 k = 35
900 + 256 = 1156, ahol i = 30 j = 16 k = 34
900 + 1600 = 2500, ahol i = 30 j = 40 k = 50
1024 + 576 = 1600, ahol i = 32 j = 24 k = 40
1225 + 144 = 1369, ahol i = 35 j = 12 k = 37
1296 + 225 = 1521, ahol i = 36 j = 15 k = 39
1296 + 729 = 2025, ahol i = 36 j = 27 k = 45
1600 + 81 = 1681, ahol i = 40 j = 9 k = 41
1600 + 900 = 2500, ahol i = 40 j = 30 k = 50
2304 + 196 = 2500, ahol i = 48 j = 14 k = 50
A kódban feltűnő lehet: int típusú adattípusokat használtunk (int i, j, k), annak ellenére, hogy a hatványozás inverz művelete a gyökvonás. Mivel a hatványozást egyszerű szorzással oldottuk meg ((i*i) * (j*j) == (k*k)), gyökvonásra sincs szükségünk. Ráadásul a képlet szerint csakis olyan számokat keresünk, amelyekre a pithagoraszi összefüggés alkalmazható és erre az int adattípus is megfelelő (mert nem fog keletkezni lebegőpontos szám).