Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit dem Thema Funktionen!

Empfohlene Antworten

Veröffentlicht

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.

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

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.

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

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

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.



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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.