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

09.06.2015, 14:29

Aufgabe 4.9 - Überladene Funktionen - Verständnisfrage/Logikfehler?

Hi

das Programm hat zwar die Aufgabe erfüllt, auch wenn ich Einiges wie return, lokale Variablen in den Funktionen, void Bezeichnung der Funktionen statt int & float und der Zuweisung 33-34 nicht verwendet habe.

Ich hatte beim Testen ein Verständnisproblem. Ist es richtig, das Stärke die Werte nach dem , nicht im Endergebnis anzeigt, weil im main die Variable als int deklariert ist?
Beim lesen der Aufgabenstellung und Lösung hab ich den Eindruck das, das Programm selbst entscheiden soll float oder int und sich entsprechende Funktion auswählt. Grad wegen der neutralen Variablenbezeichnung "Wert und Prozent", die ja für Stärke/Geschwindigkeit und Steigerung stehen soll.

Was mich auch etwas verwirrt, an sich verstehe ich den Aufbau der Funktionen, nur am Ende gibt er mit "return neuerWert" die lokale Variable als Ergebnis zurück. Bei der Zuweisung hat er aber dann wieder die normale main Variable "Staerke & Geschwindigkeit" in der Funktion drin.
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

09.06.2015, 15:25


das Programm hat zwar die Aufgabe erfüllt, auch wenn ich Einiges wie return, lokale Variablen in den Funktionen, void Bezeichnung der Funktionen statt int & float und der Zuweisung 33-34 nicht verwendet habe.

Wie hast du denn die berechneten Werte aus der Funktion wieder raus bekommen? Ich hoffe nicht über globale Variablen. Das würde auf Dauer viel zu unüberschaubar werden.


Ich hatte beim Testen ein Verständnisproblem. Ist es richtig, das Stärke die Werte nach dem , nicht im Endergebnis anzeigt, weil im main die Variable als int deklariert ist? Beim lesen der Aufgabenstellung und Lösung hab ich den Eindruck das, das Programm selbst entscheiden soll float oder int und sich entsprechende Funktion auswählt.

Ja, int haben keine Nachkommastellen. Und ja, aufgrund der Typen mit denen du die Funktion aufrufst und zurück erwartest kann der Compiler die passende Funktion auswählen. Das nennt sich Überladung, wie in dem Kapitel direkt vor der Aufgabe auch beschrieben sein sollte.


Was mich auch etwas verwirrt, an sich verstehe ich den Aufbau der Funktionen, nur am Ende gibt er mit "return neuerWert" die lokale Variable als Ergebnis zurück. Bei der Zuweisung hat er aber dann wieder die normale main Variable "Staerke & Geschwindigkeit" in der Funktion drin.

Es gibt eine Reihenfolge wie Ausdrücke ausgeführt/ausgewertet werden. Bei a = funktion(a) wird erst funktion(a) ausgeführt und dann die Zuweisung, die den Rückgabewert wieder in a schreibt. Genau so wie z.B. bei a = a+b; das Ergebnis von a+b wieder in a landet.

3

09.06.2015, 15:57

Danke für deine Antwort. Ich hab jetzt 1zu1 die Lösung abgetippt und er zeigt ebenfalls bei der Stärke keine Nachkommastellen an.

Hier der Lösungsquelltext:

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
// C++ für Spieleprogrammierer
// Listing 4.9
// Lösungsvorschlag zur Abgabe in Kapitel 4
//
#include <iostream>

using namespace std;

int addProzent(int Wert, int Prozent);
float addProzent(float Wert, int Prozent);

// Hauptprogramm
//
int main()
{
    // Variablen
    //
    int Staerke;
    float Geschwindigkeit;
    int Steigerung;

    // Abfrage der Werte
    cout << "Bisherige Starke des Charatkters: ";
    cin >> Staerke;

    cout << "Bisherige Geschwindigkeit des Charaktiers: ";
    cin >> Geschwindigkeit;

    cout << "Steigerung in Prozent: ";
    cin >> Steigerung;

    // Neue Werte berechnen
    Staerke = addProzent(Staerke, Steigerung);
    Geschwindigkeit = addProzent(Geschwindigkeit, Steigerung);

    // Ausgabe der neuen Werte
    cout << "\nNeue Charakterwerte: " << endl;
    cout << "Starke: " << Staerke << endl;
    cout << "Geschwindigkeit: " << Geschwindigkeit << endl;

    return 0;
}

// addProzent (für Integer-Werte)
//
int addProzent(int Wert, int Prozent)
{
    int neuerWert;
    neuerWert = Wert + (Wert*Prozent / 100);
    return neuerWert;
}

// addProzent (für float-Werte)
//
float addProzent(float Wert, int Prozent)
{
    float neuerWert;
    neuerWert = Wert + (Wert*Prozent) / 100.0f;
    return neuerWert;
}



Ich hab meinen Quelltext meiner Lösung leider nicht gespeichert. Das Endergebnis war so wie ich das jetzt sehe das Gleiche nur hab ich eben folgende Codeteile anders.

C-/C++-Quelltext

1
2
void addProzent (int Staerke, int Prozentsatz);
void addProzent (float fGeschwindigkeit, int Prozentsatz);


Die Funktion an sich hatte ich so...

C-/C++-Quelltext

1
2
3
4
void addProzent (int Staerke, int Prozentsatz)
{
(Staerke*Prozentsatz)/100+Staerke;
}


in den mainbereich hatte ich es einfach so eingebaut

C-/C++-Quelltext

1
cout << "Neue Staerke: " << addProzent (int Staerke, int Prozentsatz) << endl;


Zuweisung aus Zeile 32-34 fehlt und das ist auch irgendwie mein Verständnisproblem am Quelltext selber. Gespeichert wirds in den Viariablen Staerke und Geschwindigkeit, bei 33-34 weißt er die Variable der Funktion zu, verwendet aber selber die Werte aus den Variablen nicht in der Funktion. Ich versteh nicht wie Staerke und Geschwindigkeit in die Variable "Wert" reinkommt.
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Golden_Boy« (09.06.2015, 16:13)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

09.06.2015, 16:14

Ich hab jetzt 1zu1 die Lösung abgetippt und er zeigt ebenfalls bei der Stärke keine Nachkommastellen an.

Das ist ja auch richtig. Bei int gibt es keine Nachkommastellen.


Ich hab meinen Quelltext meiner Lösung leider nicht gespeichert. Das Endergebnis war so wie ich das jetzt sehe das Gleiche nur hab ich eben folgende Codeteile anders.

C-/C++-Quelltext

1
2
void addProzent (int Staerke, int Prozentsatz);
void addProzent (float fGeschwindigkeit, int Prozentsatz);


Die Funktion an sich hatte ich so...

C-/C++-Quelltext

1
2
3
4
void addProzent (int Staerke, int Prozentsatz)
{
(Staerke*Prozentsatz)/100+Staerke;
}


in den mainbereich hatte ich es einfach so eingebaut

C-/C++-Quelltext

1
cout << "Neue Staerke: " << addProzent (int Staerke, int Prozentsatz) << endl;


Zuweisung aus Zeile 32-34 fehlt.

So wie es da steht, dürfte es nicht einmal compiliert haben. Die Typen beim Funktionsaufruf in der cout Zeile sind Unsinn. Wenn du die entfernst ist das zwar valide, wird aber das Ergebnis nicht ausgeben. Die Funktion setzt nichts und gibt nichts zurück. Wie soll das Ergebnis der Berechnung dann ausgegeben werden?

5

09.06.2015, 16:26

ja wie ich das genau hatte kann ich nicht sagen habs nicht gespeichert. Kann auch sein das es so war...

C-/C++-Quelltext

1
2
cout << "Neue Staerke: ";
addProzent (int Staerke, int Prozentsatz): << endl;



Soweit hab ich meine Fehler ja auch verstanden, nur wenn ich seine Lösung sehe dann verstehe ich nicht ganz den Übergabeprozess der Werte.
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

6

09.06.2015, 18:57

das Programm hat zwar die Aufgabe erfüllt, auch wenn ich Einiges wie return, lokale Variablen in den Funktionen, void Bezeichnung der Funktionen statt int & float und der Zuweisung 33-34 nicht verwendet habe.

Das kann eigentlich nur klappen wenn du deine Parameter als Referenz übergibst ungefähr so.

C-/C++-Quelltext

1
void addProzent(int[b]&[/b] Staerke, int[b]&[/b]Prozentsatz);


Beim lesen der Aufgabenstellung und Lösung hab ich den Eindruck das, das Programm selbst entscheiden soll float oder int und sich entsprechende Funktion auswählt. Grad wegen der neutralen Variablenbezeichnung "Wert und Prozent", die ja für Stärke/Geschwindigkeit und Steige

Das Programm wählt sich selbst die entsprechende Funktion bzw. das macht beim compilieren der Compiler. Wichteg wäre hier noch zu erwähnen das die entsprechende Funktion anhand der Parameter ermittelt wird aber nicht über den Rückgabe wert.

C-/C++-Quelltext

1
int addProzent(int Staerke, int Prozentsatz);
und

C-/C++-Quelltext

1
float addProzent(int Staerke, int Prozentsatz);
hier wird dir der Compiler ein Fehler werfen.

Was mich auch etwas verwirrt, an sich verstehe ich den Aufbau der Funktionen, nur am Ende gibt er mit "return neuerWert" die lokale Variable als Ergebnis zurück. Bei der Zuweisung hat er aber dann wieder die normale main Variable "Staerke & Geschwindigkeit" in der Funktion drin.

Hier wurde ja schon gesagt das Kopien erstellt werden die dann zugewiesen werden. Weiß nicht ob Pointer schon an der Reihe waren aber das könnte man sich jetzt mal schön ausgeben lassen (In der Funktion bzw. vor oder nach dem Aufruf der Funktion)

C-/C++-Quelltext

1
2
3
std::cout << "Adresse Staerke: " << &Staerke << "Wert Staerke: " << Staerke << std::endl;
std::cout << "Adresse Staerke: " << &Prozentsatz<< "Wert Prozentsatz: " << Prozentsatz<< std::endl;
std::cout << "Adresse neuerWert: " << &neuerWert<< "Wert neuerWert: " << neuerWert<< std::endl;

So kann man sehen das zwar immer der Wert gleich bleibt aber nicht die Adresse der Variablen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

herzogRed

Frischling

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

7

09.06.2015, 23:01

Ich hab es in em Kapitel so verstanden, das bei der Funktion nur die Werte wichtig sind, also int oder float. Mann könnte also auch stärke oder Wert weg lassen. Es soll wohl zeigen, das der Name egal ist. Der Compiler schaut nur ob float oder int. Du kannst für Wert auch was anderes einsetzen. ZB auch stärke. Das überlaufen, hier wird ja im Kapitel gut erklärt.

8

13.06.2015, 14:33

Ich weiß nicht was hier los ist, aber ich hab das Gefühl das hier regelmässig Post verschwinden... bis jetzt noch nicht von mir aber von Anderen.... kann das sein oder schieb ich hier einen Film? :zombie:

Also soweit hab ich Funktionen und auch die überladenen verstanden bis auf eine Sache.

Wie kommt der Wert der Variablen von z.B. bei int Staerke; in int Wert; in der Funktion?
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

9

13.06.2015, 14:53

....was?

MfG
Check

10

13.06.2015, 16:01

Wie kommt der Wert der Variablen von z.B. bei int Staerke; in int Wert; in der Funktion?


Probier mal folgendes aus

C-/C++-Quelltext

1
2
3
Staerke = addProzent(Staerke, Steigerung);
// ersetzen mit
 Staerke = addProzent(50, Steigerung);


Vielleicht fällt dann der Groschen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige