[C++] INT Berechnen

Diskutiere [C++] INT Berechnen im Developer Network Forum im Bereich Hardware & Software Forum; Hi ich hab mich mal an einen BMI Rechner gesetzt. Ich will erstmal grobe Zahlen (Soll heißen Int variabeln). Wo ist da der Fehler? #include...
  • [C++] INT Berechnen Beitrag #1
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Hi

ich hab mich mal an einen BMI Rechner gesetzt. Ich will erstmal grobe Zahlen (Soll heißen Int variabeln).

Wo ist da der Fehler?

Code:
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  int Gewicht;
  int Gro;
  int bmi;
  
  cout <<"Bitte geben sie ihr Gewicht an:";
  cin >> Gewicht;
  cls
  cout <<"Bitte geben sie ihre Groeße in cm an:";
  cin >> Gro;
  cls
  bmi = Gewicht / (Groeße*Groeße)
  cout <<"Ihr BMI ist : bmi";
  system("PAUSE");	
  return 0;
}

____________________

selbstgefunden.

cls geht nicht.
int Groeße = int Gro

____________________

Int bmi wird nicht angezeigt. wo ist da der Fehler?
 
Zuletzt bearbeitet:
  • [C++] INT Berechnen Beitrag #2
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
cout <<"Ihr BMI ist : bmi";
Du gibst hier einen String aus, es muss heißen
cout <<"Ihr BMI ist : " << bmi;

Ich würde aber ein float für den BMI verwenden, da bei deiner INT-Berechnung immer abgerundet wird, angenommen es kommt 24,99 raus, so wird dir 24 angezeigt werden.

Ich empfehle auch die Standard C Ausgabefunktionen (printf usw.) zu verwenden, da diese schneller als die Streamklassen von C++ sind.
 
  • [C++] INT Berechnen Beitrag #3
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Super, danke.

Wenn ich jetzt Größe+Gewicht angebe und alles mit Enter bestätige steht da:

"Ihr BMI ist: 0"

ist natürlich an der ganzen Sache bisschen vorbeigeschossen...
 
  • [C++] INT Berechnen Beitrag #4
the ubm

the ubm

Senior Moderator
Dabei seit
29.05.2005
Beiträge
9.464
Reaktionspunkte
1
Du darfst beim BMI ja auch nicht mit der Körpergröße in cm Rechnen, sondern musst diese in Metern angeben -> float.
Oder bmi = Gewicht / (Groeße*Groeße / 10000) sollte auch funktionieren.
 
  • [C++] INT Berechnen Beitrag #5
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
ja es klappt. danke.

Ich werd mal gucken das ich noch ne Tabelle reinbekomme, sodass mit der IF Scheife angezeigt wird ob der jenige zu fett oder zu dürr ist.
 
  • [C++] INT Berechnen Beitrag #6
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
ja es klappt. danke.

Ich werd mal gucken das ich noch ne Tabelle reinbekomme, sodass mit der IF Scheife angezeigt wird ob der jenige zu fett oder zu dürr ist.

www.if-schleife.de ;)

außerdem viel mir da grad ein, dass ich sowas auch mal geschrieben hab.

damit ich dir das jetzt nicht vorgebe mach ich nen Spoiler draus:
float G, K, B;
cout << "Bitte ihr gewicht in KG eingeben" << endl;
cout << "Es wird vertraulich behandelt ;)" << endl;
cin >> G;
cout << "Und jetzt bitte ihre Koerpergroesse in M" << endl;
cout << "bitte die Zahl mit Punkt trennen nicht mit Komma" << endl;
cin >> K;
float B=G/(K*K);
cout << "Ihr BMI betraegt: " << B << endl << "Das bedeutet: " << endl;;
if(B<26)
{
if(B<18)
{
cout << "Untergewicht!" << endl;
}
else
{
cout << "Normalgewicht!" << endl;
}
}
else
{
cout << "Übergewicht!" << endl;
}

der Gesammte Code den ich damals verzapft habe: http://truman.i-networx.de/Code.txt
Sieht ziemlich scheiße aus wenn ich da heute nochmal drüber gucke xD man sollte sich daran jedenfalls nicht orientieren ...
 
Zuletzt bearbeitet:
  • [C++] INT Berechnen Beitrag #7
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Ich hab das jetzt (endlich) mal ausprobiert zu realisieren.
Mein Problem ist das die IF-Abfrage ;) nicht funktioniert bzw. auch bei normal oder übergewicht wird angegeben das man Untergewichtig ist.

Code:
if ( BMI > 20);
               {
               cout <<" " << endl;
               cout <<" " << endl;
               cout <<" Sie sind Untergewichtig! " << endl;
               system("Untergewichtig!");
               system("PAUSE>NUL");
               break;            
               }
                      
               if(BMI = 20 || 21 || 22 || 23 || 24 || 25)
               {
                cout <<" " << endl;
                cout <<" " << endl;
                cout <<" Sie sind Normalgewichtig! " << endl;
                system("Normalgewichtig!");
                system("PAUSE>NUL");
                break;
                }
                
                if(BMI < 25)
                {
                cout <<" " << endl;
                cout <<" " << endl;
                cout <<" Sie sind Übergewichtig! " << endl;
                system("Übergewichtig!");
                system("PAUSE>NUL");
                break;
                }

Wenn ich noch "else" nehme dann wird else als falsche Zeile makiert. Ich benutze Dev-C++ und ich weiß das viele direkt wieder "nein!! bloß nicht" schreien werden aber bis jetzt komm ich gut mit ihm klar..
 
  • [C++] INT Berechnen Beitrag #8
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
if(BMI = 20 || 21 || 22 || 23 || 24 || 25)

BMI = 20 brauchste nicht, gibt es eh nicht

nach dem oder musst Du nochmal musst Du nochmal eine Bedingung angeben, z.B. (Pseudocode)
if(BMI = 21|| BMI= 22 || BMI=23 ...)

geht aber besser mit:
if (BMI <= 25)

und anstatt des letzen ifs könntest Du ein else im vorherigen If-Fall schreiben, und natürlich ein ">" verwendet, anstatt des "<"


Insgesamt bist Du aber mit einer Case-Abfrage besser beraten, außerdem arbeitet system() afaik auf der kommando-zeile (bin mir hier aber net 100% sicher, wie das läuft, zu so später Stunde :D), zur regulären Ausgabe gibt es sicher print() o.ä. und "übergewichtig", etc. sind Adjektive und werden klein geschrieben.

Und btw: ein "break" ist niemals schön. ;)



edit: was macht eigentlich das Semikolon hinter dem ersten if? Weg damit. ;)
Die Einrückungen sind auch nicht schön. Die sollten einheitlich sein.
Gelciher Code mehrfach verwendet ist übrigens genauso ungern gesehen, pack es in einer Funktion, über den BMI als PArameter und return z.B. den Ergebnis-string.
 
Zuletzt bearbeitet:
  • [C++] INT Berechnen Beitrag #9
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
edit: was macht eigentlich das Semikolon hinter dem ersten if? Weg damit. ;)
Die Einrückungen sind auch nicht schön. Die sollten einheitlich sein.
Gelciher Code mehrfach verwendet ist übrigens genauso ungern gesehen, pack es in einer Funktion, über den BMI als PArameter und return z.B. den Ergebnis-string.

das erklärt erstmal seinen letzten Satz, Else gehört zu If und wenn das If schon mit dem ; abgeschlossen ist, gehört da auch kein Else mehr hin!

Mit Funktionen muss er ja noch garnicht angefangen haben, das arbeiten damit lohnt sich aber hier imho eh nicht, da man mehr code produziert als wenn man es in die Main schreibt, Kommentare wären angebracht!

Switch-Case wäre hier außerdem der falsche Ansatzpunkt, da wir nicht auf einzelne Werte, sondern Wertebereiche prüfen!

und zu "Und btw: ein "break" ist niemals schön."
Sag ich mal, hast du dir mit dem Switch-Case vorschlag nen Eigentor verpasst ;)

nun aber zum Code:

Rot heißt: Entfällt!
Blau heißt: Geändert

Code:
if ( [COLOR="Cyan"]BMI < 20[/COLOR])[COLOR="Red"];[/COLOR]
{
    cout <<[COLOR="Red"]" " <<[/COLOR] endl;
    cout <<[COLOR="Red"]" " <<[/COLOR] endl;
    cout <<" Sie sind Untergewichtig! " << endl;
[COLOR="Red"]    system("Untergewichtig!"); // Was soll diese Zeile bezwecken??[/COLOR]
    system("PAUSE>NUL");
[COLOR="Red"]    break;[/COLOR]
}
else if([COLOR="Cyan"]BMI <= 25[/COLOR][COLOR="Red"] || 21 || 22 || 23 || 24 || 25[/COLOR])
{
    cout <<[COLOR="Red"]" " <<[/COLOR] endl;
    cout <<[COLOR="Red"]" " <<[/COLOR] endl;
    cout <<" Sie sind Normalgewichtig! " << endl;
[COLOR="Red"]    system("Normalgewichtig!"); // Was soll diese Zeile bezwecken??[/COLOR]
    system("PAUSE>NUL");
[COLOR="Red"]    break;[/COLOR]
}
[COLOR="Cyan"]else[/COLOR]
{
    cout <<[COLOR="Red"]" " <<[/COLOR] endl;
    cout <<[COLOR="Red"]" " <<[/COLOR] endl;
    cout <<" Sie sind Übergewichtig! " << endl;
[COLOR="Red"]    system("Übergewichtig!"); // Was soll diese Zeile bezwecken??[/COLOR]
    system("PAUSE>NUL");
[COLOR="Red"]    break;[/COLOR]
}

Du versucht aber nicht mit den breaks aus einer größeren, dies umfassenden Schleife heraus zu springen oder?
und gibt es ein Programm bei dir das "Normalgewichtig!" heißt? (bzw. über und unter....?)
Sonst bringt dir dieser Code nichts: system("Normalgewichtig!");
Wenn du das allerdings einfach per Consolenoutput schreiben möchtest (warum auch immer Oo) musst du davor ein echo schreiben...

btw: der system(); befehl zeugt selten von guter Programmierung!
 
  • [C++] INT Berechnen Beitrag #10
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Noch eine Anmerkung zu Deinem Code

Code:
 if(BMI = 20 || 21 || 22 || 23 || 24 || 25)
Das kompiliert zwar, macht aber mit Sicherheit nicht das, was Du damit beabsichtigt hast ;-)
BMI = 20 ist eine Zuweisung und keine Bedingung. Da fehlt ein zweites =.
if (21) ist immer wahr, da 21 != 0 ist. Der IF-Block wird immer ausgeführt.
Richtig muss die Zeile lauten:
Code:
if (BMI == 20 || BMI == 21 || BMI == 22 || BMI == 23 || BMI == 24)
oder einfacher
Code:
if (BMI >= 20 && BMI <= 24)
 
  • [C++] INT Berechnen Beitrag #11
fox99

fox99

Bekanntes Mitglied
Dabei seit
27.11.1999
Beiträge
3.948
Reaktionspunkte
27
Ort
Omicron Persei 8
Richtig muss die Zeile lauten:
Code:
if (BMI == 20 || BMI == 21 || BMI == 22 || BMI == 23 || BMI == 24)
oder einfacher
Code:
if (BMI >= 20 && BMI <= 24)
wobei das 2 verschiedene dinge sind. wenn bmi vom typ int ist, macht es das selbe, wenn jedoch bmi ein float ist, wird das 1. if in den seltensten fällen funktionieren, da hier auf exakte x.0000000 abgefragt wird und floats eigendlich immer nachkommastellen !=0 haben. das 1. macht also nur sinn, wenn man sich wirklich was dabei gedacht hat und weiss was man tut.
 
  • [C++] INT Berechnen Beitrag #12
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
  • [C++] INT Berechnen Beitrag #13
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Ja ich war ziemlich übermüdet ... sorry

ich wollte eigentlich

Code:
system("msg * Uebergewicht!")

schreiben.
 
  • [C++] INT Berechnen Beitrag #14
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
  • [C++] INT Berechnen Beitrag #15
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Die Funktion "system()" dient dazu, ein Programm aufzurufen (siehe http://en.wikipedia.org/wiki/System_(C_standard_library) ).
Du möchtest wahrscheinlich einen Text auf dem Bildschirm ausgeben. Dafür reichen die Zeilen mit "cout" (siehe oben in Deinem anderen Posting).

nein, system() führt ein Programm oder einen Befehl auf der Kommandozeile (Windows) bzw. in der Shell (Unix) aus!

Bei Windows bewirkt das "msg * 'Nachricht'" dass eine Msgbox aufgerufen wird, in der 'Nachricht' steht.
Ob das ganze unter Unix-System überhaupt eine Wirkung hat, weiß ich leider nicht.
 
  • [C++] INT Berechnen Beitrag #16
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
nein, system() führt ein Programm oder einen Befehl auf der Kommandozeile (Windows) bzw. in der Shell (Unix) aus!
Richtig. Nichts anderes habe ich geschrieben. Siehe auch den Link.

Bei Windows bewirkt das "msg * 'Nachricht'" dass eine Msgbox aufgerufen wird, in der 'Nachricht' steht.
Ok, wusste ich nicht. Benutze die Windows Shell nicht.
 
  • [C++] INT Berechnen Beitrag #17
S1024

S1024

Bekanntes Mitglied
Dabei seit
02.03.2009
Beiträge
149
Reaktionspunkte
0
Leute ich muss das Tehma normal von den toten wieder beleben....

Irgendwie klappen eure Codes nicht. Mein Code wär jetzt so:

Code:
 if (ergebnis6 < 20);
               {
               cout << endl;
               cout << endl;
               cout <<" Sie sind Untergewichtig! " << endl;
               system("msg * Untergewichtig!");
               system("PAUSE>NUL");     
               }
               else if(BMI <= 25)
               {
                cout << endl;
                cout << endl;
                cout <<" Sie sind Normalgewichtig! " << endl;
                system("msg * Normalgewichtig!");
                system("PAUSE>NUL");
                }
                
                else
                {
                cout << endl;
                cout << endl;
                cout <<" Sie sind Übergewichtig! " << endl;
                system("msg * Übergewichtig!");
                system("PAUSE>NUL");
                }
 
  • [C++] INT Berechnen Beitrag #18
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Da ist immernoch das Semikolon hinter dem if. ;)

logischer Fehler (vermute ich): Im if vergleichst Du "ergebnis6", im else if dann "BMI".

btw: Die Einrückungenen sind auch noch sehr strukturlos, was zwar die Funktionalität nicht beeinflusst, aber die Lesbarkeit deutlich.
 
  • [C++] INT Berechnen Beitrag #19
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Code:
if (ergebnis6 < 20) {
    cout << endl;
    cout << endl;
    cout <<" Sie sind untergewichtig! " << endl;
    system("msg * untergewichtig!");
    system("PAUSE>NUL");     
} else if (ergebnis6 <= 25) {
    cout << endl;
    cout << endl;
    cout <<" Sie sind normalgewichtig! " << endl;
    system("msg * normalgewichtig!");
    system("PAUSE>NUL");
} else {
    cout << endl;
    cout << endl;
    cout <<" Sie sind übergewichtig! " << endl;
    system("msg * übergewichtig!");
    system("PAUSE>NUL");
}
 
  • [C++] INT Berechnen Beitrag #20
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
So und gleich noch ne Einführung in das DRY prinzip. DRY steht für Don't Repeat Yourself (Wiederhole dich nicht) und das tust du hier gleich in 9 Zeilen

Ein Ziel beim Programmieren sollte es immer sein, Code den man schreibt, immer so kurz und einfach wie möglich zu schreiben ohne auf Funktionalität zu verzichten.
In deinem Beispiel Fallen mir besonders die Zeilen
Code:
cout << endl;
auf.
Diese stehen bei dir direkt hinterm If. Deswegen würde ich vorschlagen, du setzt einmal das hier vor dein erstes If und löscht jeweils die ersten beiden Zeilen aus deinen Ifs
Code:
cout << endl << endl;
if (ergebnis6 < 20) .......
Nun, man könnte ebenfalls den Teil des jeweils nachfolgenden Textes, der überall gleich ist, ebenfalls vor das erste If setzen. Das ist allerdings eine generelle Frage, ob es sich hier lohnt, die Dialoge auseinander zu ziehen.
Was aber auf jeden Fall noch hinter deine Ifs gehört ist das
Code:
system("PAUSE>NUL");
Das kommt nämlich wieder bei jedem If (und beim Else) als letzter Befehl. Somit sähe dein Code nun so aus:
Code:
cout << endl << endl;

if (ergebnis6 < 20)
{
    cout <<" Sie sind untergewichtig! " << endl;
    system("msg * untergewichtig!");
}
else if (ergebnis6 <= 25)
{
    cout <<" Sie sind normalgewichtig! " << endl;
    system("msg * normalgewichtig!");
}
else
{
    cout <<" Sie sind übergewichtig! " << endl;
    system("msg * übergewichtig!");
}
system("PAUSE>NUL");

imho doch schon wieder einfacher zu lesen (und einfacher zu warten. Wenn du mal die Leerzeilen davor löschen willst, musst du jetzt nur noch eine Zeile löschen, vorher wären es sechs gewesen)
 
Thema:

[C++] INT Berechnen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben