cuthbert
Captain
- Registriert
- Jan. 2007
- Beiträge
- 3.092
wir sollen für unsere c++-vorlesung ein paar kleine programme schreiben. und sind beim thema rekursion angelangt . die aufgabe hab ich im prinzip schnon gelöst, aber ich versteh ein kleines ausgabeproblem nicht. hier mal der code:
das programm soll einfach den Baum, der zu beginn erstellt wird (Baum[]) in sinnvoller reihenfolge ausgeben. aber das ist nicht mein problem, so weit läuft alles.
irgendwie werden in der fettgedruckten rekursion falsche zeichen ausgegeben und zwar an der stelle
hier wird nicht nur die klammer ausgegeben sondern zusätzlich noch ein sonderzeichen. die ausgabe sieht dann so aus:
die "$"-zeichen sind also zu viel. ich kann mir überhaupt nicht erklären, wie das zustande kommt.
wenn ich die rekursion so umschreibe, dass ich aufs return verzichte und direkt ausgebe:
dann klappts einwandfrei. hat jemand ne idee, was ich für einen fehler gemacht hab? ich weiß jedenfalls nicht weiter . letztere Lösung reicht zwar schon für die aufgabe, aber gefällt mir nicht so gut. sorry für die schlechte formatierung, aber der dev c++ editor ist einfach grottig.
Code:
#include <cstdlib>
#include <iostream>
using namespace std;
char Baum[16]={'0','+','-','*','c','*','b','-',' ',' ','a','b',' ',' ','d','c'};
char printtree (int i);
main()
{
int i;
i=1;
printtree(i);
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
[B]char printtree (int i) {
if (i>7 || Baum[2*i]==' '&& Baum[2*i+1]==' ')
return Baum[i];
else {
cout<<"(";
cout<<printtree(2*i);
cout<<Baum[i];
cout<<printtree(2*i+1);
cout<<")";
}[/B]
}
das programm soll einfach den Baum, der zu beginn erstellt wird (Baum[]) in sinnvoller reihenfolge ausgeben. aber das ist nicht mein problem, so weit läuft alles.
irgendwie werden in der fettgedruckten rekursion falsche zeichen ausgegeben und zwar an der stelle
Code:
cout<<")"
hier wird nicht nur die klammer ausgegeben sondern zusätzlich noch ein sonderzeichen. die ausgabe sieht dann so aus:
Code:
((c-(a*b)$)$+(b*(d-c)$)$)
die "$"-zeichen sind also zu viel. ich kann mir überhaupt nicht erklären, wie das zustande kommt.
wenn ich die rekursion so umschreibe, dass ich aufs return verzichte und direkt ausgebe:
Code:
void printtree (int i) {
if (i>7 || Baum[2*i]==' '&& Baum[2*i+1]==' ')
cout<<Baum[i];
else {
cout<<"(";
printtree(2*i);
cout<<Baum[i];
printtree(2*i+1);
cout<<")";
}