JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=541a00f5c233cad9b1ab6902b1f93b56Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Komme mit den "Funktionen" nicht klar
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LBFreddurst
Mini JLI'ler



Anmeldedatum: 18.07.2006
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 18:05    Titel: Komme mit den "Funktionen" nicht klar Antworten mit Zitat

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 Sad .

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
Benutzer-Profile anzeigen Private Nachricht senden
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 18:22    Titel: Antworten mit Zitat

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 Wink 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 18:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LBFreddurst
Mini JLI'ler



Anmeldedatum: 18.07.2006
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:01    Titel: Re: Komme mit den "Funktionen" nicht klar Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 23.07.2006, 19:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LBFreddurst
Mini JLI'ler



Anmeldedatum: 18.07.2006
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:11    Titel: Antworten mit Zitat

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 Smile

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
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
LBFreddurst
Mini JLI'ler



Anmeldedatum: 18.07.2006
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 19:59    Titel: Antworten mit Zitat

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. Question

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
Benutzer-Profile anzeigen Private Nachricht senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 20:07    Titel: Antworten mit Zitat

LBFreddurst hat Folgendes geschrieben:


ich versteh´s immer noch nicht ganz. Question

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
Benutzer-Profile anzeigen Private Nachricht senden
LBFreddurst
Mini JLI'ler



Anmeldedatum: 18.07.2006
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 20:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 20:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
LBFreddurst
Mini JLI'ler



Anmeldedatum: 18.07.2006
Beiträge: 18

Medaillen: Keine

BeitragVerfasst am: 23.07.2006, 21:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum