Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich bin noch ein C++ Anfänger und habe ein Problem beim Thema Funktionen. Ich möchte ein Programm schreiben, dass den Array mit den Zahlen 5,7,4,3,9,10,1 einließt und in einer rekursiven Funktion, das Array durchläuft und nur die Zahlen ausgibt die kleiner als das bisherige Minimun, also z.b. min 5 nach der 1. Zahl, 7 wird nicht ausgegeben weil größer, dann wird 4 ausgegeben und das min wird auf 4 gesetzt, dann wird 3 ausgegeben und das min auf 3 gesetzt u.s.w. Das Durchlaufen des Arrays soll aber in rekursiver Funktion passieren ohne Schleife. Ich habe bisher folgenden Code, aber dieser gibt immer nur die Zahl 0 aus. Vielleicht könnte mir jemand helfen.

#include <iostream>

using namespace std;

int arr[7]={5,7,4,3,9,10,1};

int min=30;

int pos=0;

int durch(int pos,int min) {

if (pos>7)

return

pos=arr[pos];

if (pos<min) {

cout << pos;

min=pos;

durch((++pos),min);

}

else if (pos>min) {

durch((++pos),min);

}

else;

}

int main () {

int min;

durch(pos, min);

system("PAUSE");

return 0;

}

Und vielleicht könntet ihr mir ein Paar Tipps geben, wo man im Internet das Kapitel Funktionen gut erklärt bekommt.

Vielen Dank im Vorraus.

Geschrieben
pos=arr[pos];
Das hier ist keine gute Idee. Danach steht in pos nicht mehr die Position, sondern der Wert an der Position. Die Position ist damit weg. Du brauchst aber die Position noch für die rekursiven Aufrufe. Benutz hier eine weitere Variable, oder verwende arr[pos].
Geschrieben

Also du meinst ich soll noch eine Varaible z.b. a=arr[pos] verwenden, dann ++a um zu erhöhen bei jedem neuen Aufruf? Ja ich will dann den Wert des arrays an der position mit dem minimun von der vorhergehenden Position vergleichen. Wie könnte ich das machen?

Vielen Dank schon im Vorraus.

Geschrieben

erm, rekursive Funktion würd ich hier nicht nutzen, lieber Array iterieren und min immer neu setzen.

btw:

- Position 7 im Array ist ungültig.

(vgl. if (pos>7) return; -> if (pos>=7) return;)

- globale Variablen riechen schlecht.

(wenn rekursiv dann array, pos und min immer mit übergeben)

- globales min wird durch lokales min überdeckt.

(... und dem lokalen min wird nach der Deklaration kein Werd zugewiesen.)

Geschrieben

Also du meinst Variablen nicht global sondern lokal definieren oder was?

Und es wird immer nur die Zahl 0 ausgegeben. Wie kann man das durchlaufen des Arrays mit einer rekursion machen, geht das mit ++ oder ist das keine gute Idee?

Danke schon im Vorraus

Geschrieben
Also du meinst Variablen nicht global sondern lokal definieren oder was?

Ja.

Und es wird immer nur die Zahl 0 ausgegeben.

Logisch

Erste mal in Funktion, pos = 0, min = irgendwas.

pos = arr[0]; -> ergo 5

pos > min; -> pos > undefiniert (meistens irgendein minus)

++pos -> 6

pos = arr[6]; -> 1

pos > min;

++pos; 2

pos = arr[2]; -> 7

pos > min;

++pos; -> 8

8 > 7; -> return

Wie kann man das durchlaufen des Arrays mit einer rekursion machen, geht das mit ++ oder ist das keine gute Idee?

Danke schon im Vorraus

Würd ich nicht machen. Eine rekursive Iteration ist auch nur eine schleifennachbildung.

Geschrieben (bearbeitet)



void iterate(int array[], int length, int level=-1)
{
if(level==-1) {
std::sort(array, array+length-1);
iterate(array, length, 0)
}
else if(level==length)
return;
else {
std::cout << array[level] << " \n";
iterate(array, length, ++level);
}
}
[/PHP]

Ich vermute mal das läuft so nicht. Aber die Idee sollte klar werden.

Eventuell das Array vorher kopieren, falls es nicht sortiert werden soll.

Und wenn es schon Codetags gibt, dann bitte auch benutzen. Das erleichtert die Sache doch immens.

Edit:

Code in eine Funktion gepackt

Bearbeitet von Panke

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...