Denkanstoß call by Reference

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Denkanstoß call by Reference

Beitrag von sukka » Mo Dez 15, 2008 8:06 pm

Hi zusammen,

ich brauch mal wieder einen kleinen Denkanstoß zum Thema Call by Reference.
Ich habe folgendes Programm in c++

Code: Alles auswählen

//call by calue mit Rückgabewert

#include <string>
#include <iostream>
using namespace std;

string zahlen(short z);

int main(void)
{
	short zahl;
	while(1)
	{
		cout << "Zahl = ? ";
		cin >> zahl;
		zahlen(zahl);
		cout << zahl << " = " << zahlen (zahl) << endl;
	}
	return 0;
}

string zahlen(short z)
{
	string zt;
	string einer[9] = {"ein", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"};
	string zehner [2] = {"zwanzig", "dreissig"};
	short i = z%10-1;	
	short j = z/10-2;	
	if(z == 20)
		zt = zehner[0];
	else if(z == 30)
		zt = zehner[1];
	else if(z >= 21 && z <= 39)
		zt = einer[i] + "und" + zehner[j];
	else //if(z<20 && z>39)
		zt = "unbekannt";
//	cout << z << " = " << zt << endl;
	return zt;
}
und möchte das ganze jetzt gern als Call by Reference darstellen. Gebt mir mal nen Tipp, ich steh auf dem Schlauch.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Denkanstoß call by Reference

Beitrag von Xin » Di Dez 16, 2008 1:04 am

Kurzfassung:
string zahlen(short & z);

Langfassung:
Keine Ahnung, ob das Dein Problem schon löst, vielleicht erklärst Du ein wenig, warum Du Referenzen verwenden möchtest?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: Denkanstoß call by Reference

Beitrag von sukka » Di Dez 16, 2008 10:44 am

Die Kurzfassung hab ich schon probiert, ich würd gern nen String, den ich in der Main angelegt habe manipulieren.
also:

Code: Alles auswählen

//call by Reference
#include <string>
#include <iostream>
using namespace std;

void zahlen(short z, string &zt);

int main(void)
{
	short zahl;
	string zahlenwert;
	while(1)
	{
		cout << "Zahl = ? ";
		cin >> zahl;
		zahlen(zahl, zahlenwert);
		cout << zahl << " = " << zahlenwert << endl;
	}
	return 0;
}

void zahlen(short z, string &zt)
{
	//string zt;
	string einer[9] = {"ein", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"};
	string zehner [2] = {"zwanzig", "dreissig"};
	short i = z%10-1;	
	short j = z/10-2;	
	if(z == 20)
		zt = zehner[0];
	else if(z == 30)
		zt = zehner[1];
	else if(z >= 21 && z <= 39)
		zt = einer[i] + "und" + zehner[j];
	else //if(z<20 && z>39)
		zt = "unbekannt";
	//cout << z << " = " << zt << endl;
	}
somit hab ich die Möglichkeit in der Main das cout zu belassen und in meiner while Schleife alles mögliche auszugeben. Argument dafür ist eben das cout, dass jetzt nicht mehr in der Funktion steht und die Funktion auch keinen Rückgabetyp und Wert haben muss. Deswegen call by Reference. Ne Nacht drüber schlafen half schon :D

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Denkanstoß call by Reference

Beitrag von Xin » Di Dez 16, 2008 11:14 am

Genau so macht man's. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten