Matematikai függvények, a Jáva matematikai függvényei és azok használata.Egyszerû matematikai problémák programnyelvi megoldásai. Feladatok a függvények használatára.
Mint már említettük, a számítógép
másodpercenként több milliárd gépi szintû
mûvelet elvégzésére képes, míg
függvényhívásokból
is képes több tízezer
elvégzésére.
Megfogalmazódik bennünk a kérdés, hogy miként
is lehetne ezt ésszerûen használni olyan problémák
megoldására, amelyek a mindennapi életben is elôfordulhatnak.
A számítógép igazi ereje akkor mutatkozik meg,
ha olyan algoritmus (elemi lépések véges számú,
jól meghatározott sorozata) végrehajtására
utasítjuk, mely nekünk hosszas papíron történô
számolást igényelne.
A négy alapmûveletet kiterjesztendô, ismerkedjünk meg a hatványozás,
gyökvonás, az exponenciális és trigonometrikusfüggvények
Java nyelvi megfelelôivel.
A következô program segítségével hatványozást és gyökvonást végezhetünk, melyek a java.lang csomag Math osztályában találhatók.
A hatványozás
függvénye:
double pow(double alap, double kitevo)
A négyzetgyökvonás:
double sqrt(double alap)
Nézzük a programot! Math1
public class math1 { public double Hatvany(double x, double n){Megjegyzések:
return Math.pow(x,n); //A beépített hatványfv. Meghívása
} public double Negyzetgyok(double y){ return Math.sqrt(y); //A beépített gyökfv. meghívása } public void prog( String args[] ) { System.out.println("Példa a hatványozás és gyökvonáshasználatára:");
double alap, kitevo; //Változót deklarálhatunk itt is
/* A fôprogram elsô két paramétere lesz a hatványfüggvényben az alap és a kitevôértéke. A 3.-nak megadott paramétert pedig a gyökfüggvény kapja értékül.*/ alap=Double.parseDouble(args[0]); kitevo=Double.parseDouble(args[1]); /* A hatványfv double értékeket vár, amit az értékadásnál így közlünk. */ System.out.println(args[0]+"^"+args[1]+"="+Math.round(Hatvany(alap, kitevo))); //Math.round: a double értéket egész számként íratjuk ki. int gyokalap; gyokalap=Integer.parseInt(args[2]); System.out.println(args[2]+"Negyzetgyoke="+Negyzetgyok(gyokalap ) ); } public static void main( String args[] ) { math1 e = new math1(); e.prog( args ); } }
A futás eredménye:
Példa a hatványozás és gyökvonás használatára:
1.5^2=2
8 Négyzetgyöke=2.8284271247461903
A hatványozásnál láthatjuk, hogy a 2.25 helyett a kerekített értéket kapjuk, míg a 8 négyzetgyökét double alakban, 16 tizedesjegy pontossággal.
Az alábbitáblázatban foglaljuk össze a Math osztály legfontosabb függvényeit:
Visszatérési érték típusa |
Függvényfej |
Funkció |
Double |
abs(double a) |
Abszolút érték fv * |
Double |
cos/sin/tan/asin/acos/atan(double) |
Trigonometrikus fvek és inverzeik |
Double |
Exp/log(double) |
és ln(x) |
Double |
toDegrees/toRadians(double) |
Radián érték fok-ba váltása és fordítva |
A trigonometrikus függvények használatához szükségünk lehet a matematika középiskolából jól ismert két nevezetes konstansára: e-re és pi-re. Ezeket a Math osztály speciális változóiként kell kezelnünk, matematikai szempontból az y=e és y=pi konstansfüggvények felelnek meg:
public static final double PI
public static final double E
Arra, hogy ezek konstans
értékû változók, arra a final jelzô
utal (értékük nem változik).
Használatuk
a program szövegében: Math.PI illetve Math.E hivatkozással
történik, vagyis meg kellmondanunk expliciten, hogy a Math osztály
konstans értékûváltozóiról van szó.
1. Feladat
Egyszerû gyakorlatként
írjuk át a kör kerületének és területének
kiszámítását elvégzô programunkat a Math.PI
használatával! Az egyszerûsített megoldást
itt
ellenôrizheted.
2. Feladat
Készítsünk függvénytáblázatot, mely kiírja a nevezetesebb
hegyesszögek (0, 30, 45, 60, 90) sin, cos,tan, ctg értékeit!
A megoldást
itt ellenôrizd.
3. Feladat
Készítsünk
programot, mely megoldja a másodfokú egyenletet, a megoldhatóság
teljes vizsgálatával. A fôprogram 3 bemeneti paramétere
az
másodfokú
egyenlet a, b , c paramétere. A megoldást
itt találhatod.
A Math függvények közt találhatunk egy véletlen
számokat generáló függvényt is:
double random ()
A függvény aláírásából láthatjuk.hogy
paraméter nélküli és double értéket
advissza, mégpedig egy 0<=x<1 pszeudo-véletlenszámot
generál. (A pszeudo jelzés arra utal, hogy nem kaphatunk tökéletes
véletlenszerûséget,hiszen a generált szám valamilyen
módon függ a pocesszorórajelétôl.)
A függvény használata elég egyszerû: ha az [a;b]
intervallumba esô véletlen számokat szeretnénk generálni,
akkor nem kell mást tennünk, mint venni az
a+(b-a+1)*Math.random() kifejezést.
60 = 2*22 + 16 22 = 1*16 + 6 16 = 2*6 + 4 6 = 1*4 + 2 4 = 2*2 + 02 a legnagyobb közös osztó, mivel ez volt az utolsó nem 0 maradék. A megoldást itt ellenôrizheted!