Probleme mit der ausgabe eines Arrays



  • Hallo, ich bin echt eine Niete in C++ und komme bei diese Aufgabe einfach nicht weiter. Diese lautet: Der Benutzer soll 5 ganze Zahlen zwischen 1 und 6 eingeben und dann ausgeben, wie oft diese Zahlen eingegeben worden sind.
    Beispiel:
    Benutzereingabe: 4, 4, 5, 5, 6

    1. Zahle kommt 2 Mal vor
    2. Zahl kommt 2 Mal vor
    3. Zahl kommt 2 Mal vor
    4. Zahl kommt 2 Mal vor
    5. Zahl kommt 1 Mal

    Bis jetzt bin ich hier angekommen, aber leider kommen beiden anz Variablen nur krumme Zahlen heraus.
    Ich hoffe ihr könnt mir helfen.
    ps. in diesem Stand dürfen wir keine funktionen, Zeiger, usw. verwenden. Sprich nur if zweige, Arrays und schleifen.

    int eingabe[5];
    cout << "Bitte geben Sie 5 Zahlen ein: " << endl;
    cin >> eingabe[0];
    cin >> eingabe[1];
    cin >> eingabe[2];
    cin >> eingabe[3];
    cin >> eingabe[4];

    int anz [5];
    
    
    for (int i = 1; i >= 1 && i <= 6; i++)
    {
    
    	if (eingabe[0] == eingabe[1] || eingabe[0] == eingabe[2] || eingabe[0] == eingabe[3] || eingabe[0] == eingabe[4])
    	{
    		anz[0]++;
    	}
    	if (eingabe[1] == eingabe[2] || eingabe[1] == eingabe[3] || eingabe[1] == eingabe[4] || eingabe[1] == eingabe[0])
    	{
    		anz[1]++;
    	}
    	if (eingabe[2] == eingabe[0] || eingabe[2] == eingabe[1] || eingabe[2] == eingabe[3] || eingabe[2] == eingabe[4])
    	{
    		anz[2]++;
    	}
    	if (eingabe[3] == eingabe[0] || eingabe[3] == eingabe[1] || eingabe[3] == eingabe[2] || eingabe[3] == eingabe[4])
    	{
    		anz[3]++;
    	}
    	if (eingabe[4] == eingabe[0] || eingabe[4] == eingabe[eingabe[1]] || eingabe[4] == eingabe[2] || eingabe[4] == eingabe[3])
    	{
    		anz[4]++;
    	}
    }
    
    
    cout << "1. Zahl wurde: " << anz[0] << " Mal eingegeben." << endl;
    cout << "2. Zahl wurde: " << anz[1] << " Mal eingegeben." << endl;
    cout << "3. Zahl wurde: " << anz[2] << " Mal eingegeben." << endl;
    cout << "4. Zahl wurde: " << anz[3] << " Mal eingegeben." << endl;
    cout << "5. Zahl wurde: " << anz[4] << " Mal eingegeben." << endl;


  • @mmm_1482_ sagte in Probleme mit der ausgabe eines Arrays:

    krumme

    ???

    Du hast anz nicht auf Null gesetzt. int anz [5] = {};

    for (int i = 1; i >= 1 && i <= 6; i++) Wozu ist die Schleife jetzt gut? i wird nicht benutzt.



  • Tja, das passiert wenn man seine Vairablen nicht initialisiert.



  • @manni66 ja ist mor gerade auch aufgefallen. Jetzt kommen zumindest normale Zahlen ein, jedoch die Falschen. Die Forschleife soll eigentlich kontrollieren, dass nur zahlen 1-6 eingegeben werden sollen. Leider funktioniert das auch nicht 😃



  • @mmm_1482_ sagte in Probleme mit der ausgabe eines Arrays:

    Die Forschleife soll eigentlich kontrollieren, dass nur zahlen 1-6 eingegeben werden sollen.

    Und wie soll sie das machen?



  • @manni66 das Problem ist wenn ich eingabe mit i ersetzen würde, ensteht ein syntaxfehler. Das wäre halt eigentlich mein gedanke, aber es funktioniert leider nicht



  • Was wäre denn, wenn die Aufgabe erweitert werden sollte auf z.B. 10 Eingabezahlen? Möchtest du dann jeweils 10 Abfragen hinschreiben wollen.

    Tipp: 2 ineinander verschachtelte Schleifen verwenden (und dann wird auch i benutzt, aber als Array-Index, nicht zum Abtesten der Zahlenwerte).

    PS: Auch deine Eingabe und Ausgabe solltest du mit einer Schleife umsetzen. Und bei der Eingabe solltest du dann auf gültige Eingaben von 1-6 testen. 😉

    Danach solltest du verstanden haben, wofür Schleifen gut sind und wie man sie benutzt.



  • @Th69

    ich hab das jetzt nochmal anders gemacht. Jetzt ist es etwas besser, aber die ergebnisse sind falsch.
    #include <iostream>
    #include <string>
    using namespace std;

    int main()
    {

    int eingabe[5] = { 0 };
    cout << "Bitte geben Sie 5 Zahlen ein: " << endl;
    int anz[5] = { 0 };
    
    int i = 0;
    for (; i >= 0 && i <= 4; i++) // Gibt die Anzahl der Eingabemöglichkeiten an (0-4 mal = also 5 Eingabemöglichkeiten)
    {
    	cin >> eingabe[i];
    	continue;
    }
    
    cout << "Die Zahlen lauten: " << eingabe[i] << endl;
    
    for (int j = 1; eingabe[j] >= 1 && eingabe[j] <= 6; j++)
    {
    
    	if (eingabe[j] == eingabe[j]) // wenn ein Arraywert == dem anderen ist, soll der Zähler um eins hochgesetzt werden
    
    	{
    		anz[j]++;
    		cout << eingabe[i] << " kommt: " << anz[j]++ << " Mal vor. " << endl; // Hier wird die anzahl des jeweiligen Array-Wertes ausgegeben
    	}
    
    }
    
    
    
    system("PAUSE");
    return 0;
    

    }



  • "Etwas besser" reicht aber nicht. Du mußt schon die Logik dahinter verstehen und diese dann exakt umsetzen.

    if (eingabe[j] == eingabe[j]) ergibt immer true (ist also eine überflüssige Angabe) und auch deine Schleifenbedingung ergibt keinen Sinn.

    Überlege dir ersteinmal den Code für die 1. Eingabe eingabe[0] und wenn der korrekt ist, dann schreibe eine Schleife drumherum, welche 0 durch den Schleifenindex (0 - 5) ersetzt.


Log in to reply