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

everywhere

Frischling

  • »everywhere« ist der Autor dieses Themas

Beiträge: 5

Beruf: Schüler

  • Private Nachricht senden

1

21.07.2012, 19:15

C++ für Spielegrogrammierer: Listing 2.3-2.4.1

Hi hab eine Frage zu Listing 2.3

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
// Hauptprogramm
//
int main ()
{
    // Variablen
    //
    int Bonuspunkte, Restzeit, Diamanten;
    int Zeitbonus, Diamantenbonus;
    int PunkteProDiamant, PunkteProSekunde;

    // Variablen initialisieren
    Restzeit = 12;
    Diamanten = 16;
    PunkteProDiamant = 30;
    PunkteProSekunde = 15;

    // Bonus für Restzeit berechnen und ausgeben
    Zeitbonus = Restzeit * PunkteProSekunde;
    cout << "Zeitbonus: " << Zeitbonus << endl;

    // Bonus für Diamanten berechnen und ausgeben
    Diamantenbonus = Diamanten * PunkteProDiamant;
    cout << "Diamantenbonus: " << Diamantenbonus << endl;

    // Gesamtpunkte berechnen und ausgeben
    Bonuspunkte = Zeitbonus + Diamantenbonus;
    cout << "Gesamtpunkte: " << Bonuspunkte << endl;

    return 0;
}



Diese Aufgabe soll man noch mit Rechenoperatoren aus 2.4.1 erweitern, jedoch versteh ich nicht wie genau man die Rechenoperatoren aus 2.4.1 mit der Listing Aufgabe 2.3 ergänzen/erweitern soll.

Edit by dot: Code Tags

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (22.07.2012, 00:10)


FSA

Community-Fossil

  • Private Nachricht senden

2

21.07.2012, 23:50

1. Willkommen ;)
2. Codetags benutzen
3. Könntest du die Aufgabe hier posten? Nicht jeder hat das Buch.

4. Lösung:
*Buch rauskram....such such...*
*aha!*
Du kannst frei experimentieren. Also zähle hier was zusammen, ziehe da was ab und gib das Ergebnis aus.
Grüße ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

S4My

unregistriert

3

21.07.2012, 23:59

Hi,
ich denke ein freundliches herzlich Willkommen im Forum wäre angebracht :D .

Nun, was genau von dir verlangt wird ist recht einfach: lass deiner Fantasie freien Lauf. Im Buch heißt es:

Zitat

Der Umgang mit Variablen [...] ausführlich geübt werden.

Prinzipiell sollst du einfach einmal alle Operatoren Zwecks testen auf tatsächliche Wirkung und sinnvollen Umgang ausprobiert haben.

Das kannst du machen wie du willst, ob nun hier mit dem Listing oder mit selbst geschriebenem Quelltext. Ich denke es wurde an dieser Stelle nur vorgeschlagen, es mit dem bereits vorhandenen Quellcode zu machen, da dieser keine Fehler von Haus aus mitbringt und man so als Einsteiger eine gute Basis zur Erweiterung hat, ohne sich mit möglicherweise eigenen Fehlern auseinander setzen zu müssen, welche nicht das aktuell zu übende Thema betreffen.

Ein Vorschlag wäre beispielsweise einen extra Wert einzufügen, welcher etwa ein Glückstreffer oder irgendwas in dieser Richtung wäre. Nun weißt du ja noch nicht wie man Zufallswerte nimmt, also schlage ich vor das ganze vielleicht einmal auf diese Art anzugehen:

C-/C++-Quelltext

1
2
3
int Gluecksbonus = 2 ;

Diamanten *= Gluecksbonus ;


Sehr dürftig ich weiß :D . Aber naja, vielleicht fällt dir ja was besseres ein, der Punkt ist nur Operatoren auf eigene Faust zu probieren. Wie du das machst bleibt dir überlassen.
Ich hoffe das war in etwa das was du dir erhofft hast, aber bei solchen Dingen ist es schwer Rat zu geben ohne dir alles vorzukauen ;) .

Mlg
S4My

PS: Codetags wären ratsam, im Editor einfach auf den Button mit der entsprechenden Sprache klicken und dort dann reinschreiben.

everywhere

Frischling

  • »everywhere« ist der Autor dieses Themas

Beiträge: 5

Beruf: Schüler

  • Private Nachricht senden

4

22.07.2012, 11:34

Hi,
danke für die Antworten ich glaub ich hab da doch etwas falsch verstanden.
Aufjedenfall hatte ich gestern noch mit Variablen "experimentiert" und das ist dabei rausgekommen:

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// C++ für Spieleprogrammierer
// Übung zu Listing 2.3
// Rechnen mit Variablen
//
#include <iostream>

using namespace std;

// Hauptprogramm 
// 
int main ()
{
    // Variablen
    //
    int Zahl_1, Zahl_2;
    int Ergebniss;

    // Variablen einen Wert geben
    //
    Zahl_1 = 560;
    Zahl_2 = 440;

    Ergebniss = Zahl_1 + Zahl_2;
    cout << "560 + 440 ist " << Ergebniss << endl   //Konsolenausgabe
         << "\n"                                    //Leerzeichen
         << "\n";
  
    
    // Neue Aufgabe
    Zahl_1 = 34;
    Zahl_2 = 66;

    Ergebniss = Zahl_1 + Zahl_2;
    cout << "34 + 66 ist " << Ergebniss << endl
         << "\n"
         << "\n";


    // Neue Aufgabe
    Zahl_1 = 44;
    Zahl_2 = 24;

    Ergebniss = Zahl_1 - Zahl_2;
    cout << "44 - 24 ist " << Ergebniss << endl
         << "\n"
         << "\n";
    


    // Neue Aufgabe
    Zahl_1 = 55;
    Zahl_2 = 35;

    Ergebniss = Zahl_1 - Zahl_2;
    cout << "55 - 35 ist " << Ergebniss << endl
         << "\n"
         << "\n";
    


    // Neue Aufgabe
    Zahl_1 = 7;
    Zahl_2 = 10;

    Ergebniss = Zahl_1 * Zahl_2;
    cout << "7 * 10 ist " << Ergebniss << endl
         << "\n"
         << "\n";


    // Neue Aufgabe 
    Zahl_1 = 35;
    Zahl_2 = 100;

    Ergebniss = Zahl_1 * Zahl_2;
    cout << "35 * 100 ist " << Ergebniss << endl
         << "\n"
         << "\n";



    // Neue Aufgabe
    Zahl_1 = 56;
    Zahl_2 = 7;

    Ergebniss = Zahl_1 / Zahl_2;
    cout << "56 geteilt durch 7 ist " << Ergebniss << endl
         << "\n"
         << "\n";



    // Neue Aufgabe
    Zahl_1 = 81;
    Zahl_2 = 9;

    Ergebniss = Zahl_1 / Zahl_2;
    cout << "81 geteilt durch 9 ist " << Ergebniss << endl
         << "\n"
         << "\n";

    return 0;
}



Mal sehen was ich nocht mit den Variablen hinkrieg. :)

S4My

unregistriert

5

22.07.2012, 12:10

Genau so war das denke ich gemeint :) .

Was du aber noch machen könntest wäre folgendes:

C-/C++-Quelltext

1
2
3
4
5
6
//Variablen
int Zahl1 = 24 , Zahl2 = 65 ;

//Summe bilden und ausgeben
Zahl1 += Zahl2 ;
cout << "Summe aus 24 und 65 ist " << Zahl1 << endl ;

So kann man sich dann die Variable für das Ergebnis sparen und gleichzeitig die Operatoren aus 2.4.1 anwenden. Vorsicht ist aber dann selbstverständlich bei weiteren Operationen geboten, immerhin hat Zahl1 jetzt einen neuen Wert bekommen ;) .

Ist aber nur ein Denkansatz ^^ .

Mlg
S4My

everywhere

Frischling

  • »everywhere« ist der Autor dieses Themas

Beiträge: 5

Beruf: Schüler

  • Private Nachricht senden

6

22.07.2012, 13:30

Hi,
Inspiriert durch deinen letzten post, ist bei mir dann eine kürzere Version von Listing 2.3 entstanden:


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
// C++ für Spieleprogrammierer
// Listing 2.3 Übung 2
// Rechnen mit Variablen
//
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
     
    int Restzeit = 10;
    int Diamanten = 3;
    int Gold = 8;
    int Silber = 12;
    int Eisen = 9;
    int Kohle = 5;

    int Diamantenbonus = Diamanten *= Restzeit;
    int Goldbonus = Gold *= Restzeit;
    int Silberbonus = Silber *= Restzeit;
    int Eisenbonus = Eisen *= Restzeit;
    int Kohlebonus = Kohle *= Restzeit;
    int Gesamtpunkte = Diamantenbonus + Goldbonus + Silberbonus + Eisenbonus + Kohlebonus;

    cout << "Du erhaelst folgenden Bonus:\n"
         << "\n"
        << "Diamantenbonus: " << Diamantenbonus << endl
         << "Goldbonus: " << Goldbonus << endl
         << "Silberbonus: " << Silberbonus << endl
         << "Eisenbonus: " << Eisenbonus << endl
         << "Kohlebonus: " << Kohlebonus << endl
        << "\n"
         << "Gesamtpunkte: " << Gesamtpunkte << endl
         << "\n";


    return 0;
}


So, halt noch mit ein paar anderen Sachen,das ganze ist ja jetzt gekürzt mit den Rechenoperatoren aus 2.4.1, oder?

S4My

unregistriert

7

22.07.2012, 16:58

Nein, nicht ganz, genau genommen hast du dir noch mehr Arbeit gemacht ^^ .

Die Operatoren "+=", "-=", "*=", "/=" und "%=" sind dazu geschaffen um Rechenoperationen wie folgt zu kürzen:

C-/C++-Quelltext

1
Zahl1 = Zahl1 + Zahl2 ;


auf das hier

C-/C++-Quelltext

1
Zahl1 += Zahl2 ;


Dabei sind die beiden Aufgaben äquivalent.
Mit jedem Operator der aus einem Rechenoperator und dem Zuweisungsoperator zusammengesetzt wird, wird die Rechenoperation des erstgenannten ausgeführt und dann eine Zuweisung auf die Variable Links des Operators vorgenommen.

Kürzer wären deine Operationen nur wenn du die Boni gleich auch in die entsprechenden Variablen speicherst, etwa so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
int Diamantenpunkte = 3 ; //das sind die Punkte die man nach dem "Spiel" bekommen hat, also noch nicht mit dem Bonus für diesen Wert
int Restzeit = 24 ; //das ist die übrig gebliebene Zeit

//Punkte errechnen und dann gleich speichern
Diamantenpunkte *= Restzeit ;

//jetzt ausgeben
cout << "Diamantenpunkte: " << Diamantenpunkte << endl ;


Hier ist vielleicht der Name der Variable für die Punkte erreicht durch das sammeln der Diamanten nicht wirklich fein gewählt und das ganze ist im allgemeinen noch nicht wirklich ausgereift, aber vielleicht ist das nächste Beispiel sinnvoller, denn diese Operatoren sind hauptsächlich als Tippersprarnis gedacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
Wir haben ein Programm für eine Bank zu schreiben. Nun stehen wir vor folgender Aufgabe:
Der Kunde hat ein Konto auf dem bereits Bargeld liegt, jetzt möchte er allerdings welches einzahlen.
Wir, die völlig schreibfaulen Informatiker wollen das möglichst schnell gelöst haben.
Also, gehen wir es an!
*/

//ich verwende einen flaot-Wert, da ja auch Cent vorkommen können
float Kontostand = 65,45f ; //reich, kann man nicht abstreiten ^^

float Einzahlung = 12,10f ; //Taschengeld, was auch sonst

//Geld addieren, aber bitte möglichst kurz
Kontostand += Einzahlung ; //also genauso wie Kontostand = Kontostand + Einzahlung

//Vermögen anzeigen
cout << "Sie haben " << Kontostand << " Euro auf ihrem Konto!" << endl ;


In der Praxis ist das klarerweise nicht so einfach, aber hier sollte gezeigt werden wie diese Operatoren eigentlich zu verwenden sind. Zugegebener Maßen ist Listing 2.3 nicht wirklich dafür geeignet solche Dinge auszuprobieren, aber naja, man kann es ja auch anders machen :D .

Ich hoffe es ist dir nun ein klein wenig klarer wie diese Operatoren zu benutzen sind, meistens wenn man einen Hauptwert hat, welcher um einen anderen Wert erhöht, vermindert, etc. werden soll. Geh es einfach noch eine Weile durch bis es dir vollkommen klar ist, aber ich kann dir versprechen wenn du dich dahinterklemmst passt das schon :thumbsup: .

Mlg
S4My

everywhere

Frischling

  • »everywhere« ist der Autor dieses Themas

Beiträge: 5

Beruf: Schüler

  • Private Nachricht senden

8

22.07.2012, 18:58

Danke für die Erklärungen :thumbsup:
Hab es nochmal überarbeitet:

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
// C++ für Spieleprogrammierer
// Listing 2.3 Übung 2
// Rechnen mit Variablen
//
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
    
    int Restzeit = 10;
    int Diamanten = 3;
    int Gold = 8;
    int Silber = 12;
    int Eisen = 9;
    int Kohle = 5;

    Diamanten *= Restzeit;
    Gold *= Restzeit;
    Silber *= Restzeit;
    Eisen *= Restzeit;
    Kohle *= Restzeit;
    

    cout << "Du erhaelst folgenden Bonus:\n"
        << "\n"
        << "Diamantenbonus: " << Diamanten << endl
        << "Goldbonus: "    << Gold << endl
        << "Silberbonus: "  << Silber << endl
        << "Eisenbonus: "   << Eisen << endl
        << "Kohlebonus: "   << Kohle << endl
        << "\n";
        


    return 0;
}



Hoffe das dass jetzt richtig gekürzt ist, sonst weiss ich auch nicht mehr weiter :hmm:


MFG
everywhere

S4My

unregistriert

9

22.07.2012, 20:11

Ja genau, jetzt hast du dir Arbeit hinsichtlich des Tippens erspart :D .

Mlg
S4My

everywhere

Frischling

  • »everywhere« ist der Autor dieses Themas

Beiträge: 5

Beruf: Schüler

  • Private Nachricht senden

10

23.07.2012, 15:51

Super,
Danke das du einem Neuling wie mir geholfen hast :)

Werbeanzeige