Zahlen vergleichen



  • danke erstmal für die schnellen antworten.

    hat von euch vielleicht jemand kurz zeit mir solch einen array vorzustellen. hab keine ahnung wie ich das hinbekommen soll.

    mfg.



  • int Z[5] = {random(5), random(5), random(5), random(5), random(5)};
    


  • int main ()
    {
     int a[2]; // erstelle Array mit 2 Elementen vom Typ int
     a[0] = 5; // erstes Element bei Index 0
     a[1] = 2; // zweites einfach +1
    }
    

    Ich denke das sollte reichen. Allerdings solltest du das in einem guten Buch nachschalgen. Siehe mal im FAQ für Anfängerbücher.

    @Fellhuhn
    Das wollte ich zuerst auch machen, dachte aber, dass er sich gescheiter mit der Materie befässt, als es von uns lösen zu lassen. 😉



  • Fellhuhn schrieb:

    int Z[5] = {random(5), random(5), random(5), random(5), random(5)};
    

    danke danke.
    ich hab einfach viel viel viel zu kompliziert gedacht.



  • Naja, wenn er es nicht versteht wird er eh einen auf den Deckel bekommen wenn sein Prof/Lehrer/Domina eine Erklärung verlangt. 😉

    Und das eigentliche Problem kommt ja erst noch. :p



  • Man kann das Array natürlich auch mit einer Schleife füllen. Bei mehr Elementen wird das dann auch schöner sein 🙂



  • ok ich wollte es ja selbst lösen wenn ihr hier schon schreibt das dass problem erst kommen wird 😃

    also ihr wisst es ja schon das es kommt 😃 .
    wie sortier und verlgeiche ich die zahlen?

    DANKE 😃



  • florian.dulzky schrieb:

    ok ich wollte es ja selbst lösen wenn ihr hier schon schreibt das dass problem erst kommen wird 😃

    also ihr wisst es ja schon das es kommt 😃 .
    wie sortier und verlgeiche ich die zahlen?

    DANKE 😃

    Ja, das haben wir erwartet 😃 Aber du kannst für den Anfang den Bubblesort-Algorithmus nutzen:

    http://de.wikipedia.org/wiki/Bubblesort



  • gjghjgh schrieb:

    florian.dulzky schrieb:

    ok ich wollte es ja selbst lösen wenn ihr hier schon schreibt das dass problem erst kommen wird 😃

    also ihr wisst es ja schon das es kommt 😃 .
    wie sortier und verlgeiche ich die zahlen?

    DANKE 😃

    Ja, das haben wir erwartet 😃 Aber du kannst für den Anfang den Bubblesort-Algorithmus nutzen:

    http://de.wikipedia.org/wiki/Bubblesort

    klingt gut hab ich in einem buch auch mal gelesen davon 😃



  • BubbleSort ist aber ineffizient. Wenn Du es professionell machen willst, dann steige auf MergeSort (QuickSort etc.) um. Ich habe mich damit letztens beschäftig, weshalb DU den Code über die Suchefunktion finden solltest.

    lg, freakC++



  • Warum nicht gleich STL?



  • freakC++ schrieb:

    BubbleSort ist aber ineffizient. Wenn Du es professionell machen willst, dann steige auf MergeSort (QuickSort etc.) um.

    Er will doch nur 5 oder 6 Zahlen sortieren. Da können diese Verfahren ihre Stärken nicht wirklich ausspielen, sie werden wohl sogar langsamer sein. Eine "professionelle" Herangehensweise sollte das berücksichtigen. Ernsthafte Quicksort-Implementierungen schalten auch bei kleinen Arrays auf einen naiven Algorithmus um. Vielleicht nicht gerade Bubble Sort, da gibt es ja noch einige andere.

    BTW die einfachste Lösung benutzt eine map: Einfach immer Map[Zahl]++ und am Schluss gucken ob irgendein Element >= 3 ist. Wenn man völlig unbeleckt ist kriegt man nämlich den Algorithmus, drei aufeinanderfolgende gleiche Zahlen in einem sortierten Array zu finden, auch nicht ohne weiteres fehlerfrei hin.



  • Achso, das stimmt natürlich. Bei solch kleinen Arrays ist es dann egal, ob er Bubble-, Selection-, Insertionsort nimmt. Trotzdem ist es eine interessante Ecke der Informatik!

    lg, freakC++



  • Selbst ohne sortieren und STL sind es nur drei verschachtelte For-Schleifen mit zwei Abfragen. 😉



  • Und mit STL ist das genau eine Zeile:
    std::sort(Z,Z+arraySize);



  • Fellhuhn schrieb:

    Selbst ohne sortieren und STL sind es nur drei verschachtelte For-Schleifen mit zwei Abfragen. 😉

    Drei? Pff...

    #include <iostream>
    
    const int MAX_SIZE = 5;
    
    int main()
    {
    	int a[MAX_SIZE] = {10, 30, 10, 30, 50};
    
    	unsigned int i;
    	unsigned int count;
    
    	for (i = 0; i < MAX_SIZE; ++i)
    	{
    		count = 0;
    
    		for (unsigned int j = 0; j < MAX_SIZE; ++j)
    		{
    			if (count >= 3)
    			{
    				break;
    			}
    
    			if (a[i] == a[j])
    			{
    				++count;
    			}
    		}
    
    		if (count >= 3)
    		{
    			break;
    		}
    	}
    
    	if (count >= 3)
    	{
    		std::cout << a[i] << std::endl;
    	}
    }
    


  • Ih, das ist ja mit Hilfsvariablen, bäh...



  • Okay, so ist schöner:

    #include <iostream>
    
    int checkOccurence(int *a, unsigned int size);
    
    int main()
    {
    	const int MAX_SIZE = 5;
    
    	int a[MAX_SIZE] = {10, 10, 10, 30, 50};
    
    	int pos;
    	if ((pos = checkOccurence(a, MAX_SIZE)) >= 0)
    	{
    		std::cout << a[pos] << std::endl;
    	}
    }
    
    int checkOccurence(int *a, unsigned int size)
    {
    	for (unsigned int i = 0; i < size; ++i)
    	{
    		unsigned int count = 0;
    
    		for (unsigned int j = 0; j < size; ++j)
    		{
    			if (a[i] == a[j])
    			{
    				if (++count >= 3)
    				{
    					return i;
    				}
    			}
    		}
    	}
    
    	return -1;
    }
    


  • Ist ja immernoch mit "count". Öööööde.... Außerdem werden nicht die Positionen ausgegeben. 😉



  • Fellhuhn schrieb:

    Ist ja immernoch mit "count". Öööööde.... Außerdem werden nicht die Positionen ausgegeben. 😉

    Die Positionen waren auch nicht verlangt.

    Falls man aber tatsächlich auf die Positionen scharf ist, so stellt meine Lösung alle notwendigen Angaben bereit, um diese zu finden.

    Und wie sieht deine Variante aus? Jetzt bin ich neugierig. Was spricht gegen count ?


Anmelden zum Antworten