| 05.03.2016, 11:28 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
Wie kamst du denn auf die Punktzahl?
Mit this und rop. Auf die Tore kannst du genauso zugreifen. |
| |
| |
|
| 05.03.2016, 11:33 |
Auf diesen Beitrag antworten » |
| progger |
this->addResult() Das wäre tordifferenz linker Operand? |
| 05.03.2016, 11:43 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
Schau nochmal, was addResult tut? Berechnet das wirklich die Tordifferenz? |
| 05.03.2016, 11:53 |
Auf diesen Beitrag antworten » |
| progger |
Gesamtzahl der Tore und Gegentore ist ja das hier :
m_goalsScoredTotal += goalsScored;
m_goalsReceivedTotal+= goalsReceived;
Aber die differenz von den beiden hatte ich ja in meiner ersten if bedingung gebildet?
|
| Anzeige |
| |
|
| 05.03.2016, 12:06 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
addResult verändert aber die Tordifferenz. Das willst du nicht.
Frage einfach die Variablen ab.
| code: |
1:
2:
|
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal; |
|
Und die beiden Werte dann vergleichen. |
| 05.03.2016, 13:07 |
Auf diesen Beitrag antworten » |
| progger |
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
bool CTeam::operator < (CTeam const& rop){
if((this->getTotalPoints()== rop.getTotalPoints())&&(team1Diff>team2Diff ) ){
return true;
}
else {
return false;
}
}
|
|
Jetzt müsste es aber stimmen ?
Ich hoffe das ich bei einer anderen Aufgabe selbst darauf kommen kann |
| 05.03.2016, 13:10 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
Die Berechnung der Tordifferenz gehört in die Funktion, nicht außerhalb.
Und was machst du, wenn du Mannschaften eine unterschiedliche Punktzahl haben? Dann kommt es auf die Tordifferenz gar nicht an. |
| 05.03.2016, 13:16 |
Auf diesen Beitrag antworten » |
| progger |
| 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:
|
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
bool CTeam::operator < (CTeam const& rop){
if((this->getTotalPoints()== rop.getTotalPoints())&&(team1Diff>team2Diff ) ){
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
return true;
}
else {
return false;
}
if(this->getTotalPoints()!= rop.getTotalPoints()){
return false;
}
}
|
|
Ok? |
| 05.03.2016, 14:36 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
Nein mal knapp.
1. Vergleiche Punkte, bei Ungleichheit gib direkt true oder false zurück, je nachdem was größer ist.
2. Wenn die Punkte gleich sind, berechne Tordifferenzen (IN der Funktion, nicht davor). |
| 05.03.2016, 14:52 |
Auf diesen Beitrag antworten » |
| progger |
Habe ich das mit meiner Bedingung nicht gemacht ?
Ich dachte das zumindest |
| 05.03.2016, 14:57 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
| code: |
1:
|
if((this->getTotalPoints()== rop.getTotalPoints())&&(team1Diff>team2Diff ) ){ |
|
Hier fragst du gleich die Tordifferenz ab, ohne sie vorher berechnet zu haben. (Zeile 2 und 3 zählt nicht. Das muss in der Funktion stehen).
Dann berechnest du die Differenzen, um unabhängig vom Ergebnis true zurückzugeben.
Ansonsnten gibst du false zurück.
Im folgenden Code, der die erreicht wird (Funktion bereits verlassen) gibst du nochmal false zurück.
Du vergisst den Fall, dass aufgrund der erreichten Punkte true zurückgegeben wird. |
| 05.03.2016, 15:15 |
Auf diesen Beitrag antworten » |
| progger |
In welcher Funktion muss ich denn die Torrdifferenz Berechnung einbauen ?
In addResult ? |
| 05.03.2016, 15:22 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
Ich habe dir den Wortlaut der Angabe nochmal abgetippt.
Das ist fast schon malen nach Zahlen.
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
bool CTeam::operator < (CTeam &rop) {
//es wird true zurückgegeben, wenn der linke Operand mehr Punkte hat als der rechte Operand
if (this->getTotalPoints() > rop.getTotalPoints()) return true;
//bei gleich vielen Punkten entscheidet die Tordifferenz
if (this->getTotalPoints() == rop.getTotalPoints()) {
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
//Wenn der linke Operand die bessere (höhere) Tordifferenz hat als der rechte, wird ebenfalls true zurückgegeben
if (team1Diff > team2Diff) return true;
}
//in allen anderen Fällen wird false zurückgegeben
return false;
} |
|
|
| 05.03.2016, 15:50 |
Auf diesen Beitrag antworten » |
| progger |
Danke für deine Hilfe . Jetzt werde ich mich mal zum nächsten Aufgabengeil ans üben machen .
Bei Problemen melde ich mich wieder . Wie lange hast du denn gebraucht um programmieren so gut zu lernen ? |
| 05.03.2016, 15:55 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
Auch nach mehreren Jahren würde ich nicht behaupten, dass ich das perfekt kann.
Und da hilft nur üben. Bestimmte Muster treten immer wieder auf, die kannst du irgendwann blind eintippen. |
| 05.03.2016, 15:56 |
Auf diesen Beitrag antworten » |
| progger |
Alles klar danke .
Bis später |
| 05.03.2016, 17:40 |
Auf diesen Beitrag antworten » |
| progger |
Es werden mir aber immer noch fehler angezeigt wie ich gerade sehe:
| 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:
|
#define CTEAM_H_
#include <string>
#include <iostream>
using namespace std;
class CTeam{
private:
string m_teamName;
unsigned int m_winsTotal; //Initialisierung kommt in die .cpp, nicht in den header
unsigned int m_equalTotal;
unsigned int m_lostTotal; //die Zeile hat gefehlt
unsigned int m_goalsScoredTotal;
unsigned int m_goalsReceivedTotal;
public:
CTeam(string name); //keine default Werte im Header
string getName();
void addResult( unsigned int goalsScored, unsigned int goalsReceived);
unsigned const int getTotalPoints();
friend ostream& operator << (ostream& out , CTeam const& rop); //du hattest >>
bool operator < (CTeam const& rop);
};
|
|
cpp
| 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:
|
#include <iostream>
#include <string>
#include "CTeam.h"
using namespace std;
CTeam::CTeam(string name = "NoName") {
m_teamName = name;
m_goalsScoredTotal = 0;
m_goalsReceivedTotal = 0;
m_winsTotal = 0;
m_equalTotal = 0;
m_lostTotal = 0;
}
string CTeam::getName() {
return m_teamName;
}
void CTeam::addResult(unsigned int goalsScored, unsigned int goalsReceived){
if (goalsScored > goalsReceived) {
m_winsTotal++;
}
if (goalsReceived > goalsScored) {
m_lostTotal++;
}
if (goalsReceived == goalsScored) {
m_equalTotal++;
}
m_goalsScoredTotal += goalsScored;
m_goalsReceivedTotal+= goalsReceived;
};
unsigned const CTeam:: getTotalPoints(){
return m_winsTotal*3 + m_equalTotal*1;
};
ostream& operator << (ostream &out, const CTeam &rop) {
out<<"CTeam@" << rop.m_winsTotal<< "Spiele gewonnen " << " , " << rop.m_equalTotal << " Spiele unentschieden"<< endl;
out << "CTeam@"<< rop.m_goalsScoredTotal << " Tore erzielt " <<" , " << rop.m_goalsReceivedTotal << " " << " Tore kassiert "<< endl;
};
bool CTeam::operator < (CTeam &rop) {
//es wird true zurückgegeben, wenn der linke Operand mehr Punkte hat als der rechte Operand
if (this->getTotalPoints() > rop.getTotalPoints()) return true;
//bei gleich vielen Punkten entscheidet die Tordifferenz
if (this->getTotalPoints() == rop.getTotalPoints()) {
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
//Wenn der linke Operand die bessere (höhere) Tordifferenz hat als der rechte, wird ebenfalls true zurückgegeben
if (team1Diff > team2Diff) return true;
}
//in allen anderen Fällen wird false zurückgegeben
return false;
}
|
|
Description Resource Path Location Type
candidate is: bool CTeam::operator<(const CTeam&) CTeam.h /CTeam line 32 C/C++ Problem
Member declaration not found CTeam.cpp /CTeam line 44 Semantic Error
prototype for 'bool CTeam::operator<(CTeam&)' does not match any in class 'CTeam' CTeam.cpp /CTeam line 44 C/C++ Problem
no return statement in function returning non-void [-Wreturn-type] CTeam.cpp /CTeam line 43 C/C++ Problem
No return, in function returning non-void CTeam.cpp /CTeam line 39 Code Analysis Problem
Ich verstehe es nicht warum? |
| 05.03.2016, 18:08 |
Auf diesen Beitrag antworten » |
| eulerscheZahl |
| 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:
|
#pragma once
#include <string>
#include <iostream>
using namespace std;
class CTeam{
private:
string m_teamName;
unsigned int m_winsTotal; //Initialisierung kommt in die .cpp, nicht in den header
unsigned int m_equalTotal;
unsigned int m_lostTotal; //die Zeile hat gefehlt
unsigned int m_goalsScoredTotal;
unsigned int m_goalsReceivedTotal;
public:
CTeam(string name); //keine default Werte im Header
string getName();
void addResult( unsigned int goalsScored, unsigned int goalsReceived);
unsigned int getTotalPoints() const;
friend ostream& operator << (ostream& out , CTeam const& rop); //du hattest >>
bool operator < (const CTeam& rop) const;
}; |
|
| 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:
|
#include <iostream>
#include <string>
#include "CTeam.h"
using namespace std;
CTeam::CTeam(string name = "NoName") {
m_teamName = name;
m_goalsScoredTotal = 0;
m_goalsReceivedTotal = 0;
m_winsTotal = 0;
m_equalTotal = 0;
m_lostTotal = 0;
}
string CTeam::getName() {
return m_teamName;
}
void CTeam::addResult(unsigned int goalsScored, unsigned int goalsReceived){
if (goalsScored > goalsReceived) {
m_winsTotal++;
}
if (goalsReceived > goalsScored) {
m_lostTotal++;
}
if (goalsReceived == goalsScored) {
m_equalTotal++;
}
m_goalsScoredTotal += goalsScored;
m_goalsReceivedTotal+= goalsReceived;
};
unsigned int CTeam::getTotalPoints() const {
return m_winsTotal*3 + m_equalTotal*1;
};
ostream& operator << (ostream &out, const CTeam &rop) {
out<<"CTeam@" << rop.m_winsTotal<< "Spiele gewonnen " << " , " << rop.m_equalTotal << " Spiele unentschieden"<< endl;
out << "CTeam@"<< rop.m_goalsScoredTotal << " Tore erzielt " <<" , " << rop.m_goalsReceivedTotal << " " << " Tore kassiert "<< endl;
};
bool CTeam::operator < (const CTeam& rop) const {
//es wird true zurückgegeben, wenn der linke Operand mehr Punkte hat als der rechte Operand
if (this->getTotalPoints() > rop.getTotalPoints()) return true;
//bei gleich vielen Punkten entscheidet die Tordifferenz
if (this->getTotalPoints() == rop.getTotalPoints()) {
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
//Wenn der linke Operand die bessere (höhere) Tordifferenz hat als der rechte, wird ebenfalls true zurückgegeben
if (team1Diff > team2Diff) return true;
}
//in allen anderen Fällen wird false zurückgegeben
return false;
} |
|
|
| 05.03.2016, 18:11 |
Auf diesen Beitrag antworten » |
| progger |
Was hast du geändert ?
Nur damit ich es weiss und daraus lernen kann. |
| 05.03.2016, 18:12 |
Auf diesen Beitrag antworten » |
| Progger |
Hat sich erledigt. |