Programm wird nicht richtig ausgeführt --- C++ ----



  • 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!!! 👍 👍 👍


Anmelden zum Antworten