Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Matze Fratze

Frischling

  • »Matze Fratze« ist der Autor dieses Themas

Beiträge: 7

Wohnort: S.-H.

  • Private Nachricht senden

1

27.02.2009, 16:01

Wer kann hier nicht rechnen?!?

Hallo zusammen,

ich hab da ein Problem zu einer Aufgabe aus dem Buch (4.9,Seite 111), das ich mir selbst nicht ganz erklären kann...
Vielleicht kann einer von euch mich zurück in die fünfte Klasse schicken, um mich aufzuklären...hinsichtlich der Matheregeln!

Also hier sind zwei Funktionen:

Zitat

int Steigerung(int Staerke, int Prozent)
{
int Steigerung;
Steigerung = ((Staerke/100)*Prozent)+Staerke;
return Steigerung;
}

float Steigerung(float fGeschwindigkeit, int Prozent)
{
float fSteigerung;
fSteigerung = fGeschwindigkeit + (fGeschwindigkeit * Prozent)/100;
return fSteigerung;
}


Es geht also um Prozentrechnung.
In meinem Kopf läuft das folgender Maßen ab: <sprich>
Staerke geteilt durch Hundert (um ein Prozent zu bekommen), mal den Prozentwert, plus dem ursprünglichen Staerkewert.

In meiner Knetwelt hat das bis jetzt auch immer funktioniert, aber nicht in der Knetwelt meines Compilers...hingegen die andere Version, die aus dem Buch ist, die funzt.

Jedoch:
Die floatFunktion hat auch mit meiner Knetweltvariation keine schwierigkeiten gehabt...


Ich fasse zusammen: int-Funktion funktioniert nur mit Buchversion, float-Funktion funktioniert mit beiden.

Wieso :?: :?:

2

27.02.2009, 16:04

wie groß ist stärke? weil wenn du mit ints rechnest ist 49/100=0 und 51/100=1 (bei 50 bin ich mir nicht ganz sicher) ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

27.02.2009, 16:07

Zitat von »"PCShadow"«

wie groß ist stärke? weil wenn du mit ints rechnest ist 49/100=0 und 51/100=1 (bei 50 bin ich mir nicht ganz sicher) ;)


Echt? Ich glaube eher n/100 =0 wenn n<100. :)

4

27.02.2009, 16:07

Hm kommt drauf an wie du wo rechnest ^^ Zeig mal die Funktion ausm Buch ... dein Prozentwert wird immer auf integer-division zurückgeführt. d.h. es wird 0 sein, es sei denn staerke > 100. Wenn du 100.0 schreibst wird Staerke implizit in float gecastest und dann sollte es stimmen ;)
Bei deiner float-Funktion wird Prozent implizit in flaot gecastet, dann die 100 und du hast nen korrektes ergebnis :P
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Matze Fratze

Frischling

  • »Matze Fratze« ist der Autor dieses Themas

Beiträge: 7

Wohnort: S.-H.

  • Private Nachricht senden

5

27.02.2009, 16:08

Zitat

//Aufgabenstellung Kapitel 4.9
//
#include<iostream>
using namespace std;
// Z5
int Steigerung(int Staerke, int Prozent); //Prototyp
float Steigerung(float fGeschwindigkeit, int Prozent);//Prototyp

int main ()
{//Z10
int Staerke, Prozent;
float fGeschwindigkeit;

cout << "Bitte gib einen Staerkewert an: ";
cin >> Staerke;//Z15
cout << endl;
cout << "Bitte gib einen Geschwindigkeitswert an: ";
cin >> fGeschwindigkeit;
cout << endl;
cout << "Bitte gib einen Steigerungswert an: ";//Z20
cin >> Prozent;
cout << endl;//Z22

Staerke = Steigerung(Staerke, Prozent);
/*Z25*/ fGeschwindigkeit = Steigerung(fGeschwindigkeit, Prozent);

cout << "neuer Staerkewert: " << Staerke << endl;
cout << "neuer Geschwindigkeitswert: " << fGeschwindigkeit << endl;
return 0;
}//Z30
int Steigerung(int Staerke, int Prozent)
{
int Steigerung;
Steigerung = ((Staerke/100)*Prozent)+Staerke;
/*Z35*/ return Steigerung;
}

float Steigerung(float fGeschwindigkeit, int Prozent)
{
float fSteigerung;
fSteigerung = fGeschwindigkeit + (fGeschwindigkeit * Prozent)/100;
return fSteigerung;
}


Das macht keinen unterschied, er setzt mir den eingegeben Wert so wieder vor die Nase...

Ich möchte mich gleich für die prompte Bemühung bedanken!! :D

6

27.02.2009, 16:10

Zitat von »"David_pb"«

Zitat von »"PCShadow"«

wie groß ist stärke? weil wenn du mit ints rechnest ist 49/100=0 und 51/100=1 (bei 50 bin ich mir nicht ganz sicher) ;)


Echt? Ich glaube eher n/100 =0 wenn n<100. :)

hm, einigen wir uns darauf, das das vom standard nicht festgelegt ist ;) . Auf windows hast du aber glaub recht, sonst würds nicht so in diversen büchern stehen.

@Matze: und was war die version, die nicht geklappt hat?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

27.02.2009, 16:13

@PCShadow: Ok ;)

@Matze:

Machs so, dann klappts auch mit int:

C-/C++-Quelltext

1
2
3
4
5
6
int Steigerung(int Staerke, int Prozent) 
{ 
int Steigerung; 
Steigerung = ((Staerke*Prozent)/100)+Staerke; 
return Steigerung; 
} 

Matze Fratze

Frischling

  • »Matze Fratze« ist der Autor dieses Themas

Beiträge: 7

Wohnort: S.-H.

  • Private Nachricht senden

8

27.02.2009, 16:15

das es anders geht, das zeigt schon das Buch.
Mich würde interessieren, warum meine Knetwelt mit der des Compilers crasht!

9

27.02.2009, 16:17

Zitat von »"Matze Fratze"«

das es anders geht, das zeigt schon das Buch.
Mich würde interessieren, warum meine Knetwelt mit der des Compilers crasht!

zeigt doch mal die Knetwelt als code. Weil soweit ich das gesehen hab, waren die beiden int-Versionen, die du bis jetz gepostet hast, identisch

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

27.02.2009, 16:20

Rechne halt mal mit integer:

C-/C++-Quelltext

1
2
3
4
5
6
7
int Staerke = 10;
int Prozent = 10;
int Steigerung = ( ( Staerke/100)*Prozent)+Staerke;

// Staerke / 100 = 10 / 100 = 0 (für int gibts keine Nachkommastellen

// 0*Prozent = 0*10 = 0

// 0+Staerke = 0+10 = 10


Unt für float:

C-/C++-Quelltext

1
2
3
4
5
6
7
float Staerke = 10.0f;
float Prozent = 10.0f;
float Steigerung = ( ( Staerke /100.0f ) * Prozent ) + Staerke;

// Staerke / 100.0f = 10.0f / 100.0f = 0.1f (für float GIBT es Nachkommastellen)

// 0.1f * Prozent = 0.1f * 10.0f = 1.0f

// 1.0f + 10.0f = 11.0f

Werbeanzeige