Fehler im c++ source code

M

Max02

Aktives Mitglied
Thread Starter
Dabei seit
08.10.2004
Beiträge
158
Reaktionspunkte
0
Hallo Leute,

wer kann mir da mal kurz helfen. Ich hab folgende Funktion geschrieben:
Code:
#include <iostream.h>
using namespace std;

void f_rek(int matrnr, int max_zif){
	int x=matrnr%10;
	if (matrnr){
		if (!(x%2)){
			if (x>=max_zif){
				cout << x;
				max_zif=x;
			}
		}
		f_rek(matrnr/10, max_zif);
		}
		
}
int main () {
	cout << f_rek(105276,0);
}

jedoch sagt mir xcode "invalid digit "8" in octal constant", ..

was soll mir das sagen, ich steh da an.

danke für eure hilfe
 
an welcher stelle sagt der das denn?
(ich hoffe mal die formatierung ist beim pasten draufgegangen ;))
 
vor der funktion void... setzt er sein rotes kreutzerl :eek:)
 
oh, sorry,...

in main vor "cout"
 
Statt dem Komma ein Punkt.
und die Main sollte unter Posix immer einen rückgabewert haben, also bitte ein "return 0;"
die angabe des .h ist in cpp afaik nicht nötig
 
ähhh, ich frag mich gerade wieso du eine funktion die nichts zurückgibt auf cout umlenkst in main?

cout << f_rek ist doch blödsinn, da f_rek als return type void hat...
da versucht der compiler vergeblich was sinnvolles draus zu machen, was natürlich nicht klappt
 
Zuletzt bearbeitet:
Vl. noch ein paar allgemeine Sachen:

1. Mach lieber #include <iostream> statt #include <iostream.h>
2. return-Wert für main Funktion?
3. Warum machst du cout << f_rek(105276,0); ? f_rek ist eine void-Fkt. Die liefert nichts zurück was du ausgeben kannst.
 
also wie kann ich das denn lösen, dass ich der funktion 2 param übergebe und die dann ausgegeben werden?
 
Du willst mehr als einen Rückgabewert haben?

Such mal nach Argumentenübergabe "By Reference"
 
Ja, da gibt es mehrere Möglichkeiten... was soll das Programm denn eigentlich machen?
 
ist von einer prüfungsangabe:

Rekursion: a. [20 Punkte] Erstellen Sie eine Definition der rekursiven Funktion void f rek(int matrnr,int max zif );: Als erster Parameter wird Ihre Matrikelnummer ?ubergeben. Die Wertbelegung des zweiten Parameters ist von Ihnen zu bewerkstelligen. Die rekursive Funktion soll ungerade Ziffern der Matrikelnummer in umgekehrter Reihenfolge in der diese in der Matrikelnummer auftreten ausgeben (mittels cout innerhalb der Funktion). Eine ungerade Ziffer darf nicht ausgegeben werden, falls bereits eine gr?oßere ungerade Ziffer ausgegeben wurde. z.B. 9347685 ? Ausgabe w?are: 579, da die Ausgabe von 3 unterdr?uckt wird. Eine Verwendung von Schleifen innerhalb der Funktion ist nicht erlaubt. b. [10 Punkte] Zeichnen sie den Aufrufgraph der erstellten Funktion. Bitte beachten Sie, dass der zweite Parameter beim ersten Aufruf mit einem funktionierenden Initialwert belegt werden muss.
 
Ich würd das warsch. so machen:

#include <iostream>
using namespace std;



void f_rek (int matrnr, int max_zif) {

int ausgabe_ziffer = matrnr % 10;

if (matrnr<1) { //keine ganze Zahl mehr vorhanden, Rekursionsanfang
return;
}

if (ausgabe_ziffer%2) {
// Zahl noch nicht ausgegeben und Zahl ungerade

if (ausgabe_ziffer > max_zif) { //Zahl groß genug?
cout << ausgabe_ziffer;
max_zif = ausgabe_ziffer;
}
}
f_rek(matrnr/10,max_zif); //Rekursion
return;
}


int main (int argc, char* argv[]) {

f_rek(9347685,0);

return 0;
}

Nicht gerade elegant gelöst, aber es tut seinen Zweck!

*jp*
 
Zuletzt bearbeitet:
danke für den code und eure hilfe
 
Zurück
Oben Unten