Programm wird nicht richtig ausgeführt --- C++ ----
-
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?
-
So,
das mit der Spiegeln-Funktion klappt nun endlich. Weiß aber leider noch nicht wie ich das mit der n Rückgabe nach dem Einlesen des neuen Elemets mache..
#include <iostream> using namespace std; void Menue(int limit) { cout << ""<<endl; 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; cout << ""<<endl; } 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 n) { int p = 1; for (int i = 0 ; i <= n/2 ; i++) { int j = n - p; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; p++; } } void Array_anzeigen(int n, int arr[]) { for(int x = 0; x < n; x++) { cout << arr[x] << " "; } cout << endl; } int 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 = n; i >= 1; i--) { arr[i] = arr[i-1]; } cin >> arr[0]; } return n; } int main() { const int limit = 10; int arr[limit]; int n = 0; char op; Menue(limit); do { cin >> op; switch (op) { case '1': cout << " Array einlesen: \n"<< endl; n = Array_einlesen(limit, n, arr); break; case '2': Array_spiegeln(arr, n); 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; n = 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; }
-
Mr. Bit schrieb:
Ich hätte n gedacht. Was ist denn richtig?
Die richtige Anzahl an Elementen ist richtig.
Dazu sollte man wissen, was die Funktion macht.
Steht aber auch in der Aufgabestellung.
-
Ahhh endlich,
es hat klick gemacht
Die Funktion Element_einlesen() muss n+1 als Rückgabewert haben....#include <iostream> using namespace std; void Menue(int limit) { cout << ""<<endl; 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; cout << ""<<endl; } 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 n) { int p = 1; for (int i = 0 ; i <= n/2 ; i++) { int j = n - p; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; p++; } } void Array_anzeigen(int n, int arr[]) { for(int x = 0; x < n; x++) { cout << arr[x] << " "; } cout << endl; } int 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 = n; i >= 1; i--) { arr[i] = arr[i-1]; } cin >> arr[0]; } return n+1; } int main() { const int limit = 10; int arr[limit]; int n = 0; char op; Menue(limit); do { cin >> op; switch (op) { case '1': cout << " Array einlesen: \n"<< endl; n = Array_einlesen(limit, n, arr); Menue(limit); break; case '2': Array_spiegeln(arr, n); cout << " Array wurde gespiegelt. \n" << endl; Menue(limit); break; case '3': cout << " Array ausgeben: \n" << endl; Array_anzeigen(n, arr); Menue(limit); break; case '4': cout << " Element einlesen: \n" << endl; n = Element_einlesen(limit, n, arr); Menue(limit); break; case '5': cout << " Das Programm wird beendet. \n" << endl; break; default: cout << " Unzulaessige Wahl. Bitte erst den Array einlesen. " << endl; Menue(limit); break; } } while (op != '5'); system ("pause"); return 0; }Danke dir/euch für deine/eure Geduld!!!

-
Mr. Bit schrieb:
Ahhh endlich,
es hat klick gemacht
Die Funktion Element_einlesen() muss n+1 als Rückgabewert haben....Ja, muss sie.
Aber nicht immer.
-
Muss Element_einlesen() wenn n >= limit ist return n haben?
Jetzt habe ich gesehen das die Funktion spiegeln nur bei ungeraden n funktioniert. Bei geraden Zahlen werden die zwei Zahlen in der mitte nicht getauscht. Aber als ich die Funktion als Probe nochmal separat ausprobiert habe funktioniert sie komplett..
#include <iostream> using namespace std; int main() { int arr[]={1,2,3,4,5,6}; int n = 6; int p = 1; for (int i = 0 ; i < n/2 ; i++) { int j = n - p; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; p++; } for(int x = 0; x < n; x++) { cout << arr[x] << " "; } cout << endl; system ("pause"); }Wo ist das der Unterschied?
-
Mr. Bit schrieb:
Muss Element_einlesen() wenn n >= limit ist return n haben?
Was passiert bei
n >= limit?
Was passiert im anderen Fall?
Wofür steht das n?Erst überlegen, dann Code schreiben
Mr. Bit schrieb:
Wo ist das der Unterschied?
Vergleich mal Zeile 11.
Zeichen für Zeichen.
-
Habe das Gleichheitszeichen übersehen übersehen...Oh Mann...

Wenn n >= limit ist soll kein weiteres Element eingelesen werden.
Im anderen Fall soll ein weiteres Element hinzugefügt werden. Also erhöht sich n um eins.
n steht für die Anzahl der Elemente.Also muss kein n returnt werden wenn n >= limit ist.
-
Mr. Bit schrieb:
Also muss kein n returnt werden wenn n >= limit ist.
Es muss immer ein Wert zurückgegeben werden. Nur bleibt der bei dem von dir genannten Fall unverändert.
-
Alles klar! Danke dir!!!
