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

Informatiker Board » Themengebiete » Praktische Informatik » Call by Reference » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Call by Reference
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
kim....
unregistriert
Call by Reference Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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);

}}
19.12.2013 23:30
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
20.12.2013 02:37 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
kim...
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
20.12.2013 08:35
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
20.12.2013 08:51 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kim...
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

danke smile das habe ich jetzt soweit verstanden. und wie sorge ich dafür dass die endlosschleife aufhört?
20.12.2013 09:32
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
20.12.2013 09:36 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kim...
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

also funktioniert das Programm nicht mehr, weil wie du schon sagtest, eine endlosschleife entsteht? das wäre doch die antwort oder auf meine Aufgabenstellung?
20.12.2013 09:40
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja.

__________________
Syntax Highlighting fürs Board (Link)
20.12.2013 09:43 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kim...
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

vielen dank euch beiden smile
20.12.2013 09:44
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Call by Reference