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

1

02.03.2011, 18:59

[Gelöst]Ich finde den Fehler nicht

Hallo

Ich bin dran die Aufgabenstellung des Kapitels Zeiger und Referenzen zu lösen. Baue gerade das Grundgerüst auf und habe ein Proplem.
Ich starte jetzt dieses Programm. Theoretisch sollte jetzt die Funktion Berechnepunkte die Bonuspunkte hinzurechnen und wieder zurückgeben. Aber wenn ich jetzt wieder die funktion Zeigespieler aufrufe sehe ich das es die Punkte gar nicht dazu gerechnet hat. Wieso?
Ich weiss das ich manche Daten mit Zeiger und Referenzen in die funktion einbringen muss aber wenn ich das Programm erst mal zum laufen bring ist es für mich einfacher die Referenzen und Zeiger umzuwandeln.

Quelltext

C-/C++-Quelltext

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
#include <iostream>

using namespace std;

void LadeLevel ( int Level );
void Zeigespieler ( int Energie, int Punkte, int Team );
int Berechnepunkte ( int Punkte, int Bonus );

int main ()
{
    int Level = 1;
    int Energie = 100;
    int Punkte = 1200;
    int Team = 1;
    int Bonus = 200;

    LadeLevel ( Level );
    Zeigespieler ( Energie, Punkte, Team );
    Berechnepunkte ( Punkte, Bonus );
    Zeigespieler ( Energie, Punkte, Team );

}

void LadeLevel ( int Level )
{
    cout << "Level " << Level << " wird geladen" << endl << endl;
}

void Zeigespieler ( int Energie, int Punkte, int Team )
{
    cout << "Spieler hat:" << endl;
    cout << "Energie: " << Energie << endl;
    cout << "Punkte: " << Punkte << endl;
    cout << "Team: " << Team << endl << endl;
}

int Berechnepunkte ( int Punkte, int Bonus )
{
    Punkte+=Bonus;

    return Punkte;
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tunfisch« (03.03.2011, 20:32)


2

02.03.2011, 19:04

stichwort call by value/call by reference

die variablen von zeigespieler sind kopien der aufrufer variablen, also NICHT die original variablen
alle änderungen dieser variablen in den funktionen haben KEINE auswirkungen auf die in dem hauptprogramm

was du suchst ist ein call by reference, da wird intern die adresse der hauptvariable weitergeben und alle änderungen wirken sich auf aufrufer variable aus

3

02.03.2011, 19:28

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void LadeLevel ( const int &Level )
{
    cout << "Level " << Level << " wird geladen" << endl << endl;
}

void Zeigespieler ( const int &Energie, const int &Punkte, const int &Team )
{
    cout << "Spieler hat:" << endl;
    cout << "Energie: " << Energie << endl;
    cout << "Punkte: " << Punkte << endl;
    cout << "Team: " << Team << endl << endl;
}

int Berechnepunkte ( int &Punkte, const int &Bonus )
{
    Punkte+=Bonus;

    return Punkte;
}


sollte richtig sein (hoffe ich). wäre mit referenzen gelöst.

Jaymz

Frischling

Beiträge: 16

Wohnort: Steiermark / Österreich

  • Private Nachricht senden

4

02.03.2011, 19:32

Das Problem ist das du in der Funktion Berechnepunkte zwar den richtigen Wert zurückgibst, diesen aber nicht speicherst.


C-/C++-Quelltext

1
Punkte = Berechnepunkte ( Punkte, Bonus );



sollte das Problem beheben wenn ich mich nicht irre.

Bösewicht

unregistriert

5

03.03.2011, 00:01

@Jaymz
Er wollte das ganze ja über Zeiger und Referenzen lösen.

Skym0sh0 hat ja schon die Lösung beschrieben.

Jaymz

Frischling

Beiträge: 16

Wohnort: Steiermark / Österreich

  • Private Nachricht senden

6

03.03.2011, 07:15

Ich weiss das ich manche Daten mit Zeiger und Referenzen in die funktion einbringen muss aber wenn ich das Programm erst mal zum laufen bring ist es für mich einfacher die Referenzen und Zeiger umzuwandeln.
dann hab ich das wohl falsch verstanden. :rolleyes:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Jaymz« (03.03.2011, 07:22)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

03.03.2011, 11:10

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void LadeLevel ( const int &Level )
{
    cout << "Level " << Level << " wird geladen" << endl << endl;
}

void Zeigespieler ( const int &Energie, const int &Punkte, const int &Team )
{
    cout << "Spieler hat:" << endl;
    cout << "Energie: " << Energie << endl;
    cout << "Punkte: " << Punkte << endl;
    cout << "Team: " << Team << endl << endl;
}

int Berechnepunkte ( int &Punkte, const int &Bonus )
{
    Punkte+=Bonus;

    return Punkte;
}


sollte richtig sein (hoffe ich). wäre mit referenzen gelöst.

man kanns auch übertreiben^^
hier ist nur einmal eine referenz "nötig" und zwar hier:

C-/C++-Quelltext

1
int Berechnepunkte(int &Punkte, const int Bonus)

sonst war alles schon beim ersten post richtig.
den rückgabewert kannst du dir theoretisch sparen. also würde "void Berechnepunkte" reichen.
diese art der rückgabe ist aber nicht sonderlich schön.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

8

03.03.2011, 14:48

okk danke für die vielen antworten habe inzwischen die aufgabe gelöst.
Jetzt wollte ich zur Übung mal einen Rechner mit Zeiger und Referenzen erstellen habe aber ein Proplem.
Ich glaube das ich alles richtig gemacht habe aber leider funktioniert das Programm nicht, also müsste ich doch irgendwo einen Fehler gemacht haben.
Es funktioniert alles richtig bis auf das das Ergebnis nicht richtig angezeigt wird es steht immer dran das das Ergebnis 0 ist aber dabei hat es doch z.B. 6+7 oder 10-6 gerechnet.

C-/C++-Quelltext

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
#include <iostream>

using namespace std;

void Plus ( int Zahl1, int Zahl2, int *pErgebni );
void Minus ( int Zahl1, int Zahl2, int *pErgebni );
void Mal ( int Zahl1, int Zahl2, int *pErgebni );
void Geteilt ( int Zahl1, int Zahl2, int *pErgebni );
void Ergebnis ( int &Ergebni, int Zahl1, int Zahl2 );

int main ()
{
    int Rechenart;              //Benötigte Variablen
    int Zahl1;                  //Benötigte Variablen
    int Zahl2;                  //Benötigte Variablen
    int Ergebni = 0;            //Benötigte Variablen

    cout << Ergebni;

    cout << "Möchten sie + (1) - (2) *(3) oder / (4) Rechnen?" << endl;
    cout << "Auswahl: ";
    cin >> Rechenart;           //Abfrage + - usw.
    cout << endl << "Zahl1: ";
    cin >> Zahl1;               //Eingabe Zahl1
    cout << endl << "Zahl2: ";
    cin >> Zahl2;               //Eingabe Zahl2
    cout << endl << endl;

    switch (Rechenart)          //+ oder - usw.
    {
        case ('1'):     //+
        {
        Plus ( Zahl1, Zahl2, &Ergebni );
        }break;
    
        case ('2'):     //-
        {
        Minus ( Zahl1, Zahl2, &Ergebni );
        }break;

        case ('3'):     //*
        {
        Mal ( Zahl1, Zahl2, &Ergebni );
        }break;

        case ('4'):     ///
        {
        Geteilt ( Zahl1, Zahl2, &Ergebni );
        }break;
    }

    cout << *pErgebni;  //Ergebnis anzeige

    return 0;
}

void Plus ( int Zahl1, int Zahl2, int *pErgebni )
{
    *pErgebni = Zahl1+Zahl2;
}
void Minus ( int Zahl1, int Zahl2, int *pErgebni )
{
    *pErgebni = Zahl1-Zahl2;
}
void Mal ( int Zahl1, int Zahl2, int *pErgebni )
{
    *pErgebni = Zahl1*Zahl2;
}
void Geteilt ( int Zahl1, int Zahl2, int *pErgebni )
{
    *pErgebni = Zahl1/Zahl2;
}

void Ergebnis ( int &Ergebni, int Zahl1, int Zahl2 )
{
    cout << Zahl1 << " + " << Zahl2 << " = " << Ergebni;
}


Wo ist der Fehler?

9

03.03.2011, 15:53

/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »E333« (02.09.2021, 04:10)


10

03.03.2011, 17:35

Dein Problem ist das: (int) 1 ist nicht dasselbe wie (char) 1 ;)
Wenn du bei dem switch-case einafch mal statt '1' 1 schreibst, wirst du dich wundern ;)

Werbeanzeige