5. fejezet

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){
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 ); } }
Megjegyzések:

  1. A Hatvany és a Negyzetgyok függvények double paramétereket fogadnakés adnak is vissza, a függvénytörzsben meghívják a Math osztály megfelelô (pow és sqrt) függvényeit.
  2. Az általánosítás kedvéért az args[] segítségével töltjük fel függvényeinket paraméterekkel. Így minden futtatáskor változtathatjuk a bemeneti paraméterek értékeit.Az args[] használatát szintén egy késôbbi fejezetben magyarázzuk részletesen, legyen elég annyi, hogy a programnak a parancssorban megadott 1.,2.,3. stb. paraméter rendre az args[0],args[1], args[2] változók tárolják.
  3. Az alap éskitevo  double típusú változókrendre a fôprogram elsô két paraméterét kapják.Ahhoz, hogy a program az általunk megadott értékeket   double-ként kezelje, Double.parseDouble() függvényt használjuk. Hasonlóképpen, a gyokalap változó a harmadik fôprogram paraméter lesz, integer-ként értelmezve.
  4. A hatványfüggvény double értéketad vissza, amit a Math.round() függvénnyel alsó egészértéket kapunk vissza.
Fordítás után a futtatáshoz adjuk ki az alábbi parancsot:
java math1 1.5 2 8

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)

Exp(x)é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 ax^2+bx+c=0 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.

4. Feladat

Készítsünk 5-ös és 6-os lottó programot a Math osztály véletlenszám generátorának segítségével! Elôször írjuk meg úgy, hogy ne legyen benne ellenôrzés, nem fordul-e elô kétszer ugyanaz a lottószám. A megoldást itt ellenôrizheted! Ezek után oldjuk meg, hogy a számok garantáltan különbözôek legyenek. Itt a megoldás ellenôrzésképpen.


5. Feladat*

Készítsünk totó programot a Math osztály véletlenszám generátorának segítségével! A program elkészítéséhez ismerjük meg és használjuk a % operátort! A % ugyanúgy mûködik, mint az osztás (/), de a hányados helyett a maradékot eredm´nyezi. Egészre és lebegôpontos számra is használható. A megoldást itt ellenôrizheted!


6. Feladat*

Írjunk programot, mely az Euklidészi algoritmus segítségével keresi meg meg két egész szám legnagyobb közös osztóját! Íme egy példa, hogyan mûködik az algoritmus. Keressük 60 és 22 legnagyobb közös osztóját.
60 = 2*22 + 16
22 = 1*16 + 6
16 = 2*6  + 4
 6 = 1*4  + 2
 4 = 2*2  + 0
2 a legnagyobb közös osztó, mivel ez volt az utolsó nem 0 maradék. A megoldást itt ellenôrizheted!


Ellenõrzõ kérdések

  1. Mit nevezünk "beépített" függvényknek?
  2. Hogyan tudunk a beépített függvényekre hivatkozni?
  3. Hogyan tudunk trigonometriai feladatokat Java program segítségével megoldani?
  4. Mit nevezünk konstans értékû változónak? Mondj példát konstans értékû Java változóra!
  5. Mire kell vigyáznunk a trigonometrikus Java függvények bemeneti paramétereinek megadásánál?
  6. Hogyan tudunk java programjainkban kerekített értékeket használni?
  7. Milyen lehetôségeink vannak a Java-ban véletlen számok generálására?

Kovetkezo lecke Tartalomjegyzek