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
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
, 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 ¶meter)