C++ :: Aufgabe #290 :: Lösung #3

3 Lösungen Lösungen öffentlich
#290

WHtR (Waist to Height Ratio) berechnen

Anfänger - C++ von JKooP - 10.05.2020 um 09:17 Uhr
Schreibe ein Programm zur Ermittlung des WHtR- Wertes aus Taillenumfang + Körpergröße und der daraus resultierenden Bewertung.

Es sollen sowohl das Geschlecht (m/w) als auch das Kindesalter bzw. der Altersfaktor für Erwachsene berücksichtigt werden.

Viel Spaß
#3
vote_ok
von JKooP (18090 Punkte) - 07.01.2021 um 19:38 Uhr
C++ 17
WHtR.main
Quellcode ausblenden C-Code
#include <iostream>
#include <string>
#include "WHtR.h"
#include <iomanip>

int main()
{
    WHtR whtr(45, Geschlecht::maennlich, 100, 185);
    std::cout << "Index: " << std::setprecision(2) << whtr.get_whtr_index() << "\tKategorie: " << whtr.get_whtr_gewichtskategorie() << std::endl;
}

WHtR.h
Quellcode ausblenden C-Code
#pragma once
#include <string>

enum class Geschlecht { divers, maennlich, weiblich };

class WHtR
{
public:
	WHtR(int alter, Geschlecht geschlecht, double umfang, double groesse);
	double get_whtr_index();
	std::string get_whtr_gewichtskategorie();

private:
	const double ZUSCHLAG_ALTER_VON{ 40 };
	const double ZUSCHLAG_ALTER_BIS{ 49 };
	const double ZUSCHLAG_ALTER_WERT{ 0.01 };

	double m_umfang;
	double m_groesse;
	int m_alter;
	Geschlecht m_geschlecht;
	double get_whtr_alterszuschlag();
};

WHtR.cpp
Quellcode ausblenden C-Code
#include "WHtR.h"
#include <string>

WHtR::WHtR(int alter, Geschlecht geschlecht, double umfang, double groesse)
{
    m_alter = alter;
    m_geschlecht = geschlecht;
    m_umfang = umfang;
    m_groesse = groesse;
}

double WHtR::get_whtr_index()
{
    auto i{ m_umfang / m_groesse }; // Index

    auto kw{ 0.0 }; // Korrektur weiblich
    if (i < 0.34) kw = 0;
    else if (i >= 0.34 && i <= 0.45) kw = 0.01;
    else if (i >= 0.46 && i <= 0.51) kw = 0.03;
    else if (i >= 0.52 && i <= 0.63) kw = 0.04;
    else kw = 0.05;

    auto ka{ m_alter >= ZUSCHLAG_ALTER_VON && m_alter <= ZUSCHLAG_ALTER_BIS ? get_whtr_alterszuschlag() : 0 }; // Korrektur Alter
    return i - (m_geschlecht == Geschlecht::weiblich ? kw : 0) + ka;
}

double WHtR::get_whtr_alterszuschlag()
{
    return (m_alter - ZUSCHLAG_ALTER_VON) * ZUSCHLAG_ALTER_WERT;
}

std::string WHtR::get_whtr_gewichtskategorie()
{
    auto i{ get_whtr_index() }; // Index

    if (m_alter < 15)
    {
        if (i < 0.34) return "Untergewicht";
        else if (i >= 0.34 && i <= 0.45) return "Normalgewicht";
        else if (i >= 0.46 && i <= 0.51) return "Uebergewicht";
        else if (i >= 0.52 && i <= 0.63) return "Adipositas";
        else return "schwere Adipositas";
    }
    else if (m_alter >= 15 && m_alter <= 49)
    {
        if (i < 0.4) return "Untergewicht";
        else if (i >= 0.4 && i <= 0.5) return "Normalgewicht";
        else if (i >= 0.51 && i <= 0.56) return "Uebergewicht";
        else if (i >= 0.57 && i <= 0.68) return "Adipositas";
        else return "schwere Adipositas";
    }
    else
    {
        if (i < 0.4) return "Untergewicht";
        else if (i >= 0.4 && i <= 0.6) return "Normalgewicht";
        else if (i >= 0.61 && i <= 0.66) return "Uebergewicht";
        else if (i >= 0.67 && i <= 0.78) return "Adipositas";
        else return "schwere Adipositas";
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben