Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- C++ Einführung (http://www.informatikerboard.de/board/thread.php?threadid=2891)
Geschrieben von progger am 05.03.2016 um 13:07:
| 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
Geschrieben von eulerscheZahl am 05.03.2016 um 13:10:
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.
Geschrieben von progger am 05.03.2016 um 13:16:
| 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?
Geschrieben von eulerscheZahl am 05.03.2016 um 14:36:
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).
Geschrieben von progger am 05.03.2016 um 14:52:
Habe ich das mit meiner Bedingung nicht gemacht ?
Ich dachte das zumindest
Geschrieben von eulerscheZahl am 05.03.2016 um 14:57:
| 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.
Geschrieben von progger am 05.03.2016 um 15:15:
In welcher Funktion muss ich denn die Torrdifferenz Berechnung einbauen ?
In addResult ?
Geschrieben von eulerscheZahl am 05.03.2016 um 15:22:
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;
} |
|
Geschrieben von progger am 05.03.2016 um 15:50:
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 ?
Geschrieben von eulerscheZahl am 05.03.2016 um 15:55:
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.
Geschrieben von progger am 05.03.2016 um 15:56:
Alles klar danke .
Bis später
Geschrieben von progger am 05.03.2016 um 17:40:
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?
Geschrieben von eulerscheZahl am 05.03.2016 um 18:08:
| 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;
} |
|
Geschrieben von progger am 05.03.2016 um 18:11:
Was hast du geändert ?
Nur damit ich es weiss und daraus lernen kann.
Geschrieben von Progger am 05.03.2016 um 18:12:
Hat sich erledigt.
Forensoftware: Burning Board, entwickelt von WoltLab GmbH