Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 11:35

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Unterprogramme

Discussion on Unterprogramme within the General Coding forum part of the Coders Den category.

Reply
 
Old 05/30/2010, 22:13   #16
 
Crrrespo's Avatar
 
elite*gold: 87
Join Date: Jul 2009
Posts: 2,998
Received Thanks: 1,640
Danke
Crrrespo is offline  
Old 06/01/2010, 11:34   #17

 
.Faez's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 2,479
Received Thanks: 303
Quote:
Originally Posted by MrSm!th View Post
Das stimmt zwar, normalerweise meckert ein Compiler aber, wenn man das & vergisst und eine normale Variable vom Typ int übergibt.

Noch dazu finde ich, dass Referenzen ein bisschen zu unflexibel sind (für meinen Geschmack und meine Zwecke )

Eigentlich ist für die Aufgaben nirgendwo Pointerarithmetik oder Referenzübergabe nötig.
Jede dieser eher mathematischen Aufgaben kann einen Wert zurückgeben, void wird also schonmal unnötig.

char macht hier auch eher wenig Sinn, da man zwar auch Werte mit der gleichen Anzahl an Bit wie ein short speichern kann, aber in der Regel ist char für Zeichen und short für Zahlenwerte.
Short kann aber im Vergleich zu int viel weniger Werte speichern, durch die geringe Anzahl an Bit.

Der Universaltyp ist eigentlich int, also würde ich den auch nehmen.
Wenn dein Leher allerdings möchte, dass die Funktionen auch mit Dezimalstellen umgehen können, ist float von Nöten double halte ich da eher wieder für einen overkill, da man selten mit so vielen Dezimalstellen rechnet, genau so wie long ein overkill wäre, da man selten solche Riesenwerte verwendet.


Also, je nach dem, was dein Leher möchte (ich halte float für wahrscheinlicher) ist float oder int der richtige Rückgabetyp für deine Funktionen oder "Unterprogramme".
void dürftest du nur brauchen, wenn es explizit gefragt ist, dass die Originalvariable verändert wird.


edit:

hupps ich sehe gerade, die Variablen in der main sind vom Typ float.
Du siehst am Typ der Variablen, welchen du für die Funktion nutzen musst
Wenn da eine Zuweisung ist, bei der einer float Variable der Rückgabewert der Funktion zugewiesen wird, ist klar, dass die Funktion den Rückgabetyp Float hat!

und ich sehe gerade, dass void ja doch explizit gefragt ist und zwar bei der "negiere"-Funktion.


Dann hat natürlich Bot_interessierter Recht:

da muss dann
Code:
void negiere(float &zahl)
stehen.

Und zwar nur das! Ein Pointer darf hier deswegen nicht hin, weil in der main nicht steht
Code:
negiere(&j);
Da würde dann ein Pointer gefragt sein! Aber es wird nur das j übergeben, also muss eine Referenz genutzt werden

Btw. wenn du nicht genau weißt, was diese Typen alle bedeuten/wann du sie nutzt, ist euer Leher entweder schlecht im Erklären oder du hast nicht aufgepasst.
Ich denke mal nicht, dass er einen Test über Funktionen macht, wenn ihr noch nichtmal die Datentypen hattet.


Kleine Erklärung des Zeichens '&' bei Variablen:

Wenn es zwischen Typ und Variable steht, also
Code:
int &variable
, dann bedeutet es, dass es eine Referenz ist.
D.h. es teilt sich den gleichen Speicher mit der Variable, die man ihr zuweist.
Bsp.:

Code:
int x = 5;
int &x2 = x;    //x2 hat auch den Wert 5
x = 10;          //x2 hat auch den Wert 10
Wenn es allerdings nur vor dem Variablennamen steht (ohne den Datentyp davor), bedeutet es, dass die Adresse der Variable im Speicher genutzt wird.
Das ist zum Beispiel bei Pointern nötig, die als Wert die Adresse einer anderen Variable haben und somit auf die Variable "zeigen":

Code:
int x = 5;
int *x2 = &x;    // * steht für pointer/zeiger; &x bedeutet, dass x2 nun als Wert die Adresse von x hat

x = 10;           //x2 hat immernoch den gleichen Wert (adresse von x), zeigt deshalb immernoch auf x, welches nun den Wert 10 hat

//zugreifen würde man auf den Wert, auf den der Pointer zeigt(!), durch das *
*x2 = 5;         //der Wert von x2 bleibt gleich (Adresse von x), aber hierdurch wird x auf 5 gesetzt

x2 = 5;           /*großer Fehler. Nun zeigt der Pointer x2 auf die Adresse 5 im Speicher. 
                       Die ist ungültig; hier darf man nicht schreiben oder lesen. 
                       Würde also jemand dann folgendes tun, gäbe es einen Crash:
*x2 = 5;
Allerdings kannst du die Pointer außer Acht lassen, da im Beispiel steht negiere(j), wird keine Adresse von einer Variable übergeben, sondern die Variable selbst.
Es kann sich hierbei also nur um eine Referenz handeln
Code:
void negiere(float &parameter)
Quote:
Originally Posted by MrSm!th View Post
edit nicht gesehn?
Hab mich doch korrigiert.


Und warum unnötig? Er fragte, wann man & benutzt und das habe ich ihm erklärt ;O
Kann es sein dass du viel zu viel zeit hast ö.ö?
.Faez is offline  
Old 06/03/2010, 08:03   #18
 
elite*gold: 20
Join Date: Jan 2008
Posts: 2,338
Received Thanks: 490
MrSm!th ( warscheinlich "schwarz" ) hat sicher sehr viel Zeit.

Warum glaub ich dass er ein schwarzer ist? hmm also: er "Negiert" in seinen Beispielen, und sein Name....xD
~Yuki~ is offline  
Old 06/03/2010, 16:01   #19
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Quote:
Originally Posted by ~Yuki~ View Post
MrSm!th ( warscheinlich "schwarz" ) hat sicher sehr viel Zeit.

Warum glaub ich dass er ein schwarzer ist? hmm also: er "Negiert" in seinen Beispielen, und sein Name....xD
Vielen Dank für die Ausbreitung deines geistigen Dünnpfiffs in diesem Faden
Bot_interesierter is offline  
Thanks
2 Users
Reply




All times are GMT +2. The time now is 11:35.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.