Anzahl der unterschiedlichen Zahlen im Array



  • Hallo zusammen,
    ich bin dabei die Programmiersprache C++ zu lernen. Nun komme ich bei dieser einfachen Aufgabe nicht weiter. Es soll folgendes passieren: der Benutzer gibt 9 Zahlen zwischen 1 und 6 ein und anhand der Eingabe soll bestimmt werden, wie viele unterschiedliche Zahlen der Benutzer eingegeben hat.
    Ich habe versucht die Aufgabe zu lösen, indem ich die Benutzereingabe in ein Array gespeichert habe. Anschliessend laufe ich übers Array und vergleiche alle Zahlen(wie bei BubbleSort) miteinander. Hier der Programmcode:

    #include "pch.h"
    #include <iostream>
    
    int main(){
    	std::cout << "Bitte geben Sie 9 Zahlen ein, die zwischen 1 und 6 liegen.\n" ;
    
    	int numbers[9];
    
    	for (int i = 0; i < 9; i++) {
    		std::cout << "Bitte geben Sie die " << i + 1 << ". Zahl ein.\n" ;
    		std::cin >> numbers[i];
    		while (numbers[i] < 1 || numbers[i] > 6) {
    			std::cout << "Bitte geben Sie eine Zahl zwischen 1 und 6 ein.\n" ;
    			std::cin >> numbers[i];
    		}
    	}
    
    	int counter = 0;
    	int sizeArray = sizeof(numbers) / sizeof(numbers[0]);
    	for (int i = 0; i < sizeArray; i++) {
    		for (int j = i + 1; j < sizeArray; j++) {
    			std::cout << "Vergleiche: " << numbers[i] << " mit " << numbers[j] << "\n";
    			if (numbers[i] == numbers[j]) {
    				break;
    			}
    			if (numbers[i] != numbers[j]){
    				if (j == sizeArray) {
    					std::cout << "Zahlen unterschiedlich \n";
    					counter++;
    				}
    			}
    		}
    	}
    
    	std::cout << "In der Eingabe kamen " << counter << " unterschiedliche Zahlen vor.\n" ;
    	system("PAUSE");
    }
    

    Weil das Programm nicht funktioniert, habe ich an manchen Stellen cout Befehle eingefügt. Was meine Probleme sind / was ich nicht verstehe:

    1. Warum vergleicht das Programm die Zahl auch mit den vorherigen. Erklaerung anhand eines Beispiels: Sei mein Zahlenarray = [1, 2, 3, 4, 5] und was ich haben möchte ist, dass das Programm 2 nur mit der 3, 4 und 5 vergleicht. Aber, nach diesen drei Vergleichen, wird die Zahl noch mit 1 verglichen. Genauso wie wenn ich die 3 mit 4 und 5 vergleichen möchte. Am Ende wird die 3 noch mit 1 und 2 verglichen. Warum?

    2. Ich bekomme am Ende immer die Ausgabe, dass keine Zahlen unterschiedlich waren. Was genau klappt da nicht?

    Vielen Dank im Voraus



  • @acevik94 sagte in Anzahl der unterschiedlichen Zahlen im Array:

    if (j == sizeArray)

    Wie kann das jemals erfüllt sein?



  • Vielen Dank für die schnelle Antwort. Ja, das habe ich übersehen. jetzt steht da

    if(j == sizeArray - 1)
    

    Den ersten Fehler habe ich damit korrigiert aber der 2. Fehler ist noch da, naemlich der Vergleich mit den vorherigen Zahlen.



  • @acevik94 sagte in Anzahl der unterschiedlichen Zahlen im Array:

    Sei mein Zahlenarray = [1, 2, 3, 4, 5]

    Das sin nur 5 Zahlem, du musst aber 9 eingeben. Dein Beispiel stimmt nicht.



  • @manni66 Ja, das war nur ein Beispiel mit 5 Zahlen, um das Problem mit einem Beispiel zu erklaeren. Meine Testeingabe ist [1,2,3,4,5,6,1,2,3] und die entsprechende Ausgabe ist:
    Vergleiche: 1 mit 2
    Vergleiche: 1 mit 3
    Vergleiche: 1 mit 4
    Vergleiche: 1 mit 5
    Vergleiche: 1 mit 6
    Vergleiche: 1 mit 1
    Vergleiche: 2 mit 3
    Vergleiche: 2 mit 4
    Vergleiche: 2 mit 5
    Vergleiche: 2 mit 6
    Vergleiche: 2 mit 1
    Vergleiche: 2 mit 2

    Vergleiche: 3 mit 4
    Vergleiche: 3 mit 5
    Vergleiche: 3 mit 6
    Vergleiche: 3 mit 1
    Vergleiche: 3 mit 2
    Vergleiche: 3 mit 3

    Vergleiche: 4 mit 5
    Vergleiche: 4 mit 6
    Vergleiche: 4 mit 1
    Vergleiche: 4 mit 2
    Vergleiche: 4 mit 3
    Zahlen unterschiedlich
    Vergleiche: 5 mit 6
    Vergleiche: 5 mit 1
    Vergleiche: 5 mit 2
    Vergleiche: 5 mit 3
    Zahlen unterschiedlich
    Vergleiche: 6 mit 1
    Vergleiche: 6 mit 2
    Vergleiche: 6 mit 3
    Zahlen unterschiedlich
    Vergleiche: 1 mit 2
    Vergleiche: 1 mit 3
    Zahlen unterschiedlich
    Vergleiche: 2 mit 3
    Zahlen unterschiedlich
    In der Eingabe kamen 5 unterschiedliche Zahlen vor.

    Siehe Zeilen 6, 11 und 12. Die 1 wird wieder mit 1 verglichen und die 2 mit 1 und 2.



  • @acevik94 sagte in Anzahl der unterschiedlichen Zahlen im Array:

    Siehe Zeilen 6,

    Testeingabe ist [1,2,3,4,5,6,1,2,3]

    Was soll denn sonst mit der zeitem 1 geschehen?



  • @acevik94 sagte in Anzahl der unterschiedlichen Zahlen im Array:

    Siehe Zeilen 6, 11 und 12. Die 1 wird wieder mit 1 verglichen und die 2 mit 1 und 2.

    Welche Werte gibst du denn in Zeile 22 aus?
    Den Index oder den Inhalt vom Array?



  • @manni66 hmm.... 😅 Mir ist momentan so peinlich . Ich soll vielleicht aufhören programmieren zu lernen 😞



  • Ach quatsch. Du darfst nur nicht schnell aufgeben und das alles nicht zu Ernst betrachten. Wenn dein Code nicht läuft dann nehme dir Zeit zum debuggen. Kontrolliere Stück für Stück ab welchem Punkt das Programm etwas anderes macht als es soll und suche dann dort nach dem Fehler. Dann klappt das schon.
    🙂



  • Du kannst auch einen anderen Lösungsweg nehmen. Vielleicht probierst du das mal aus, wenn du im aktuellen Weg die Fehler rausbekommen hast.

    Und zwar wäre eine Idee, ein Array mit gesehenen Zahlen zu erstellen:

    bool seen[6] = {};

    Dann für alle eingegebenen Zahlen: seen[eingabe - 1] = true;

    Und am Ende zählst du einfach, wie viele Einträge in seen true sind. So viele verschiedene Zahlen wurden eingegeben. Das klingt für mich einfacher als die verschachtelten Schleifen. Merke: je verschachtelt, desto unübersichtlich und potentiell ineffizient!

    Noch ein anderer Weg: nimm ein std::set<int> und speichere in diesem die Werte. Am Ende gibst du die Größe des Sets aus.

    Bonusfrage: überleg dir die Vor- und Nachteile aller Lösungen.

    Und noch ein Bonushinweis, da du das hier in C++ gepostet hast: Statt
    int numbers[9];
    könntest du auch std::array<int, 9> numbers nehmen - oder auch std::vector<int> numbers(9). Dann fällt die Längenberechnung int sizeArray = sizeof(numbers) / sizeof(numbers[0]); weg, weil das std::array oder der std::vector selbst die eigene Länge kennt, sie beträgt: numbers.size(). (also informiere dich über die Klassen std::vector und std::array)



  • @acevik94 sagte in Anzahl der unterschiedlichen Zahlen im Array:

    @manni66 hmm.... 😅 Mir ist momentan so peinlich . Ich soll vielleicht aufhören programmieren zu lernen 😞

    Dein Beispiel ist superklein und daher kann man das manuell nachvollziehen, im allgemeinen ist man aber auf Tools angewiesen. Lerne daher wie ein Debugger funktioniert und schau dir selber an, was genau dein Programm macht. Die Fragen, die du hier gestellt hast, kannst du dir mit einem Debugger in 5 Minuten beantworten und dein Problem ist dann wahrscheinlich zum Großteil schon gelöst.


Log in to reply