PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktionen (Erklärung nötig)



Nur4mon
22.07.2009, 19:57
So, mein nächster Threat im C/ C++ Forum.

Ich bin jetzt bei den Funktionen angelangt.

Definition ist alles kein Problem usw, aber ich hab mit dem Beispiel im Tutorial Probleme.

int Funktion(int i); // Funktionsdeklaration
int main(void) // Hauptfunktion
{
//Anweisungen
}
int Funktion(int i) //Funktionskopf
{ //Funktionsrumpf Anfang
int z = i * 100;
return z;
} //Funktionsrumpf Ende


Wieso genau return z?

So, dann die Ausgabe. Das Bsp. im Tutorial wäre folgendes.

int main(void)
{
int u = 5;
int a = Funktion(u); //5 wird an i übergeben

Scheint mir etwas umständlich. Wieso zuerst int u = 5 ? Kann man der Funktion nicht gleich einen Wert zuweisen?

Dann kommt hier nochmal ein Bsp. in einem Kontext.

#include <iostream>

using namespace std;

int f1(int a, int b);

int f2(int a, int c);

int main(void)
{
int q = 10, w = 20;

cout << "f1(10, 20) ergibt: " << f1(10, 20);

cout << "\nf1( q, w) ergibt: " << f1( q, w);

cout << "\nf1(20, 10) ergibt: " << f1(20, 10);

cout << "\nf2(10, 20) ergibt: " << f2(10, 20);

cout << "\nf2( q, w) ergibt: " << f2( q, w);

cout << "\nf2(42, 19) ergibt: " << f2(42, 19);

cin >> q;

return 0;
}

int f1(int a, int b)
{
a *= ++b;
a %= ++b;
return a;
}

int f2(int a, int c)
{
int b = a * c;
return b;
}

Und da blicke ich eben echt nicht durch.

z.B. cout << "f1(10, 20) ergibt: " << f1(10, 20);

Wo genau wird denn da die Funktion ausgegeben?

Vll. kann sich jmd. etwas Zeit nehmen und mir dazu ein paar Erklärungen geben.


mfg

Hiramu
22.07.2009, 20:03
1. Weil z verändert wurde und wieder ausgegeben wird

2. Dann wäre die Funktion unnötig, weil das Ergebnis bekannt ist. Es geht darum, dass eine Variable an eine Funktion übergeben wird. Hier ist es 5 als BEISPIEL.

Nur4mon
22.07.2009, 20:18
Und was ist jetzt mit cout << "f1(10, 20) ergibt: " << f1(10, 20); ?

Wo wird da die Funktion f1 ausgegeben?


//EDIT:

Also, ich hab je folgenen Code:

#include <iostream>

using namespace std;

int FunktionA(int a); // Funktionsdeklaration


int main(void) // Hauptfunktion
{
int u;
cin >> u;

int o = FunktionA(u);

cout << "\n Ergebnis: " << FunktionA(z); //Hier versuche ich mir das Ergebnis der Funktion mit cout ausgeben zu lassen. Geht nicht. Klar, Variable z ist in main nicht zugeteilt.

cout << '\n'
<< '\n';

system("PAUSE");
}

int FunktionA(int a) //Funktionskopf
{
int z = a * 129;


return z;
}

Meine Frage an dem Punkt:

Wie kann ich mir das Ergebnis einer funktion ausgeben lassen?

Hiramu
22.07.2009, 20:34
Ich bin nie SO weit gekommen XD

ich fang erst in ca. 1 Monat wieder mit dem Lernen an ^^

Nur4mon
22.07.2009, 20:39
Na dann^^

Ich hab gestern mit C++ angefangen, bisher lief alles ganz gut. aber mit den Funktionen habe ich Probleme bzw. sie lassen sich nicht so leicht lernen (finde ich).

rogger
22.07.2009, 20:48
cout << "f1(10, 20) ergibt: " << f1(10, 20);
Hier wird zunächst "f1(10, 20) ergibt: " ausgegeben weil das ist Anführungszeichen steht. und dann anschliesend das Ergebnis der Funktion "f1" mit den beiden Parametern 10 und 20.

Nur4mon
22.07.2009, 20:54
Okey...

Und was mache ich in meinem Code falsch? Wie kann ich mir int z ausgeben lassen um es mit cout darzustellen oder einfach damit weiter rechnen zu können?

INfERn0 StyLe
22.07.2009, 21:20
#include <iostream>

using namespace std;

int FunktionA(int a); // Funktionsdeklaration


int main(void) // Hauptfunktion
{
int u;
cin >> u;

int o = FunktionA(u);

cout << "\n Ergebnis: " << FunktionA(z);

cout << '\n'
<< '\n';

system("PAUSE");
}

int FunktionA(int a) //Funktionskopf
{
int z = a * 129;
// Z ist hier im Blockscope, falls dir das etwas sagt, dass heißt die Variable gilt nur in diesem Gültigkeitsbereich. Du versuchst aber in der Main Funktion auf eine interne Variable der FunktionA zuzugreifen. Soweit ich das noch im Kopf habe ist die Lebensdauer der Variable sowieso nur solange wie die Funktion ausgeführt wird,.. aber egal :)


return z;
}

Sprich die Variable z gibt es hier nur in der FunktionA.
Ich hoffe das war nicht zu kompliziert, als Anfänger hat man es ja nie leicht;)..

MfG

Nur4mon
22.07.2009, 21:43
Also erstmal ein Dankeschön an INfERn0 StyLe. :)

Ja, das mit den Gültigkeitsbereichen hatte ich schon, deswegen war meine Frage wie ich mir den Wert aus FunktionA in main ausgeben lassen kann.

Mitlerweile hab ich das auch herrausgefunden (cout << FunktionA(u)).

Hab jetzt mal zwei Funktionen reingepackt, bekomme aber zweimal die Warnung:

[Warning] multi-character character constant.


Der Code ist:

#include <iostream>

using namespace std;

int fnA(int a); // Funktionsdeklaration
int fnB(int b);

int main(void) // Hauptfunktion
{
int u;
cin >> u;

int o = fnA(u);


int k = 'fnA';
int l = fnB(k);



cout << "\n Ergebnis: " << fnB(k);

cout << '\n'
<< '\n';

system("PAUSE");
}

int fnA(int a) //Funktionskopf
{
int z = a * 129;


return z;
}

int fnB(int b)
{
int z = 'fnA' - 20;

return z;
}

Hoffe ich bekomme weiterhin so aufschlussreiche Hilfe, :P

mfg

blackberry
22.07.2009, 22:21
int k = 'fnA';
Ergibt keinen Sinn...
Wo hast du das bitte her?

Nur4mon
22.07.2009, 22:25
Jo, war schwachsinn.

Habs jetzt wie folgt gelöst:

#include <iostream>

using namespace std;

int fnA(int a); // Funktionsdeklaration
int fnB(int b);

int main(void) // Hauptfunktion
{
int u;
cin >> u;

int o = fnA(u);

int k = fnA(u);
int l = fnB(k);



cout << "\n Ergebnis: " << fnB(k);

cout << '\n'
<< '\n';

system("PAUSE");
}

int fnA(int a) //Funktionskopf
{
int z = a * 129;


return z;
}

int fnB(int b)
{
int z = b - 20;

return z;
}

Vll. werde ich bei weiteren Fragen bezüglich anderen Themen einfach mal PNs an die Poster in diesem threat schicken, da es ja nervig ist für jede Frage einen neuen Threat aufzumachen. :P

mfg

blackberry
22.07.2009, 23:43
cout << "\n Ergebnis: " << fnB(k);

wieso nicht einfach:

cout << "\n Ergebnis: " << l;

PS: eine gute Anlaufstelle ist auch der IRC - da bekommst du sicher schneller Hilfe.

St3r3oboy
26.07.2009, 03:02
Vollzitat des Vorposters entfernt - § 2.6; Bloardregeln - BlackBerry

genau weil ansonsten hast du int l = fnB(k);
komplett umsonst ...

SleiZer
26.07.2009, 23:58
Also Funktionen funktionieren so:
Du gibst der Funktion einen Wert mit, der Wert in der Klammer.

und die Funktion gibt dir einen Wert zurück, der Return Wert.

Nun ist

int l = fnB(k);
cout << "\n Ergebnis: " << l;

geht aufs gleiche hinaus wie


cout << "\n Ergebnis: " << fnB(k);

Im ersten Code deklarierst du eine Variable "l" und initialisierst (zuweisen)
Ihr den Returnwert von der Funktion mit k als mitgabe.
Danach gibst du die Variable aus.

Im zweiten Code gibst du einfach nur den Returnwert der Funktion "fnB" mit
k als mitgabe, direkt wieder ohne ihn irgendwo zwischen zuspeichern.

Nur4mon
27.07.2009, 10:52
Okey, danke Leute aber der Threat ist schon 2-3 Tage alt und ich bin jetzt bei Arrys :P

blackberry
27.07.2009, 11:14
Und was sagt uns das?
Genau!

/closed