Gyakorlati alapok

Hatványozódjunk...

 

A 4 elemi művelet alapszintű leprogramozása után nézzünk egy kissé bonyolultabb matematikát, bár látni fogjuk, hogy a matematikai alapelv valójában nem az: a hatványozásról és a gyökvonásról van szó.

 

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

 

A matematikai apparátus viszonylag egyszerű: hatványozásról beszélünk, ha számot mindig önmagával szorozzuk meg, például:

 

2 * 2 * 2 * 2 = 16

 

A fenti példában láthatjuk, hogy a 2 számot négyszer (4x) szoroztuk meg, a végeredmény 16 lesz. Egy másik példa:

 

3 * 3 * 3 = 27

 

A fenti 2 műveletet így is ki tudjuk fejezni...

 

24 = 16 és 33 = 27

 

...ahol az alapszám az alap, a felsőindex pedig a kitevő.

 

alapkitevő

 

Voltaképpen a hatványozás egyszerű esetének tekinthető a négyzetre emelés, ahol a kitevő mindig 2 (hatványozási sorrendben a 2. hatvány), azaz:

 

22 = 4 (mert 2 * 2 = 4)

32 = 9 (mert 3 * 3 = 9)

 

A művelet Java-implementációja sokféle lehet az egyszerűtől kezdve egészen a beépített-előregyártott függvényig.

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        int alap = 2;
        int eredmeny = alap * alap * alap * alap;
        System.out.println(eredmeny);
    }
}

 

Végeredmény:

16

 

A fenti kód valójában még nem hatványozás, hanem csak a matematikai kiindulópont.

 

A kitevő jelenléte azt sejteti, hogy ciklikus iterálást (for ciklus) kell alkalmaznunk, még pedig mindig a kitevő mértékéig (for (int i = 1; i <= kitevo; i++));

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        int alap = 2;
        int kitevo = 4;
        int eredmeny = 1;
        for (int i = 1; i <= kitevo; i++){
            eredmeny *= alap;
            }
        System.out.println(eredmeny);
    }
}

 

Végeredmény:

16

 

Fontos észrevennünk, hogy az eredményt 1-el, nem pedig 0-val inicializáltuk (int eredmeny = 1;), mert ebben az esetben a 0-val szorzás mindig 0 lenne, így a végeredmény is.

 

Nézzük meg ugyanezt hátultesztelő ciklussal is (ez a kód kissé döcögős, mert a for ciklus tökéletesen elég az optimális megvalósításhoz):

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int alap = 2;
    int kitevo = 1;
    int eredmeny = 1;
    do{
        eredmeny *= alap;
        kitevo++;
        }while(kitevo <= 4);
    System.out.println(eredmeny);
    }
}

 

Végeredmény:

16

 

Természetesen a Java-nyelv roppant széleskörű, előre megkomponált függvénykönyvtárakkal rendelkezik, ebből következően a számítási kódot sem nekünk kell leprogramozni, "csupán" megtalálni a megfelelő függvényt hozzá és bekonfigurálni (beállítani). Ehhez importálnunk kell a matematikai csomagot (import java.math.*;), amelyből most a Math.pow(alap, kitevo) függvény kell nekünk:

 

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

 

 

 

 

 

 

 

 

import java.math.*;

public class Main {
    public static void main(String[] args) {
        int alap = 2;
        int kitevo = 4;
        double eredmeny = 0;
        eredmeny = Math.pow(alap, kitevo);
        System.out.println(eredmeny);
    }
}

 

Végeredmény:

16.0

 

Mivel a pow() függvény double típusú visszatérési értéket ad, ezért az eredményt (eredmeny) szintén double típusúvá kéne átalakítani. Persze kasztolhatjuk is, ezúttal lefelé ((int) Math.pow(alap, kitevo)), ám ezzel sok esetben adatvesztést kockáztatunk:

 

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

 

 

 

 

 

 

 

 

import java.math.*;

public class Main {
    public static void main(String[] args) {
        int alap = 2;
        int kitevo = 4;
        int eredmeny = 0;
        eredmeny = (int) Math.pow(alap, kitevo);
        System.out.println(eredmeny);
    }
}

 

Végeredmény:

16.0

 

Most érdekességképpen nézzük meg a 2 hatványait 16. hatványig:

 

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

 

 

 

 

 

 

 

 

import java.math.*;

public class Main {
    public static void main(String[] args) {
        int alap = 2;
        double eredmeny = 1;
        for(int kitevo = 0; kitevo <= 16; kitevo++){
            eredmeny = Math.pow(alap, kitevo);
            System.out.println(kitevo + ". hatvány: " + eredmeny);
            }
        }
}

 

Végeredmény:

0. hatvány: 1.0

1. hatvány: 2.0

2. hatvány: 4.0

3. hatvány: 8.0

4. hatvány: 16.0

5. hatvány: 32.0

6. hatvány: 64.0

7. hatvány: 128.0

8. hatvány: 256.0

9. hatvány: 512.0

10. hatvány: 1024.0

11. hatvány: 2048.0

12. hatvány: 4096.0

13. hatvány: 8192.0

14. hatvány: 16384.0

15. hatvány: 32768.0

16. hatvány: 65536.0

 

Az oktatás során felmerült a kód "régimódi", azaz szorzásos-összegzéses megoldása is (eredmeny *= alap). Nézzük meg for ciklusos és do-while ciklusos implementációját:

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    int alap = 2;
    int eredmeny = 1;
    for(int kitevo = 0; kitevo <= 16; kitevo++){
        System.out.println(kitevo + ". hatvány: " + eredmeny);
        eredmeny *= alap;
        }
    }
}

 

Végeredmény:

0. hatvány: 1

1. hatvány: 2

2. hatvány: 4

3. hatvány: 8

4. hatvány: 16

5. hatvány: 32

6. hatvány: 64

7. hatvány: 128

8. hatvány: 256

9. hatvány: 512

10. hatvány: 1024

11. hatvány: 2048

12. hatvány: 4096

13. hatvány: 8192

14. hatvány: 16384

15. hatvány: 32768

16. hatvány: 65536

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args) {
    int alap = 2;
    int kitevo = 0;
    int eredmeny = 1;
    do {
        System.out.println(kitevo + ". hatvány: " + eredmeny);
        eredmeny *= alap;
        kitevo++;
        } while (kitevo <= 16);
    }
}

 

Végeredmény:

0. hatvány: 1

1. hatvány: 2

2. hatvány: 4

3. hatvány: 8

4. hatvány: 16

5. hatvány: 32

6. hatvány: 64

7. hatvány: 128

8. hatvány: 256

9. hatvány: 512

10. hatvány: 1024

11. hatvány: 2048

12. hatvány: 4096

13. hatvány: 8192

14. hatvány: 16384

15. hatvány: 32768

16. hatvány: 65536

 

www.informatika-programozas.hu - Házi feladat

 

Házi feladat - Írjunk programot, ami bekér egy egész számot és kiírja az első annyi darab négyzetszámot!

 

A megoldás fejezete a képre kattintva érhető el.