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

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

41

25.04.2006, 21:59

Hier mal ein Beispiel wie man return, Referenz und Pointer benutzt, ich denk das hilft dir weiter. Diee Increases machen aber nicht das gleiche, es kommt mir lediglich auf die Übergabe der Parameter an.

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
#include <stdio.h>

struct GameData
{
    int Strenght;
    int Agil;
};


// Per Struktur und Return

// Kommentar: Sehr dumm, da sehr langsam!

//---------------------------------------------

struct GameData Increase(GameData gd, int a, int b)
{
    gd.Agil = a + gd.Agil;
    gd.Strenght = b + gd.Strenght;

    // Unsere Funktion berechnet die Werte

    // neu und gibt den berechneten Wert zurück

    return gd; 
}

// Per Referenz

// Kommentar: Sehr komfortabel und schnell

//---------------------------------------------

void IncreaseRef(int &a, int &b)
{
    a = a + a;
    b = b + b;
}

// Per Referenz

// Kommentar: Ebenfalls

//---------------------------------------------

void IncreasePoint(int *a, int *b)
{
    *a = *a + *a;
    *b = *b + *b;
}

int main()
{
    struct GameData Game;

    Game.Agil = 8;
    Game.Strenght = 7;

    // Den berechneten Wert speichern 

    // wir in der Strukur Game die vom Typ struct GameData 

    // sein muss

    Game = Increase(Game, 2, 2);

    // Erhöhung per Refernenz, 

    // WICHTIG, wir brauchen das Ergebnis nicht einer Variablen

    // zuweisen, da die Parameter überschrieben werden ;)

    IncreaseRef(Game.Agil, Game.Strenght);

    // Das gleiche

    IncreasePoint(&Game.Agil, &Game.Strenght);

    return 0;
}

42

26.04.2006, 13:23

Du kannst immer nur einen Wert zurückgeben und bei dieser Aufgabe musst du auch nur einen Wert zurückgeben. Und in der main Heißt es dann

Strength = AddPercent (Strength, Percentage);

denn du musst den zurückgegebenen Wert ja auch irgendwo speichern.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

43

26.04.2006, 15:34

Nein man kann auch mehrere Werte zurückgeben (mit einer Struktur z.B.) oder per Referenz. siehe oben

44

30.04.2006, 13:40

Zitat von »"Anfänger"«

Die Funktionen müssen den Wert zurückliefern den du veränderst.

Du musst das so machen:

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

//--------------------------------------------

// Name: AddPrecent

// Typ: Funktion

// Zweck: Verändert einen Wert vom Typ int

//            um einen bestimmten Prozentsatz

//---------------------------------------------         

int AddPercent (int iValue, int iPercent);

//--------------------------------------------

// Name: AddPercent

// Typ: Funktion

// Zweck: Verändert einen Wert vom Typ float

//            um einen bestimmten Prozentsatz

//--------------------------------------------

float AddPercent (float fValue, int iPercent);

//--------------------------------------------

// main - Funktion

//--------------------------------------------

int main ()
{
          int iStrength = 30;
          float fSpeed = 50;
          int iPercentage = 10;

          // Ausgabe der Werte

          std::cout << "Bisherige Stärke: " << iStrength << std::endl;
          std::cout << "Bisherige geschwindigkeit: " << fSpeed << std::endl;

          // Berechnung der neuen Werte

          iStrength = AddPercent (iStrength, iPercentage);
          fSpeed = AddPercent (fSpeed, iPercentage);

          // Neue Werte ausgeben

          std::cout << std::endl << "Neue Stärke: " << iStrength << std::endl;
          std::cout << "Neue Geschwindigkeit: " << fSpeed << std::endl;

          return 0;
}

//--------------------------------------------

// AddPercent

//--------------------------------------------

int AddPercent (int iValue, int iPercent)
{
         return iValue + iValue / 100 * iPercent;
}

//--------------------------------------------

// AddPercent

//--------------------------------------------

float AddPercent (float fValue, int iPercent)
{
        return fValue + fValue / 100 * iPercent;
}


hmm hab mir das ma durchgelesen weil ich auch ma weiterkommen will aber:
wie kann man eine nicht definierte variable zurückgeben?
{
return fValue + fValue / 100 * iPercent;
}
???
Gruß

kalo

--------------------------------------------------------------
Wichtig:
Das Krümmelmonster darf aus Gesundheitsgründen nurnoch Gemüse essen.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

45

30.04.2006, 15:35

diese Funktion gibt keine Variable sondern einen variablem Wert zurück. Ob dieser jetzt durch eine Variable oder durch eine Formel bestimmt wird ist egal.

46

30.04.2006, 19:51

du kannst das ganze natürlich auch einer Variable zuordnen und den Wert der Variable zurückgeben. Aber das ist schlechter zu lesen.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

47

30.04.2006, 20:23

eine Vaiable repräsentiert eine Speicherzelle, die aus mehreren Bytes, also Speicherblöcken besteht. Wie groß eine Speicherzelle ist, sagst du durch den Typ. so ist ein __int32 4 Byte groß, ein char 1Byte und so weiter.

In einer Speicherzelle kannst du einen korrekten Wert abspeichern, der innerhalb der darstellbaren Zahlen liegt. Bei einem Byte z.B. 256 unterscheidliche Zahlen.

Bei einer Funktion kannst du eintweder Wete oder Zeiger zurückgeben, mehr geht nicht. Werte sind z.B. so was: return 6+7/8*4; oder return PI/sqrt(3+a); oder return 3; Dabei ist es natürlich wurst, ob du nun einer neuen temoprären Varible den Wert zuweist und dann zurückgibt, oder den Wert gleich zurückgibst. Die zusätzliche Var. kostet aber nur sinnlosen speicher, deswegen weg damit.

Zeiger sind Adressen auf Varibalen, da Werte unterschiedlich groß sind (siehe oben) ist es immer besser zeiger zu übergeben, weil diese eine feste Größe haben (Abbhängig von der Rechnerarchitektur). So ist es egal, ob du nur eine Zahl, oder gar eine Textur mit einer Auflösung 5000x6777 übergibst, der Zeiger ist genauso groß.

48

21.06.2006, 13:52

Also ich bin ehrlich:
Ich habe nicht verstanden wie ich Prozente so mache und WARUM! :(

Kann mir das Jemand noch einmal erklären?
Gruß

kalo

--------------------------------------------------------------
Wichtig:
Das Krümmelmonster darf aus Gesundheitsgründen nurnoch Gemüse essen.

49

21.06.2006, 14:11

Willst du wissen wie man Prozent rechnet?
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

50

21.06.2006, 14:16

Naja mein

Stärke+Stärke/100
(wäre stärke + 1% denk ich ma bei 10 wärns 10% aber DAS GEHT JA NICHT)
Gruß

kalo

--------------------------------------------------------------
Wichtig:
Das Krümmelmonster darf aus Gesundheitsgründen nurnoch Gemüse essen.

Werbeanzeige