Programm wird nicht richtig ausgeführt --- C++ ----
-
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"?
-
wenn ich n-1 als Startwert habe bricht das Programm ab...
-
Mr. Bit schrieb:
Ich komme nicht darauf wie ich die Schleifenbedingung sinnvoll ändern könnte....
Ende ist doch, wenn
arr[1] = arr[0];ausgeführt wurde. Also wenn i = 1 ist.
Dann soll die Schleife laufen solange i größer gleich 1 ist ( oder größer 0).Mr. Bit schrieb:
wenn ich n-1 als Startwert habe bricht das Programm ab...
Wenn du die Abbruchbedingung nicht änderst ist das klar. Denn es wird ja immer 1 abgezogen.
Und -2000 ist auch kleiner als dein n.
-
Meinst du so?
for (int i = n; i >= 1; i--)
-
Mr. Bit schrieb:
Meinst du so?
for (int i = n; i >= 1; i--)Probier es aus.
Bei 9 Elementen, bei einem Element und bei einem leeren Array
-
wenn ich 4 Elemente einlese 1,2,3,4 und dann 99 als Zahl zum erneuten einlesen eingebe, ist die Ausgabe 99,1,2,3 ...
-
Steht ganz oben auf dieser Seite (4):
DirkB schrieb:
Da du mit dieser Funktion die Anzahl der Elemente änderst, solltest du das auch
mainmitteilen.
-
So dann???
case '4': cout << " Element einlesen: \n" << endl; n = Element_einlesen(limit, n, arr);Er gibt immernoch nur die unter 1 eingegebenen "n" aus.
-
Welchen Wert gibst du denn aus
Element_einlesen()zurück?Etwa n? Das n, das du auch übergeben hast? Ist das denn so richtig?
-
Ich hätte n gedacht. Was ist denn richtig?