Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Call by Reference » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 9 Beiträge
kim...

vielen dank euch beiden smile
eulerscheZahl

Ja.
kim...

also funktioniert das Programm nicht mehr, weil wie du schon sagtest, eine endlosschleife entsteht? das wäre doch die antwort oder auf meine Aufgabenstellung?
eulerscheZahl

Du rufst die jeweils andere Funktion auf, ohne etwas damit zu machen. Wozu brauchst du dann überhaupt den Aufruf? Ich würde die Zeile einfach entfernen.
kim...

danke smile das habe ich jetzt soweit verstanden. und wie sorge ich dafür dass die endlosschleife aufhört?
eulerscheZahl

- Du hast die Funktionen ins main kopiert, die müssen aber außerhalb stehen
- Die Funktionen sollen sich gegenseitig aufrufen, dazu müssen sie sich kennen. 4_1 kennt aber 4_2 nicht, da 4_1 vor 4_2 implementiert wird. Abhilfe schafft, den Funktionskopf der anderen Funktion schon vorher hinzuschreiben.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
#include <stdio.h>
int aufgabe4_1(int x);
int aufgabe4_2(int x);


int aufgabe4_1(int x)
{
    aufgabe4_2(x * x);
    return x;
}

int aufgabe4_2(int x)
{
    aufgabe4_1(x + x);
    return x;
}

int main()
{
    //hier kommt der Funktionsaufruf:
    aufgabe4_1(1);
} 

Wenn du das aber ausführst, wird es abstürzen, weil:
4_1 ruft 4_2 auf. 4_2 ruft wiederum 4_1 auf. 4_1 ruft dann 4_2 auf. 4_2 ruft ...
das gibt eine Endlosschleife.
kim...

Wink
in C.
Aufgabenstellung lautet:
Kopieren Sie die beiden unten stehenden Funktionen und fügen Sie sie zu Ihrem Programm hinzu.
Rufen Sie die Funktion aufgabe4_1(int x) mit dem Übergabewert x = 1 aus dem Menü auf.
Warum funktioniert das Programm danach nicht mehr?

und ich hab das Problem, wenn ich das Programm noch nicht im Menü eingebunden habe, läuft es auch so nicht. Der Compiler macht nix. ich weiß auch gar nicht, was ich mit x=1 machen soll.
Karlito

Hallo Kim,

leider hinterlässt Du zu wenig Information. Aber schau dir mal bitte folgenden Code an:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
//the pure C way
#include <stdlib.h>
#include <stdio.h>

void square_ref(int *x){
	*x = *x*(*x);
}

int square(int x){
	return x*x;
}

int main(int argc, char **argv){
	int test, test2;

	printf("Dear user, please give me an arbitrary number:\n");
	scanf("%d", &test);

	test2 = test;

	square_ref(&test);
	printf("%d\n", test);

	test2 = square(test2);
	printf("%d\n", test2);

	return 0;
}


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
//The C++ way
#include <iostream>

using namespace std;

void square_ref(int &x){
	x = x*x;
}

int square(int x){
	return x*x;
}

int main(int argc, char **argv){
	int test, test2;

	cout << "Dear user, please give me an arbitrary number:" << endl;
	cin >> test;

	test2 = test;

	square_ref(test);
	cout << test << endl;

	test2 = square(test2);
	cout << test2 << endl;

	return 0;
}


Bitte beachte, dass der erste Code in C und C++ funktionert, der zweite jedoch nur mit C++. Das zweite stellt aber den genauen call by reference Prozess dar, da das & vor dem Parameter dafür sorgt, dass implizit Referenzen verwendet werden. Der Code von quad_ref ist aber in beiden Sprachen äquivalent und intern wird in C++ der Code von C umgesetzt.

Wenn Du noch fragen hast, kannst du sie gerne hier stellen. Bitte gib aber an, welche Aufgabenstellung du hast und welche Sprache du verwenden sollst. Weiterhin wäre eine Angabe, was Du genau nicht verstehst hilfreich.

VG,

Karlito
kim.... Call by Reference

hallo,
ich habe ein Problem, und zwar folgendes Programm funktioniert nicht, allerdings weiß ich nicht warum...
innerhalb der Funktion kann ich ja nix ändern. kann mir bitte jemand helfen?
#include <stdio.h>
int main()

{

int aufgabe4_1(int x){
aufgabe4_2(x*x);
return (x);
}
int aufgabe4_2(int x){
aufgabe4_1(x+x);
return (x);

}}