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

gobuhl07

Frischling

  • »gobuhl07« ist der Autor dieses Themas

Beiträge: 9

Beruf: Schüler

  • Private Nachricht senden

1

23.02.2011, 18:20

Frage zu Kapitel 4.9.2

Ich habe mir nachdem ich die Aufgabe gelöst habe die Lösung angesehen und bei folgenden Codeabschnitt ist mir eine Frage gekommen

C-/C++-Quelltext

1
2
3
4
5
6
int addProzent (int Wert, int Prozent)
{
int neuerWert;
neuerWert = Wert + (Wert*Prozent)/100;
return neuerWert;
}



Meine Frage ist wieso in den Funktionsparametern die Variablen "Wert" und "Prozent" vorkommen obwohl sie außer in dem Funktionsprototyp noch nie in dem Code vorkommen?

Wäre nett wenn ihr mir das mal kurz erklären könntet.

Mfg Gobuhl :)
Facio aliquid iuris notitia neminem eo. Facio aliquid illicitum, nemooblitus est. - Mache ich etwas richtig, merkt es keiner. Mache ich etwas falsch, vergisst es keiner.

Lerikson

Alter Hase

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

2

23.02.2011, 18:32

Hey,
Also wenn ich dich richtig verstehe fragst du dich, warum in der Funktionsdeklaration:

C-/C++-Quelltext

1
2
int addProzent (int Wert, int Prozent)
// Folgende


Die Variablen "Wert" und "Prozent" auftauchen, obwohl sie nicht in der "main()-Funktion" auftauchen?

Nun die Erklärung ist die, dass du den Funktionsparametern deiner Funktion jeden möglichen Namen geben kannst wenn du willst (auch wenn sie möglichst sinnvoll gehalten werden sollten!), und du dann diese Parameter innerhalb der Funktion verwenden kannst wie "normale" Variablen (was sie eigentlich auch sind):

C-/C++-Quelltext

1
2
3
4
5
{
int neuerWert;
neuerWert = Wert + (Wert*Prozent)/100;
return neuerWert;
}


Wenn du also in deiner main()-Funktion folgendes schreibst:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
  int ErsterWert = 100;
  int ZweiterWert = 19;

  int Ergebnis;

  Ergebnis = addProzent(ErsterWert, ZweiterWert);


  // some more code....

  return(0);

}

w
dann werden für "Wert" und "Prozent" die Werte aus "ErsterWert" und "ZweiterWert" eingesetzt.
Errare est humanum. -Windows ist menschlich ;-)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lerikson« (23.02.2011, 19:57)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

23.02.2011, 19:14

Die formalen Parameter Wert und Prozent werden beim Aufruf der Funktion an die tatsächlichen Parameter/Werte gebunden. In dem Bsp. von Lerikson also an ErsterWert, ZweiterWert bzw deren Werte/Inhalt.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

4

23.02.2011, 19:18

die parameter sind neue variablen die erstmal nichts mit allen anderen variablen zutun haben.
beim aufruf werden die werte der übergebenen variablen in diese variablen rein kopiert.

ohne funktion würde der code also so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
int ersterWert = 42;
int zweiterWert = 23;
int ergebnis;

//ergebnis = addProzent(ersterWert, zweiterWert); // hier wäre normalerweise der aufruf

int Wert = ersterWert;
int Prozent = zweiterWert;
int neuerWert;
neuerWert = Wert + (Wert*Prozent)/100;
ergebnis = neuerWert;
return 0;
}


// das ergebnis wäre das gleiche. der unterschied ist, dass du den code immer wieder verwenden kannst ohne ihn zu kopieren wenn er in einer funktion steht.
"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?

gobuhl07

Frischling

  • »gobuhl07« ist der Autor dieses Themas

Beiträge: 9

Beruf: Schüler

  • Private Nachricht senden

5

23.02.2011, 19:28

Danke für eure Antworten die haben mir sehr geholfen und jetzt habe ich alles verstande.

Mfg Gobuhl
Facio aliquid iuris notitia neminem eo. Facio aliquid illicitum, nemooblitus est. - Mache ich etwas richtig, merkt es keiner. Mache ich etwas falsch, vergisst es keiner.

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

6

07.03.2011, 22:18

weil ich da auch grad bin. hab das beispiel eigentlich ohne probleme gelöst aber aus irgendeinem grund bildet sich das programm ein, dass meine prozentuelle steigerung nciht funktioniert und die ausm buch schon obwohls eig das gleiche ist.

es is wie folgt:

C-/C++-Quelltext

1
2
3
4
5
6
{
    int temp;
    temp = haste * (1 + percent/ 100);

    return temp;
}



hier kommt immer der ungesteigerte wert raus (also wenn ich 20 um 10% steigern will kommt bei der formel trotzdem 20 raus)
während

C-/C++-Quelltext

1
2
3
4
5
6
{
    int temp;
    temp = haste + (haste * percent) / 100;

    return temp;
}

einwandfrei funktioniert.
mathematisch ist di formel ident, ich hab der übersicht halber (und weil ich das immer schon so gemacht hab) einfach das "haste" aus der klammer heruasgehoben.

es gilt:
x * (1+ §\frac {y}{100}§) = x + §\frac {x * y}{100}§

es mag jetzt ansich egal sein, aber was hat des programm oder der kompilier oder kA was für ein problem mit meiner schreibweise?

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Wirago« (07.03.2011, 22:32)


GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

7

08.03.2011, 09:10

C-/C++-Quelltext

1
percent/ 100

= 0 wenn percent nicht vom Typ double oder float ist (da die Nachkommastellen bei Ganzzahldivision abgeschnitten werden)
Signaturen werden überbewertet

Werbeanzeige