C++ Programmierung |
Jassy unregistriert
|
|
Meine Frage:
Hallo ich habe gerade probleme bei einer Aufgabe:
Header file:
#include<iostream>
#include <string>
using namespace std;
class CMeasValue{
private:
double m_value;
int m_exp;
string m_baseUnit;
public:
CMeasValue(double value = 0.0 ,int exp = 0,string baseUnit= " " );
int getExp();
void setBaseUnit(string baseUnit);
bool setMeasValue(double value,int exp);
double getMeasValue( int exp);
friend ostream& operator << (ostream& out, CMeasValue& rop);
};
Cpp File:
#include<iostream>
#include <string>
#include "_SS.h"
using namespace std;
CMeasValue::CMeasValue( double value, int exp , string baseUnit){
m_baseUnit = baseUnit;
if( exp%3 == 0){
m_exp = exp;
m_value = value;
}
else{
m_exp = 0;
m_value = 0.0;
}
}
int CMeasValue:: getExp(){
return m_exp;
}
void CMeasValue::setBaseUnit(string baseUnit){
m_baseUnit = baseUnit;
}
bool CMeasValue::setMeasValue(double value,int exp){
if( exp%3 == 0){
m_exp = exp;
m_value = value;
return true;
}
else{
return false;
}
};
double CMeasValue::getMeasValue(int exp){
}
Aufgabenstelleung:
Die Zusicherung lautet :
{m_exp%3==0}
Implementieren Sie die getMeasValue()-Methode. Diese Methode wandelt den im Objekt
gespeicherten Messwert m_value *10^m_exp in die durch den Parameter exp übergebene
Größenordnung um und liefert das Ergebnis zurück. Dabei werden die Werte von m_value
und m_exp nicht verändert. Der Parameter exp muss demzufolge auch die Zusicherung von
m_exp nicht einhalten.
Habt ihr tipps für mich wie ich die Methode implementieren kann ?
Im moment fehlt bei mir leider die Idee.
Meine Ideen:
gepostet
|
|
07.12.2013 13:03 |
|
|
|
Bevor du dich ans Programmieren machst, muss dir klar sein, was du tust.
Hast du die Mathematik verstanden, die in dieser Aufgabe von dir gefordert wird?
Wenn ja, nach welcher Formel lässt sich der Rückgabewert errechnen?
__________________ Syntax Highlighting fürs Board (Link)
|
|
07.12.2013 14:02 |
|
|
Jassy unregistriert
|
|
Allgemeine Formel
m_value*10^{m_exp}
Mathematisch muss ich doch jetzt so rechnen:
m_value*10^{m_exp*(-1)} oder?
Mein prolem ist jetzt ein wenig das als code zu schreiben .
Bei der get Methode muss man ja hauptsächlich return benutzen oder?
Aber ich habe trotzdem ein wenig probleme beim implementieren.
Hast du tipps?
|
|
07.12.2013 15:34 |
|
|
|
So, wie ich die Aufgabe verstanden habe:
, wobei value ausgegeben werden soll.
in C++ dann also:
code: |
1:
2:
3:
4:
5:
|
#include <cmath>
double CMeasValue::getMeasValue(int exp){
return m_value * pow(10, m_exp - exp);
} |
|
ach ja: schreibe mal bei deinem Header in die erste Zeile #pragma once, damit stellst du sicher, dass der Header nur einmal eingebunden wird.
__________________ Syntax Highlighting fürs Board (Link)
|
|
07.12.2013 16:37 |
|
|
Jassy unregistriert
|
|
Was bewirkt denn dieses pow ?
m_exp - exp Und warum subtrahierst du hier?
|
|
07.12.2013 17:40 |
|
|
Jassy unregistriert
|
|
Kannst du mir erklären warum die exponenten subtrahiert werden sollen für die Aufgabe ?
|
|
07.12.2013 19:15 |
|
|
|
Ich dachte, das hätte ich
Ich versuche es mit einem Beispiel:
code: |
1:
2:
3:
|
CMeasValue myvalue;
myvalue.setMeasValue(1.53, 6);
double d = myvalue.getMeasValue(5) |
|
diese 15,3 werden nach Ausführung dieser Zeilen in der Variablen d stehen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
07.12.2013 19:25 |
|
|
Jassy unregistriert
|
|
Ich verstehe leider nur noch nicht , warum sich das Komma verschoben hat?
|
|
07.12.2013 20:13 |
|
|
Jassy unregistriert
|
|
Aha jetzt verstehe ich es . Aber bei diesem Beispiel wenn die exponenten ja addiert .
Aber in dem Code wird ja subtrahiert .
Das verstehe ich jetzt nicht so ganz .
Tut mir leid , dass ich das so schwer verstehe .
|
|
07.12.2013 20:56 |
|
|
Jassy unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
|
#include<iostream>
#include <string>
#include "SS.h"
#include <cmath>
using namespace std;
CMeasValue::CMeasValue( double value, int exp , string baseUnit){
m_baseUnit = baseUnit;
if( exp%3 == 0){
m_exp = exp;
m_value = value;
}
else{
m_exp = 0;
m_value = 0.0;
}
}
int CMeasValue:: getExp(){
return m_exp;
}
void CMeasValue::setBaseUnit(string baseUnit){
m_baseUnit = baseUnit;
}
bool CMeasValue::setMeasValue(double value,int exp){
if( exp%3 == 0){
m_exp = exp;
m_value = value;
return true;
}
else{
return false;
}
};
double CMeasValue::getMeasValue(int exp){
return m_value * pow(10, m_exp - exp);
}
|
|
Mir werden folgender fehler angezeigt:
Description Resource Path Location Type
'pow' is ambiguous '
Wie kann ich den fehler beheben ?
Und jetzt habe ich auch noch bei folgender Aufgabe probleme:
Erweitern Sie das main Programm, indem Sie das Beispiel aus f) mit Hilfe der Methode
getMeasValue() programmieren. Erzeugen Sie dazu ein neues Messwert-Objekt test mit
den entsprechenden Parameterwerten und zeigen Sie sowohl das Messwert-Objekt als auch
das Ergebnis der Umrechnung (mit Einheit) auf dem Bildschirm an (siehe Beispiel unten).
MeasValue@0012FF28: 0*10^0
Ich habs versucht so zu testen :
#include <iostream>
using namespace std;
#include "GIT_SS11.h"
int main(){
test.getMeasValue(0);
Aber ich kann hier nur einen Parameter geben ?
Tipps?
}
|
|
07.12.2013 22:44 |
|
|
|
Nochmal zur Berechnung:
Mit setMeasValue(1.53, 6) wird die Zahl 1,53*10^6 erzeugt.
Mit getMeasValue(5) wird der Teil vor der Zehnerpotenz (also das x von x*10^5) ausgegeben.
Zitat: |
Mir werden folgender fehler angezeigt:
Description Resource Path Location Type
'pow' is ambiguous '
Wie kann ich den fehler beheben ? |
Da weiß ich nicht weiter. Du kannst versuchen, #include <cmath> durch #include <math.h> zu ersetzen, aber das würde das Problem nur umgehen, nicht lösen.
Zur Testfunktion:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
|
int main()
{
CMeasValue myvalue;
myvalue.setMeasValue(1.53, 6);
double d = myvalue.getMeasValue(5);
cout << myvalue << " =" << d << "*10^5\n";
return 0;
}
//Ausgabe:
//MeasValue@0x28fee0: 1.53*10^6
// =15.3*10^5 |
|
Damit das funktioniert, musst du natürlich erst die Operatorüberladung implementieren.
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 07:03 |
|
|
Jassy unregistriert
|
|
Warum hast du als ersten Schritt CMeasValule my value;
Geschrieben ?
Kannst du mir erklären wie man das mit der Operator Überladung macht ?
|
|
08.12.2013 12:05 |
|
|
|
Um eine Instanz der Klasse CMeasValue zu erstellen.
code: |
1:
2:
3:
4:
|
ostream& operator << (ostream& out, CMeasValue& rop)
{
out << "MeasValue@" << &rop << ": " << rop.m_value << "*10^" << rop.m_exp << rop.m_baseUnit << endl;
} |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
08.12.2013 12:16 |
|
|
|