Gyakorlati alapok
BMI, azaz akkor mennyi az ideális?
Az előző, a BMI, azaz soványak és kövérek horrorképlete című fejezetben kiszámoltuk a BMI indexet (body mass index), másnéven testtömeg indexet (TTI). A képlet a testtömeg és a testmagasság arányát fejezi ki, amelyből következtetéseket vonhatunk le a tesztszemély testállapotára vonatkozóan. Bevezetésképpen ismételjük meg a képletet:
TTI = testtömeg / testmagasság2
TTI = kg / m2
A BMI eredménye önmagában szinte semmitmondó, ha néhány rosszindulatú egészségügyi intézet nem fűzött volna hozzá egy olyan szívbemarkoló táblázatot, amelynek kegyetlen szövegezése most már életünk végéig kísérteni fog minket elhízásunk, vagy éppen anorexiánk miatt:
Forrás - Source: Wikipédia
Azonban joggal vetődik fel a kérdés, hogy ha nincs meg az optimális normál testsúly, akkor valójában mennyi lehet az?
A megoldás a fenti képletből már viszonylag egyszerű:
testtömeg = TTI * testmagasság2
kg = TTI * m2
A már ismertetett kódot sem kell túlságosan újraszabnunk, csakis egy új metódust kell beillesztenünk bmiIdealis(double magassag) néven.
Gondoljunk bele: most a normál testtömeget keressük a testmagasság és a hozzá tartozó BMI függvényében. Azonban ez a BMI-sorozat állandó: mindig 18,5 és 25 között található. Nem kell tehát mást tennünk, mint a metódusba csupán 1 bemeneti adatot küldeni (double magassag), a for ciklusos léptetést pedig erre a sorozatra bízni, amely 0.5 lépésekben fogja kinyomtatni az optimális testtömeg-értékeket:
static void bmiIdealis(double magassag) {
System.out.print("Az Ön ideális testsúlyai (kg):\n");
for(double i = 18.5; i <= 24.5; i+=0.5) {
double tomeg = i * Math.pow(magassag/100,
2);
System.out.println(tomeg);
}
}
A végeredményben szereplő bemeneti adatok speciel az én testállapotomat mutatják. Micsoda szégyen...
Nézzük meg a futtatható Java-kódot!
import java.util.Scanner;
public class Main {
static double bekeresMagassag(int alsoHatar, int felsoHatar) {
Scanner scanner = new Scanner(System.in);
boolean OK;
int magassag;
do{
System.out.println("Kérem, hogy adja
meg a testmagasságot (cm)!");
String input = scanner.nextLine();
magassag = Integer.parseInt(input);
OK = magassag >= alsoHatar &&
magassag <= felsoHatar;
if(magassag < alsoHatar)
System.out.println("Túl kicsi szám. Újra!");
if(magassag > felsoHatar)
System.out.println("Túl nagy szám. Újra!");
} while(!OK);
return magassag;
}
static double bekeresTomeg(int alsoHatar, int felsoHatar) {
Scanner scanner = new Scanner(System.in);
boolean OK;
double tomeg;
do{
System.out.println("\nKérem, hogy
adja meg a testtömeget (kg)!");
String input = scanner.nextLine();
tomeg = Double.parseDouble(input);
OK = tomeg >= alsoHatar && tomeg <=
felsoHatar;
if(tomeg < alsoHatar)
System.out.println("Túl kicsi szám. Újra!");
if(tomeg > felsoHatar)
System.out.println("Túl nagy szám. Újra!");
} while(!OK);
return tomeg;
}
static double bmi(double tomeg, double magassag) {
return tomeg / (Math.pow(magassag/100.0, 2));
}
static void bmiIdealis(double magassag) {
System.out.print("Az Ön ideális testsúlyai (kg):\n");
for(double i = 18.5; i <= 24.5; i+=0.5) {
double tomeg = i * Math.pow(magassag/100,
2);
System.out.println(tomeg);
}
}
static void ertekeles(double tomeg, double magassag) {
final double[] BMIHATAR = {16.0, 17.0, 18.5, 25.0, 30.0,
35.0, 40.0};
final String[] BMISZOVEG = {"súlyosan sovány", "mérsékelten
sovány", "enyhén sovány",
"normál testtúly","túlsúlyos", "I. fokú elhízás", "II. fokú elhízás", "III.
fokú, kóros elhízás"};
double BMI = bmi(tomeg, magassag);
System.out.print("\nAz Ön BMI indexe: " + BMI + ", azaz az Ön
testállapota: ");
if(BMI < BMIHATAR[0]) System.out.println(BMISZOVEG[0]);
else if(BMI >= BMIHATAR[0] && BMI < BMIHATAR[1])
System.out.println(BMISZOVEG[1]);
else if(BMI >= BMIHATAR[1] && BMI < BMIHATAR[2])
System.out.println(BMISZOVEG[2]);
else if(BMI >= BMIHATAR[2] && BMI < BMIHATAR[3])
System.out.println(BMISZOVEG[3]);
else if(BMI >= BMIHATAR[3] && BMI < BMIHATAR[4])
System.out.println(BMISZOVEG[4]);
else if(BMI >= BMIHATAR[4] && BMI < BMIHATAR[5])
System.out.println(BMISZOVEG[5]);
else if(BMI >= BMIHATAR[5] && BMI < BMIHATAR[6])
System.out.println(BMISZOVEG[6]);
else System.out.println(BMISZOVEG[7]);
bmiIdealis(double magassag);
}
public static void main(String[] args) {
double magassag = bekeresMagassag(20, 220);
double tomeg = bekeresTomeg(1, 400);
ertekeles(tomeg, magassag);
}
}
Végeredmény:
Kérem, hogy adja meg a testmagasságot!
193
Kérem, hogy adja meg a testtömeget!
115
Az Ön BMI indexe: 30.873312035222423, azaz az Ön testállapota: I. fokú elhízás
Az Ön ideális testsúlyai (kg):
68.91065
70.7731
72.63555
74.49799999999999
76.36045
78.2229
80.08534999999999
81.9478
83.81025
85.67269999999999
87.53515
89.3976
91.26004999999999
Azt hiszem egyetértünk abban, hogy a sorozat túl tág, hiszen 69 és 91 kg között azért jelentős különbség van. Annyit tudunk még tenni, hogy átlagoljuk a sorozatot, tehát megkapjuk az "aranyközepet". Ez így látatlanban a sorozat közepén fog elhelyezkedni, 80 kg körül. Ehhez kissé át kell szabnunk bmiIdealis() metódust és az átlagot szintén külön metódusba illesztjük (bmiSorozatAtlag()):
static double[] bmiIdealis(double magassag) {
double[] taroloTomb = new double[13];
int szamlalo = 0;
System.out.print("Az Ön ideális testsúlyai (kg):\n");
for(double i = 18.5; i <= 24.5; i+=0.5) {
double tomeg = i * Math.pow(magassag/100,
2);
System.out.println(tomeg);
taroloTomb[szamlalo] = tomeg;
szamlalo++;
}
return taroloTomb;
}
static void bmiSorozatAtlag(double[] taroloTomb) {
double osszeg = 0;
double atlag = 0;
for(int i = 0; i < taroloTomb.length; i++) {
osszeg += taroloTomb[i];
}
atlag = osszeg / taroloTomb.length;
System.out.println("\nA sorozat átlaga: " + atlag + " (kg)");
}
Nézzük meg a futtatható Java-kódot!
import java.util.Scanner;
public class Main {
static double bekeresMagassag(int alsoHatar, int felsoHatar) {
Scanner scanner = new Scanner(System.in);
boolean OK;
int magassag;
do{
System.out.println("Kérem, hogy adja
meg a testmagasságot (cm)!");
String input = scanner.nextLine();
magassag = Integer.parseInt(input);
OK = magassag >= alsoHatar &&
magassag <= felsoHatar;
if(magassag < alsoHatar)
System.out.println("Túl kicsi szám. Újra!");
if(magassag > felsoHatar)
System.out.println("Túl nagy szám. Újra!");
} while(!OK);
return magassag;
}
static double bekeresTomeg(int alsoHatar, int felsoHatar) {
Scanner scanner = new Scanner(System.in);
boolean OK;
double tomeg;
do{
System.out.println("\nKérem, hogy
adja meg a testtömeget (kg)!");
String input = scanner.nextLine();
tomeg = Double.parseDouble(input);
OK = tomeg >= alsoHatar && tomeg <=
felsoHatar;
if(tomeg < alsoHatar)
System.out.println("Túl kicsi szám. Újra!");
if(tomeg > felsoHatar)
System.out.println("Túl nagy szám. Újra!");
} while(!OK);
return tomeg;
}
static double bmi(double tomeg, double magassag) {
return tomeg / (Math.pow(magassag/100.0, 2));
}
static double[] bmiIdealis(double magassag) {
double[] taroloTomb = new double[13];
int szamlalo = 0;
System.out.print("Az Ön ideális testsúlyai (kg):\n");
for(double i = 18.5; i <= 24.5; i+=0.5) {
double tomeg = i * Math.pow(magassag/100,
2);
System.out.println(tomeg);
taroloTomb[szamlalo] = tomeg;
szamlalo++;
}
return taroloTomb;
}
static void bmiSorozatAtlag(double[] taroloTomb) {
double osszeg = 0;
double atlag = 0;
for(int i = 0; i < taroloTomb.length; i++) {
osszeg += taroloTomb[i];
}
atlag = osszeg / taroloTomb.length;
System.out.println("\nA sorozat átlaga: " + atlag + " (kg)");
}
static void ertekeles(double tomeg, double magassag) {
final double[] BMIHATAR = {16.0, 17.0, 18.5, 25.0, 30.0,
35.0, 40.0};
final String[] BMISZOVEG = {"súlyosan sovány", "mérsékelten
sovány", "enyhén sovány",
"normál testtúly","túlsúlyos", "I. fokú elhízás", "II. fokú elhízás", "III.
fokú, kóros elhízás"};
double BMI = bmi(tomeg, magassag);
System.out.print("\nAz Ön BMI indexe: " + BMI + ", azaz az Ön
testállapota: ");
if(BMI < BMIHATAR[0]) System.out.println(BMISZOVEG[0]);
else if(BMI >= BMIHATAR[0] && BMI < BMIHATAR[1])
System.out.println(BMISZOVEG[1]);
else if(BMI >= BMIHATAR[1] && BMI < BMIHATAR[2])
System.out.println(BMISZOVEG[2]);
else if(BMI >= BMIHATAR[2] && BMI < BMIHATAR[3])
System.out.println(BMISZOVEG[3]);
else if(BMI >= BMIHATAR[3] && BMI < BMIHATAR[4])
System.out.println(BMISZOVEG[4]);
else if(BMI >= BMIHATAR[4] && BMI < BMIHATAR[5])
System.out.println(BMISZOVEG[5]);
else if(BMI >= BMIHATAR[5] && BMI < BMIHATAR[6])
System.out.println(BMISZOVEG[6]);
else System.out.println(BMISZOVEG[7]);
double[] taroloTomb = new
double[13];
taroloTomb = bmiIdealis(magassag);
bmiSorozatAtlag(taroloTomb);
}
public static void main(String[] args) {
double magassag = bekeresMagassag(20, 220);
double tomeg = bekeresTomeg(1, 400);
ertekeles(tomeg, magassag);
}
}
Végeredmény:
Kérem, hogy adja meg a testmagasságot!
193
Kérem, hogy adja meg a testtömeget!
115
Az Ön BMI indexe: 30.873312035222423, azaz az Ön testállapota: I. fokú elhízás
Az Ön ideális testsúlyai (kg):
68.91065
70.7731
72.63555
74.49799999999999
76.36045
78.2229
80.08534999999999
81.9478
83.81025
85.67269999999999
87.53515
89.3976
91.26004999999999
A sorozat átlaga: 80.08535 (kg)