BMI Rechner < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:49 Sa 15.10.2011 | Autor: | pina7 |
Aufgabe | Ich schreibe ein Programm, dass den Body Mass Index ausgibt.
Nach BMI Ausgabe hat der Nutzer 3 Möglichkeiten:
1) erneute Eingabe von Gewicht und Größe, erneute BMI Ausgabe, erneute Auswahlmöglichkeit
2) Ausgabe einer spezifischen Übersichtstabelle
3) sofortiges Schließen des Programms |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo,
ich bin bisher soweit gekommen, dass Auswahlmöglichkeit 1 funktioniert.
Hat jemand eine Idee, wie ich die anderen beiden Möglichkeiten programmiere? Noch mal zwei Schleifen oder lieber if-Abfragen setzen?
PS: Meine c++ Kenntnisse sind noch recht frisch.
Ab nächster Zeile folgt mein Quellcode.
// Body_Mass_Index.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int Gewicht = 0;
float Groesse = 0.0;
int Eingabe = 0; // zur Nutzerwahl, wie das Programm weiterlaufen soll
// folgende ist die erste Schleife (es wird eine erneute Ausgabe durchgeführt)
do
{
system("cls");
cout << "*** Body-Mass-Index Berechnung ***" << endl;
cout << " " << endl;
cout << "Bitte geben Sie Ihr Koerpergewicht als ganze Zahl in Kilogramm ein." << endl;
cout << "Gewicht:" << endl;
cin >> Gewicht;
cout << "Bitte geben Sie nun Ihre Koerpergroesse in Meter ein." << endl;
cout << "Groesse:" << endl;
cin >> Groesse;
cout << "" << endl;
cout << "Ihr BMI betraegt: " << fixed << setprecision(0) << Gewicht / (Groesse*Groesse) << endl;
cout << setfill('.') << setw(65) << endl;
cout << "" << endl;
if ((Gewicht / (Groesse*Groesse)) < 19)
{
cout << "" << endl;
cout << "Sie haben Untergewicht." << endl;
}
else if ((Gewicht / (Groesse*Groesse)) > 19 <= 25)
{
cout << "" << endl;
cout << "Sie haben Normalgewicht." << endl;
}
else if ((Gewicht / (Groesse*Groesse)) > 25 <= 30)
{
cout << "" << endl;
cout << "Sie haben Uebergewicht." << endl;
}
else if ((Gewicht / (Groesse*Groesse)) > 30)
{
cout << "" << endl;
cout << "Sie haben Adipositas." << endl;
}
cout << setfill('.') << setw(65) << endl;
cout << "" << endl;
cout << "" << endl; //mit nur einer Leerzeile wird diese nicht angezeigt; verstehe ich nicht...
cout << "Wenn Sie eine erneute Abfrage durchfuehren moechten, druecken Sie die 1." << endl;
cout << "" << endl;
cout << "Wenn Sie eine BMI-Uebersichtstabelle erhalten moechten, druecken Sie die 2." << endl;
cout << "" << endl;
cout << "Wenn Sie das Programm schliessen wollen, druecken Sie die 3." << endl;
cout << "" << endl;
cin >> Eingabe;
} while (Eingabe == 1);
system("pause");
return 0;
}
|
|
|
|
Hallo pina7,
> Ich schreibe ein Programm, dass den Body Mass Index
> ausgibt.
> Nach BMI Ausgabe hat der Nutzer 3 Möglichkeiten:
> 1) erneute Eingabe von Gewicht und Größe, erneute BMI
> Ausgabe, erneute Auswahlmöglichkeit
> 2) Ausgabe einer spezifischen Übersichtstabelle
> 3) sofortiges Schließen des Programms
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>
> Hallo,
> ich bin bisher soweit gekommen, dass Auswahlmöglichkeit 1
> funktioniert.
>
> Hat jemand eine Idee, wie ich die anderen beiden
> Möglichkeiten programmiere? Noch mal zwei Schleifen oder
> lieber if-Abfragen setzen?
> PS: Meine c++ Kenntnisse sind noch recht frisch.
> Ab nächster Zeile folgt mein Quellcode.
>
> // Body_Mass_Index.cpp : Definiert den Einstiegspunkt für
> die Konsolenanwendung.
> //
>
> #include "stdafx.h"
> #include <iostream>
> #include <iomanip>
>
> using namespace std;
>
> int _tmain(int argc, _TCHAR* argv[])
> {
> int Gewicht = 0;
>
> float Groesse = 0.0;
>
> int Eingabe = 0; // zur Nutzerwahl, wie das Programm
> weiterlaufen soll
>
>
> // folgende ist die erste Schleife (es wird eine erneute
> Ausgabe durchgeführt)
> do
> {
>
> system("cls");
>
> cout << "*** Body-Mass-Index Berechnung ***" << endl;
>
> cout << " " << endl;
>
> cout << "Bitte geben Sie Ihr Koerpergewicht als ganze Zahl
> in Kilogramm ein." << endl;
>
> cout << "Gewicht:" << endl;
>
> cin >> Gewicht;
>
> cout << "Bitte geben Sie nun Ihre Koerpergroesse in Meter
> ein." << endl;
>
> cout << "Groesse:" << endl;
>
> cin >> Groesse;
>
> cout << "" << endl;
>
> cout << "Ihr BMI betraegt: " << fixed << setprecision(0)
> << Gewicht / (Groesse*Groesse) << endl;
>
> cout << setfill('.') << setw(65) << endl;
>
> cout << "" << endl;
>
>
> if ((Gewicht / (Groesse*Groesse)) < 19)
>
> {
> cout << "" << endl;
> cout << "Sie haben Untergewicht." << endl;
>
> }
>
> else if ((Gewicht / (Groesse*Groesse)) > 19 <= 25)
>
> {
> cout << "" << endl;
> cout << "Sie haben Normalgewicht." << endl;
>
> }
>
> else if ((Gewicht / (Groesse*Groesse)) > 25 <= 30)
>
> {
> cout << "" << endl;
> cout << "Sie haben Uebergewicht." << endl;
>
> }
>
> else if ((Gewicht / (Groesse*Groesse)) > 30)
>
> {
> cout << "" << endl;
> cout << "Sie haben Adipositas." << endl;
>
> }
>
>
> cout << setfill('.') << setw(65) << endl;
>
> cout << "" << endl;
>
> cout << "" << endl; //mit nur einer Leerzeile wird diese
> nicht angezeigt; verstehe ich nicht...
>
> cout << "Wenn Sie eine erneute Abfrage durchfuehren
> moechten, druecken Sie die 1." << endl;
>
> cout << "" << endl;
>
> cout << "Wenn Sie eine BMI-Uebersichtstabelle erhalten
> moechten, druecken Sie die 2." << endl;
>
> cout << "" << endl;
>
> cout << "Wenn Sie das Programm schliessen wollen, druecken
> Sie die 3." << endl;
>
> cout << "" << endl;
>
> cin >> Eingabe;
>
> } while (Eingabe == 1);
>
> system("pause");
> return 0;
> }
Für die 2 Fälle
1) Berechnung des BMI
2) BMI-Übersichtstabelle
kannst Du, wegen der Übersichtlichkeit, 2 Funktionen schreiben.
Solltest Du in Sachen C++ noch am Anfang stehen, so sind m.E.
weitere IF-Abfragen sinnvoll. Wie Du dann feststellen wirst, wird
das schnell unübersichtlich.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:23 Sa 15.10.2011 | Autor: | pina7 |
danke für deine antwort.
also meinst du mit zwei funktionen zwei neue schleifen oder neue if-bedingungen?
ich weiß auch nicht so genau (egal ob schleife oder if) an welche stelle ich sie dann setzen sollte.
danke nochmals
|
|
|
|
|
Hallo Pina7,
> danke für deine antwort.
>
> also meinst du mit zwei funktionen zwei neue schleifen oder
> neue if-bedingungen?
Mit Funktionen meine ich Unterprogramme.
Eines das den BMI ausrechnet, das andere das die Tabelle erstellt.
> ich weiß auch nicht so genau (egal ob schleife oder if)
> an welche stelle ich sie dann setzen sollte.
Nun, zu Beginn der Schleife hast Du dann eine Abfrage der Art
if (Eingabe == 1)
{
...// Berechne BMI
}
else if (Eingabe ==2)
{
... // Erstelle BMI-Übersichtstabelle
}
else
{
... // Verlasse die Schleife
}
Nebenbei bemerkt, die if-Abfragen
betreffend des BMI stimmen auch nicht ganz:
> danke nochmals
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:28 So 16.10.2011 | Autor: | pina7 |
Mmh, also ich denke ich brauche noch genauere Hilfestellung.
Ich habe es jetzt mit zwei if-Bedingungen geschrieben.
Für die Tabelle (im Moment nur cout << "Tabelle" <<, wird noch vervollständigt, wenn ich die anderen Probleme gelöst habe) funktioniert es, so, wie ich es möchte.
Zum Schließen möchte ich, dass sich das Fenster nach drücken der 3 und enter sofort schließt, also ohne "beliebige Taste drücken". Ich weis, dass dies über auskommentieren von system("pause"); geschieht. In meinem Fall funktioniert das aber nicht. Warum?
Was genau ist bei den if-Abfragen bzgl. des BMI nicht korrekt?
Danke für die Hilfestellung!
Mein Quellcode:
// Body_Mass_Index.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int Gewicht = 0;
float Groesse = 0.0;
int Eingabe = 0; // zur Nutzerwahl, wie das Programm weiterlaufen soll
// folgende ist die Schleife zur erneuten BMI-Bestimmung
do
{
system("cls");
cout << "*** Body-Mass-Index Berechnung ***" << endl;
cout << " " << endl;
cout << "Bitte geben Sie Ihr Koerpergewicht als ganze Zahl in Kilogramm ein." << endl;
cout << "Gewicht:" << endl;
cin >> Gewicht;
cout << "Bitte geben Sie nun Ihre Koerpergroesse in Meter ein." << endl;
cout << "Groesse:" << endl;
cin >> Groesse;
cout << "" << endl;
cout << "Ihr BMI betraegt: " << fixed << setprecision(0) << Gewicht / (Groesse*Groesse) << endl;
cout << setfill('.') << setw(65) << endl;
cout << "" << endl;
if ((Gewicht / (Groesse*Groesse)) < 19)
{
cout << "" << endl;
cout << "Sie haben Untergewicht." << endl;
}
else if ((Gewicht / (Groesse*Groesse)) > 19 <= 25)
{
cout << "" << endl;
cout << "Sie haben Normalgewicht." << endl;
}
else if ((Gewicht / (Groesse*Groesse)) > 25 <= 30)
{
cout << "" << endl;
cout << "Sie haben Uebergewicht." << endl;
}
else if ((Gewicht / (Groesse*Groesse)) > 30)
{
cout << "" << endl;
cout << "Sie haben Adipositas." << endl;
}
cout << setfill('.') << setw(65) << endl;
cout << "" << endl;
cout << "" << endl; //mit nur einer Leerzeile wird diese nicht angezeigt; verstehe ich nicht...
cout << "Wenn Sie eine erneute Abfrage durchfuehren moechten, druecken Sie die 1." << endl;
cout << "" << endl;
cout << "Wenn Sie eine BMI-Uebersichtstabelle erhalten moechten, druecken Sie die 2." << endl;
cout << "" << endl;
cout << "Wenn Sie das Programm schliessen wollen, druecken Sie die 3." << endl;
cout << "" << endl;
cin >> Eingabe;
system("pause");
} while (Eingabe == 1);
// mit dieser if-Abfrage soll eine Tabelle ausgegeben werden
if (Eingabe == 2)
{
cout << "Tabelle" << endl;
system("pause");
}
// hier soll sich das Programm sofort schliessen
else if (Eingabe == 3)
{
return 0;
}
// system("pause");
return 0;
}
|
|
|
|
|
Hallo pina7,
> Mmh, also ich denke ich brauche noch genauere
> Hilfestellung.
> Ich habe es jetzt mit zwei if-Bedingungen geschrieben.
>
> Für die Tabelle (im Moment nur cout << "Tabelle" <<, wird
> noch vervollständigt, wenn ich die anderen Probleme
> gelöst habe) funktioniert es, so, wie ich es möchte.
>
> Zum Schließen möchte ich, dass sich das Fenster nach
> drücken der 3 und enter sofort schließt, also ohne
> "beliebige Taste drücken". Ich weis, dass dies über
> auskommentieren von system("pause"); geschieht. In meinem
> Fall funktioniert das aber nicht. Warum?
>
Nun, das es sich hier um ein Progamm handelt, das auf der Konsole läuft,
schließt sich hier kein Fenster, sondern das Programm wird beendet, wenn
ein andere als die Taste "1" gedrückt wird.
> Was genau ist bei den if-Abfragen bzgl. des BMI nicht
> korrekt?
>
> Danke für die Hilfestellung!
> Mein Quellcode:
>
> // Body_Mass_Index.cpp : Definiert den Einstiegspunkt für
> die Konsolenanwendung.
> //
>
> #include "stdafx.h"
> #include <iostream>
> #include <iomanip>
>
> using namespace std;
>
> int _tmain(int argc, _TCHAR* argv[])
> {
> int Gewicht = 0;
>
> float Groesse = 0.0;
>
> int Eingabe = 0; // zur Nutzerwahl, wie das Programm
> weiterlaufen soll
>
>
> // folgende ist die Schleife zur erneuten BMI-Bestimmung
>
> do
> {
>
> system("cls");
>
> cout << "*** Body-Mass-Index Berechnung ***" << endl;
>
> cout << " " << endl;
>
> cout << "Bitte geben Sie Ihr Koerpergewicht als ganze Zahl
> in Kilogramm ein." << endl;
>
> cout << "Gewicht:" << endl;
>
> cin >> Gewicht;
>
> cout << "Bitte geben Sie nun Ihre Koerpergroesse in Meter
> ein." << endl;
>
> cout << "Groesse:" << endl;
>
> cin >> Groesse;
>
> cout << "" << endl;
>
> cout << "Ihr BMI betraegt: " << fixed << setprecision(0)
> << Gewicht / (Groesse*Groesse) << endl;
>
> cout << setfill('.') << setw(65) << endl;
>
> cout << "" << endl;
>
Zunächst einmal definierst Du Dir eine Variable bmi:
int bmi = Gewicht/(Groesse*Groesse);
Dann werden die Abfragen einfacher.
> if ((Gewicht / (Groesse*Groesse)) < 19)
Hier steht dann: if (bmi < 19)
>
> {
> cout << "" << endl;
> cout << "Sie haben Untergewicht." << endl;
>
> }
>
> else if ((Gewicht / (Groesse*Groesse)) > 19 <= 25)
>
Diese if Abfrage muss lauten: if ((bmi > 19) && (bmi <= 25))
> {
> cout << "" << endl;
> cout << "Sie haben Normalgewicht." << endl;
>
> }
>
> else if ((Gewicht / (Groesse*Groesse)) > 25 <= 30)
>
Genauso hier: if ((bmi > 25) && (bmi <= 30))
> {
> cout << "" << endl;
> cout << "Sie haben Uebergewicht." << endl;
>
> }
>
> else if ((Gewicht / (Groesse*Groesse)) > 30)
>
Genauso hier: if (bmi > 30)
> {
> cout << "" << endl;
> cout << "Sie haben Adipositas." << endl;
>
> }
>
>
> cout << setfill('.') << setw(65) << endl;
>
> cout << "" << endl;
>
> cout << "" << endl; //mit nur einer Leerzeile wird diese
> nicht angezeigt; verstehe ich nicht...
>
> cout << "Wenn Sie eine erneute Abfrage durchfuehren
> moechten, druecken Sie die 1." << endl;
>
> cout << "" << endl;
>
> cout << "Wenn Sie eine BMI-Uebersichtstabelle erhalten
> moechten, druecken Sie die 2." << endl;
>
> cout << "" << endl;
>
> cout << "Wenn Sie das Programm schliessen wollen, druecken
> Sie die 3." << endl;
>
> cout << "" << endl;
>
> cin >> Eingabe;
>
> system("pause");
>
> } while (Eingabe == 1);
>
> // mit dieser if-Abfrage soll eine Tabelle ausgegeben
> werden
>
> if (Eingabe == 2)
>
> {
> cout << "Tabelle" << endl;
>
> system("pause");
>
> }
>
> // hier soll sich das Programm sofort schliessen
>
> else if (Eingabe == 3)
>
> {
> return 0;
> }
>
Diese Abfrage ist hier unnötig.
Die Abfrage nach dem Wert der Variablen "Eingabe" muss in der Schleife erfolgen.
In der Schleife muss dann stehen:
do
{
...if (Eingabe == 1)
{
// Berechnung BMI
...
}
else if (Eingabe ==2)
{
// BMI-Übersichtstabelle
..
}
//Benutzer auffordern zur Eingabe
...
} while ((Eingabe ==1) || (Eingabe==2));
Vor Beginn der Schleife muss die Variable "Eingabe" auf 1 gesetzt werden,
damit die Schleife mindestens einmal durchlaufen wird.
> // system("pause");
> return 0;
> }
Gruss
MathePower
|
|
|
|