Programm wird nicht richtig ausgeführt --- C++ ----
-
DirkB schrieb:
- Nutze den Rückgabewert von Funktionen wo es sinnvoll ist.
Aber bei beiden Einlese-Funktionen.
Bei Array_anzeigen läuft deine Schleife zu weit.
-
Wie lasse ich n zurückgeben?
Habe es mit int Array_einlesen und dann am Ende der Funktion mit return n verusucht. Es wird aber weiterhin nur das in der main initialisierte n verwendet. Ich soll die Aufgabe ohne Referenzen/Zeigern lösen.
-
Du entverwendst den Parameter n aus dem Funktionskopf, da du ihn nicht mehr brauchst.
Stattdessen machst du eine lokale Variable in der Funktion, die gibst du zurück.
Und das Ergebnis weißt du in deinem n in main zu.
-
Wie weise ich das Ergebnis in der main n zu? Sorry für die blöden Fragen.... Warte noch drauf dass es klick macht...
-
foo = func(param) !?
-
Könntest du die Zuweisung so schreiben wie ich sie hier brauchen würde?
-
Wenn du einer Variablen einen Wert zuweisen willst, dann schreibst du sie auf der linken Seite hin, gefolgt von einem =
Auf der rechten Seite steht dann ein Ausdruck.
Das kann eine Zahl sein, eine andere Variable, ein Funktionsaufruf oder auch eine Kombination daraus.
-
Mr. Bit schrieb:
Könntest du die Zuweisung so schreiben wie ich sie hier brauchen würde?
Du ersetzt einfach die Namen, durch deine eigenen....

Du musst dir dringend ein gutes Grundlagenbuch besorgen; Empfehlungen gibts hier im Forum.
-
Kannst du das bitte mal so schrieben wie ich es hier brauchen würde... komme so nicht weiter. Hab alles mögliche ausprobiert und immer hat es nicht geklappt.
-
Weise deiner Variablen n mal den Wert 5 zu und zeig uns den Code.
-
#include <iostream> using namespace std; int Array_einlesen(int const limit, int n, int arr[]) { cout << " Wie viele Elemente wollen Sie einlesen ( maximal "<< 10 <<" ) ? " << endl; cin >> n; cout << "" << endl; if ( n > limit) { cout << " Es koennen nur maximal 10 Elemente eingelesen werden." << endl; } else { for(int x = 0 ; x < n ; x++) { cout << " Bitte geben Sie die Zahl Nummer " << x+1 << " ein." << endl; cin >> arr[x]; } } return n; } void Array_spiegeln( int arr[]) { int temp; temp = arr[9]; arr[9] = arr[0]; // Element 9 wird mit Element 0 vertauscht. arr[0] = temp; temp = arr[8]; arr[8] = arr[1]; // Element 8 wird mit Element 1 vertauscht. arr[1] = temp; temp = arr[7]; arr[7] = arr[2]; // Element 7 wird mit Element 2 vertauscht. arr[2] = temp; temp = arr[6]; arr[6] = arr[3]; // Element 6 wird mit Element 3 vertauscht. arr[3] = temp; temp = arr[5]; arr[5] = arr[4]; // Element 5 wird mit Element 4 vertauscht. arr[4] = temp; } void Array_anzeigen(int n, int arr[]) { for(int x = 0; x < n; x++) { cout << arr[x] << " "; } cout << endl; } void Element_einlesen(int limit, int n, int arr[]) { if ( n >= limit) { cout << " Das Array ist schon voll. Bei Bedarf weniger Zahlen einlesen, dann erneut versuchen."<<endl; } else { arr[9] = arr[8]; arr[8] = arr[7]; arr[7] = arr[6]; arr[6] = arr[5]; arr[5] = arr[4]; arr[4] = arr[3]; arr[3] = arr[2]; arr[2] = arr[1]; arr[1] = arr[0]; cin >> arr[0]; } } int main() { const int limit = 10; int n = 5; int arr[limit]; char op; cout << "Bitte waehlen sie aus folgenden Aktionen:" << endl; cout << "1: Array einlesen (maximal "<< limit <<") Elemente"<< endl; cout << "2: Array spiegeln" << endl; cout << "3: Array ausgeben" << endl; cout << "4: Element dem Array an Index 0 hinzufuegen" << endl; cout << "5: Das Programm beenden" << endl; do { cin >> op; switch (op) { case '1': cout << " Array einlesen: \n"<< endl; Array_einlesen(limit, n, arr); break; case '2': Array_spiegeln(arr); cout << " Array wurde gespiegelt. \n" << endl; break; case '3': cout << " Array ausgeben: \n" << endl; Array_anzeigen(n, arr); break; case '4': cout << " Element einlesen: \n" << endl; Element_einlesen(limit, n, arr); break; case '5': cout << " Das Programm wird beendet. \n" << endl; break; default: cout << " Unzulaessige Wahl. Bitte erst den Array einlesen. " << endl; break; } } while (op != '5'); system ("pause"); return 0; }
-
Was ist daran so schwierig, den Variablennamen hinzuschreiben, deren Wert du ändern willst. Dann ein Gelichheitszeichen als Zuweisung und dann den Funktionsaufruf.
Die Funktionen hast du ja schon mehrmals aufgrufen. Das kannst du.
Deinen Variablen hast du auch schon mehrmals neue Werte zugewiesen. Sowohl konstante Werte als auch von Variablen. Das kannst du also auch.
Nachdenken und verknüpfen.Nathan schrieb:
foo = func(param) !?
Dein_Variablenname_hier = Dein_Funktionsname_hier(Deine_Funktionsparameter);
-
Schreib es doch einfach bitte hin...
Habe es jetzt so versucht aber es klappt nicht...
#include <iostream> using namespace std; int Array_einlesen(int const limit, int n, int arr[]) { cout << " Wie viele Elemente wollen Sie einlesen ( maximal "<< 10 <<" ) ? " << endl; cin >> n; cout << "" << endl; if ( n > limit) { cout << " Es koennen nur maximal 10 Elemente eingelesen werden." << endl; } else { for(int x = 0 ; x < n ; x++) { cout << " Bitte geben Sie die Zahl Nummer " << x+1 << " ein." << endl; cin >> arr[x]; } } return n; } void Array_spiegeln( int arr[]) { int temp; temp = arr[9]; arr[9] = arr[0]; // Element 9 wird mit Element 0 vertauscht. arr[0] = temp; temp = arr[8]; arr[8] = arr[1]; // Element 8 wird mit Element 1 vertauscht. arr[1] = temp; temp = arr[7]; arr[7] = arr[2]; // Element 7 wird mit Element 2 vertauscht. arr[2] = temp; temp = arr[6]; arr[6] = arr[3]; // Element 6 wird mit Element 3 vertauscht. arr[3] = temp; temp = arr[5]; arr[5] = arr[4]; // Element 5 wird mit Element 4 vertauscht. arr[4] = temp; } void Array_anzeigen(int m, int arr[]) { for(int x = 0; x < m; x++) { cout << arr[x] << " "; } cout << endl; } void Element_einlesen(int limit, int n, int arr[]) { if ( n >= limit) { cout << " Das Array ist schon voll. Bei Bedarf weniger Zahlen einlesen, dann erneut versuchen."<<endl; } else { arr[9] = arr[8]; arr[8] = arr[7]; arr[7] = arr[6]; arr[6] = arr[5]; arr[5] = arr[4]; arr[4] = arr[3]; arr[3] = arr[2]; arr[2] = arr[1]; arr[1] = arr[0]; cin >> arr[0]; } } int main() { const int limit = 10; int arr[limit]; int n = 5; int m = Array_einlesen(limit, n, arr); char op; cout << "Bitte waehlen sie aus folgenden Aktionen:" << endl; cout << "1: Array einlesen (maximal "<< limit <<") Elemente"<< endl; cout << "2: Array spiegeln" << endl; cout << "3: Array ausgeben" << endl; cout << "4: Element dem Array an Index 0 hinzufuegen" << endl; cout << "5: Das Programm beenden" << endl; do { cin >> op; switch (op) { case '1': cout << " Array einlesen: \n"<< endl; Array_einlesen(limit, n, arr); break; case '2': Array_spiegeln(arr); cout << " Array wurde gespiegelt. \n" << endl; break; case '3': cout << " Array ausgeben: \n" << endl; Array_anzeigen(n, arr); break; case '4': cout << " Element einlesen: \n" << endl; Element_einlesen(limit, n, arr); break; case '5': cout << " Das Programm wird beendet. \n" << endl; break; default: cout << " Unzulaessige Wahl. Bitte erst den Array einlesen. " << endl; break; } } while (op != '5'); system ("pause"); return 0; }
-
Rumraten gibt es nicht.
klappt nicht... ist die schlechteste aller Fehlerbeschreibungen.Hast du dich nicht gewundert, dass jetzt zuerst die Eingabe kommt und dann das Menü?
Das liegt daran, dass du es in der Reihenfolge programmiert hast.Du willst n (aus main) ändern (und nicht m)*
Du willst dass der Wert von Array_einlesen kommt.
Du willst dass das bei Option 1 passiert.DANN SCHREIB DAS DA AUCH HIN und nicht irgenwo im Code.
*Die Variablen müssen nicht den selben Namen haben, du hast es nur so gewählt.
-
So ich habe das mit dem Rückgabewert jetzt gemacht.

Eine andere Frage ist warum die Schleife hier nicht funktioniert bzw. wenn ich für n 6 eingebe sie mir nur die Elemente bis 6 ausgibt also das letzte Element fällt raus. Das ändert sich auch nicht wenn ich for (int i = 0; i < n+1; i++) eingebe. Wieso ist das so?
void Element_einlesen(int limit, int n, int arr[]) { if ( n >= limit) { cout << " Das Array ist schon voll. Bei Bedarf weniger Zahlen einlesen, dann erneut versuchen."<<endl; } else { for (int i = 0; i < n; i++) { int temp = arr[n-1]; arr[n-1] = arr[i]; arr[i] = temp; } cin >> arr[0]; } }
-
Du hast in der Schleife mit dem n und i durcheinander gekommen.
Du brauchst hier keine Hilfsvariable temp. Wenn du die Richtung geschickt wählst.Da du mit dieser Funktion die Anzahl der Elemente änderst, solltest du das auch
mainmitteilen.^Ich denke ja auch, dass die Funktion [c]Array_spiegeln[/c] nur die Elemente Spiegeln soll, die auch vorhanden sind.^
-
Klappen tut das so leider nicht.
for (int i = n; i < n; i--) { arr[i] = arr[i-1]; } cin >> arr[0];Was ist denn falsch daran? Jetzt überschriebt er nur Index 0.
-
Mr. Bit schrieb:
Klappen tut das so leider nicht.
for (int i = n; i < n; i--)Schun wir mal ...
Du setzt i auf den Wert von n. OK soweit
Dann wird überprüft: "Ist i klein als n ?"; Nein, denn sie sind ja gleich.
Darum ist die Schleife gleich zuende.Also Schleifenbedingung ändern. So dass der Ausdruck wahr ist, solange die Schleife laufen soll.
-
Ich komme nicht darauf wie ich die Schleifenbedingung sinnvoll ändern könnte....
-
Mr. Bit schrieb:
Ich komme nicht darauf wie ich die Schleifenbedingung sinnvoll ändern könnte....
Ohne mir jetzt das große Bild anzusehen (vielleicht wäre ja auch n-1 als Startwert sinnvoll): Wie wäre es mit der Relation "kleiner-gleich"?