Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LBFreddurst Mini JLI'ler
Anmeldedatum: 18.07.2006 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 23.07.2006, 18:05 Titel: Komme mit den "Funktionen" nicht klar |
|
|
Hi Leute,
bin jetzt im 6. Kapitel in meinem "JLI DirectX" Buch (~Seite 100).
Klasse Buch,muss man sagen,bis auf die Erklärung der Funtionen .
Also da wird von Parametern und Argumenten gesprochen.
Die beiden Begriffe habe ich bis jetzt immer noch nicht verstanden.
Also die Funktionen verstehe ich im Allgemeinen schon.
Hier ein Beispiel,welches im Buch steht:
Code: |
#include <iostream>
const float PI = 3.141f
// Funktionsprototypen
float RadiusEinlesen(void);
float FleacheBerechnen(float Radius);
float FlaecheAusgeben(float Flaeche);
bool Fortsetzung(void);
using namespace std;
int man(void)
{
float Kreisflaeche = 0.0f;
do {
float Radius = RadiusEinlesen();
Kreisflaeche = FlaecheBerechnen(Radius);
FlaecheAusgeben(Kreisflaeche);
} while(Fortsetzung());
}
float RadiusEinlesen(void)
{
float Eingabe = 0.0f;
cout << " Bitte geben sie eine Zahl ein";
cin >> Eingabe;
return Eingabe;
}
float FlaecheBerechnen(float Radius)
{
return PI * Radius * Radius;
}
void FlaecheAusgeben(float Flaeche)
{
cout << "Die Kreisflaeche ist" << Flaeche << '\n';
}
bool Fortsetzung(void)
{
char JaNein = 'j';
cout << "Weitere Berechnung durchführen?;
cin >> JaNein;
if('j' == JaNein)
{
return true;
}
else
{
return false;
}
}
|
Diesen Code vertsehe ich nicht wirklich,besonders den Aufbau der Funtkionen.
Code: |
int Funktion1(long x,long y)
|
Jetzt versteh ich hier nicht was das in den Klammern sein sollte. ( Parameter? richtig ? .... was sind dann die Argumente ? )
Und wofür sind die wichtig und wann einsetzbar ??? ( die Argumente / Parameter in den Klammern) |
|
Nach oben |
|
|
Dragon Super JLI'ler
Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 23.07.2006, 18:22 Titel: |
|
|
EIne kurze Einführung in Funktionen:
Funktionen erleichtern das leben eines Programmierers ungemein. Es können häufig verwendete Programmalgorithen nur einmal geschrieben und unendlich mal verwendet werden.
Aufbau einer C++-Funktion
CPP: | Rückgabetyp NameDerFunktion(Parameterliste) |
Der Rückgabetyp der Funktion gibt an, welche Datentyp die Funktion zurückgibt. Also ob es eine Ganzzahl,eine Fließkommazahl oder ein benutzerdefinierter Datentyp sein soll. Die Parameterliste gibt alle Notwendigen eingaben für die Funktion an. Zum Beispiel brauch eine Funktion für die Berechnung des Sinus den Winkel als Parameter übergeben. Die Parameter liste kann selbstverständlich auch mehrere Parameter enthalten. Eine Funktion für die Berechnung einer Rechtecksfläche benötigt als Parameter die beiden Seitenlängen a und b. So eine Funktion könnte dann so aussehen:
CPP: | float berechneRechtecksFlaeche(float a, float b)
{
float flaeche = a * b;
return flaeche;
} |
@ Xardias: Mach endlich dein Dev-Area-Wiki fertig ich Sprudel nur so vor Ideen über. _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 23.07.2006, 18:58 Titel: |
|
|
Hi,
Ich probiere dir mal anhand eines Beispiels näher zu bringen, wozu man die Parameter braucht. Was lokale Variablen sind, wurde sicher schon im entsprechenden Kapitel erklärt....
Nehmen wir an unser Programm ist eine Firma. In der Firma arbeiten ein paar kleine Helferlein, welche je eine Funktion darstellen. Jedes Helferlein kann eine bestimmte Aufgabe erledigen und wird immer dann gerufen, wenn man es braucht.
Nehmen wir das Putzhelferlein als Beispiel. Der Big Boss findet, dass es vor Türe nr. 12 zu schmutzig ist- und ruft besagtes Helferlein herbei.
Doch leider weiss das Putzhelferlein bloß wie man vor Türen sauber macht, aber leider nicht vor welcher Türe. Denn die Information vor welcher Türe der Schmutz liegt, ist nur lokal im Gehirn vom Big Boss vorhanden.
Wenn der BigBoss also das Helferlein (auf)ruft, muss er ihm noch flüstern, vor welcher Türe es denn saubermachen soll. Und genau das wird mit den Parametern gemacht.
als code(lässt sich nicht starten;) )
CPP: | #include <iostream>
using namespace std;
void Putzhelferlein(int NrDerTuere) //Die Funktion (Das Helferlein)
{
*putz putz bei Türe Nummer NrDerTuere*
}
int main()
{
int TuereNr = 12; //die Information im BigBoss Gehirn, vor welcher Türe der schmutz ist.
Putzhelferlein(TuereNr) // ruft das Putzhelferlein herbei und flüstert ihm den Inhalt der Variablen TuereNr zu. Da das Putzhelferlein nun die Nummer der Türe übergeben bekommen hat, weiss es nun vor welcher Türe geputzt werden muss.
return 0;
}
|
Vielleicht reicht es auch schon, wenn du dir mal bei Wikipedia den text zu Funktionen durchliest:
http://de.wikipedia.org/wiki/Funktion_%28Programmierung%29
Zuletzt bearbeitet von manu am 23.07.2006, 19:00, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
LBFreddurst Mini JLI'ler
Anmeldedatum: 18.07.2006 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:00 Titel: |
|
|
ok,also sprich alles was man in der Funktion benutzt,gehört in die Parameterliste ???
und wann darf ich dann void benutzen??
z.b. so:
Code: |
void Funktion1(int x,int y)
|
oder so
Code: |
int Funktion1(void)
|
oder so
Code: |
void Funktion1(void)
|
vielen dank im voraus |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:01 Titel: Re: Komme mit den "Funktionen" nicht klar |
|
|
Volkard ist immer gut. ;)
http://www.volkard.de/vcppkold/funktionen.html
Der Unterschied zwischen Argument und Parameter ist etwas kniffelig zu erklären und eigentlich auch nicht so wichtig, ich versuch's mal: Als Parameter bezeichnet man die Platzhalter für Werte, mit welchen die eigentliche Funktion später arbeiten soll, diese gibt man bei der Deklaration der Funktion mit an. Argument sind die Werte die man beim Aufrufen der Funktion übergibt.
Edit:
Zitat: | und wann darf ich dann void benutzen?? |
Du verklickerst dem Compiler damit, das du nicht vorhast der Funktion irgendetwas zu übergeben, oder du willst nichts zurück gegeben haben, je nachdem.
Zuletzt bearbeitet von GreveN am 23.07.2006, 19:04, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 23.07.2006, 19:02 Titel: |
|
|
void benutzt du wenn du keinen Rückgabewert von deiner Funktion brauchst also kein return innerhalb der Funktion verwendest. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:03 Titel: |
|
|
Code: |
void Funktion1(int x,int y)
|
Das benutzt du, wenn die Funktion keinen Wert zurückgeben soll. Kein "return x;" in der Funktion
Code: |
int Funktion1(void)
|
Das machst du, wenn du der Funktion keinen Parameter übergeben willst, sobdern die Funktion lediglich einen interger zurückgeben soll
Code: |
void Funktion1(void)
|
kein Rückgabe Wert und auch kein Parameter. So eine Funktion kannst du z.B. nehmen, wenn du in Ihr bloß Text ausgeben willst |
|
Nach oben |
|
|
LBFreddurst Mini JLI'ler
Anmeldedatum: 18.07.2006 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:05 Titel: |
|
|
manu hat Folgendes geschrieben: | Hi,
Ich probiere dir mal anhand eines Beispiels näher zu bringen, wozu man die Parameter braucht. Was lokale Variablen sind, wurde sicher schon im entsprechenden Kapitel erklärt....
Nehmen wir an unser Programm ist eine Firma. In der Firma arbeiten ein paar kleine Helferlein, welche je eine Funktion darstellen. Jedes Helferlein kann eine bestimmte Aufgabe erledigen und wird immer dann gerufen, wenn man es braucht.
Nehmen wir das Putzhelferlein als Beispiel. Der Big Boss findet, dass es vor Türe nr. 12 zu schmutzig ist- und ruft besagtes Helferlein herbei.
Doch leider weiss das Putzhelferlein bloß wie man vor Türen sauber macht, aber leider nicht vor welcher Türe. Denn die Information vor welcher Türe der Schmutz liegt, ist nur lokal im Gehirn vom Big Boss vorhanden.
Wenn der BigBoss also das Helferlein (auf)ruft, muss er ihm noch flüstern, vor welcher Türe es denn saubermachen soll. Und genau das wird mit den Parametern gemacht.
als code(lässt sich nicht starten;) )
CPP: | #include <iostream>
using namespace std;
void Putzhelferlein(int NrDerTuere) //Die Funktion (Das Helferlein)
{
*putz putz bei Türe Nummer NrDerTuere*
}
int main()
{
int TuereNr = 12; //die Information im BigBoss Gehirn, vor welcher Türe der schmutz ist.
Putzhelferlein(TuereNr) // ruft das Putzhelferlein herbei und flüstert ihm den Inhalt der Variablen TuereNr zu. Da das Putzhelferlein nun die Nummer der Türe übergeben bekommen hat, weiss es nun vor welcher Türe geputzt werden muss.
return 0;
}
|
Vielleicht reicht es auch schon, wenn du dir mal bei Wikipedia den text zu Funktionen durchliest:
http://de.wikipedia.org/wiki/Funktion_%28Programmierung%29 |
müsste dein code nicht so lauten ??? :
CPP: | #include <iostream>
using namespace std;
void Putzhelferlein(int NrDerTuere) //Die Funktion (Das Helferlein)
{
*putz putz bei Türe Nummer NrDerTuere*
}
int main()
{
int TuereNr = 12; //die Information im BigBoss Gehirn, vor welcher Türe der schmutz ist.
Putzhelferlein(NrDerTuere) // ruft das Putzhelferlein herbei und flüstert ihm den Inhalt der Variablen TuereNr zu. Da das Putzhelferlein nun die Nummer der Türe übergeben bekommen hat, weiss es nun vor welcher Türe geputzt werden muss.
return 0;
}
|
|
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:11 Titel: |
|
|
LBFreddurst hat Folgendes geschrieben: |
müsste dein code nicht so lauten ??? :
|
Nein, aber siehste wir kommen dem ganzen schon näher.
Beim aufruf muss TuereNr in die Klammern. Das liegt daran, dass du ja der Funktion den Wert in TuereNr übergeben willst. Wenn du es so machst wie du gedacht hast, dann gibt das einen fehler, da NrDerTuere in main() nicht bekannt ist, sondern nur in Putzhelferlein().
Die Argumente und Parameter dürfen unterschiedliche Variablennamen haben, dass ist garkein problem
CPP: | int Funktion(int x);
//und der Aufruf
Funktion(4);
|
Das geht ja auch. Denn eine Varible Speichert ja nur einen wert. Wenn du einer Funktion eine Varible übergibst, übergibst du nur den wert, der in der Variblen gespeichert ist. |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:23 Titel: |
|
|
So gesehen wird der Funktion nur eine Kopie der eigentlichen Variable übergeben, welche sich innerhalb der Funktion durch den Parameternamen ansprechen lässt. Stichwort "Call by Value". |
|
Nach oben |
|
|
LBFreddurst Mini JLI'ler
Anmeldedatum: 18.07.2006 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 23.07.2006, 19:59 Titel: |
|
|
manu hat Folgendes geschrieben: |
CPP: | #include <iostream>
using namespace std;
void Putzhelferlein(int NrDerTuere) //Die Funktion (Das Helferlein)
{
*putz putz bei Türe Nummer NrDerTuere*
}
int main()
{
int TuereNr = 12; //die Information im BigBoss Gehirn, vor welcher Türe der schmutz ist.
Putzhelferlein(TuereNr) // ruft das Putzhelferlein herbei und flüstert ihm den Inhalt der Variablen TuereNr zu. Da das Putzhelferlein nun die Nummer der Türe übergeben bekommen hat, weiss es nun vor welcher Türe geputzt werden muss.
return 0;
}
|
|
ich versteh´s immer noch nicht ganz.
wieso gibt man (int NrDerTuere) ein und benutzt diese Variable (Parameter,richtig ? ) nirgendwo ???
CPP: | void Putzhelferlein[b](int NrDerTuere)[/b] //Die Funktion (Das Helferlein)
{
*putz putz bei Türe Nummer NrDerTuere*
}
|
und wieso wird hier void als Rückgabewert genommen ?
läuft das programm so ??? |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 23.07.2006, 20:07 Titel: |
|
|
LBFreddurst hat Folgendes geschrieben: |
ich versteh´s immer noch nicht ganz.
wieso gibt man (int NrDerTuere) ein und benutzt diese Variable (Parameter,richtig ? ) nirgendwo ???
|
die Variable wird benutzt:
*putz putz bei Türe Nummer NrDerTuere*
das *putz putz blabla* war ja nur ein beispiel von mir, denn es hätte dich sicher noch mehr verwirrt, wenn ich anstatt dessen wieder eine Putzfunktion mit dem Argument "NrDerTuere" ausfgerufen hätte;)
LBFreddurst hat Folgendes geschrieben: |
und wieso wird hier void als Rückgabewert genommen ?
läuft das programm so ??? |
Void, weil die Funktion keinen wert zurück geben muss. Übertragen auf das Beispiel bedeutet das, dass das Putzhelferlein nach beenden der Arbeit wieder verschwindet ohne dem Big Boss zu sagen, ob alles geklappt hat oder nicht.... |
|
Nach oben |
|
|
LBFreddurst Mini JLI'ler
Anmeldedatum: 18.07.2006 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 23.07.2006, 20:38 Titel: |
|
|
könntest du dann bitte vielleicht ein richtiges beispiel machen wo der Parameter eingesetzt wird ? ^^
weil ich immer noch nicht versteh wofür das zeug in den klammern steht und nicht wirklich genutzt wird.
vielen dank
edit:
CPP: | float Radius Einlesen(void)
{
float Eingabe= 0.0f;
cout << " Bitte eine Zahl eingeben " ;
cin >> Eingabe;;
}
|
hier wurde auch void eingesetzt und er hat eine Variable intialisiert. (definiert) |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 23.07.2006, 20:46 Titel: |
|
|
LBFreddurst hat Folgendes geschrieben: | könntest du dann bitte vielleicht ein richtiges beispiel machen wo der Parameter eingesetzt wird ? ^^
vielen dank |
Ja. aber nicht mit mit dem Putzhelferlein.
CPP: | #include <iostream>
using namespace std;
void Sprechhelferlein(char lieblingsbuchstabe)
{
cout << "Ich kann text ausgeben! Mein Lieblingsbuchstabe ist " << lieblingsbuchstabe << "\n";
}
int main()
{
char Zeichen = 'y';
Sprechhelferlein(Zeichen);
cin.get(); //damit das konsolenfenster nicht gleich zu geht
return 0;
}
|
edit:
LBFreddurst hat Folgendes geschrieben: |
CPP: | float Radius Einlesen(void)
{
float Eingabe= 0.0f;
cout << " Bitte eine Zahl eingeben " ;
cin >> Eingabe;;
}
|
hier wurde auch void eingesetzt und er hat eine Variable intialisiert. (definiert) |
Wenn du die Funktion so lassen willst, musst du void als rückgabetyp nehmen. Sonst gäbe es einen fehler. Aber sinn machen, würde das nicht.
Mehr sinn würde es machen, wenn du die Funktion so lässt und am schluss noch die Benutzereingabe mit hilfe von "return" zurückgibst... |
|
Nach oben |
|
|
LBFreddurst Mini JLI'ler
Anmeldedatum: 18.07.2006 Beiträge: 18
Medaillen: Keine
|
Verfasst am: 23.07.2006, 21:08 Titel: |
|
|
ok,wenn ich es jetzt endlich richtig verstanden habe:
die Parameter sind Variablen,die sich auch auf das Hauptprogramm,in diesem Fall main() auswirken,aber nur in der Funktion,in der sie entstehen genutzt werden können ??? |
|
Nach oben |
|
|
|