Häufigkeit in einem Array finden



  • Hallo

    Aufgabenstellung:
    Erstellen sie ein Programm das ein Array mit 10 Elementen Initi 0-10.
    die Häufigkeit der Zahlen 1-10 sollen ermittlet, in einem weiterem Array gespeichert und
    anschließend ausgegeben werden.

    #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    int hanzal(int a1[10], int a2[11])
    {
    int counter=1;
    int counter_n=0;
    
    for(int y=0; y<10; y++)
    {
    	for(int x=1+y; x<10; x++) 
    	{
    		if(a1[y] == a1[x])
    		{	
    	         //0,1,2,3,4,5,6,7,8,9
    		//	a2[y] = a1[x];          //2
    	       //0,1,2,3,4,5,6,7,8,9
    			a2[y] = ++counter;
    
    		}
    	}
    }
    
    return 0;
    }
    
    int main()
    {                    //0,1,2,3,4,5,6,7,8,9
    	int zfszahlen[10]={7,3,5,2,8,2,9,2,4,2};
    	int zahlen[11];
    	int count=0;
    	int zcount=1;
    
    	for(int ini=0; ini<10; ini++)
    		zahlen[ini] = 0;
    
    //	cout<<endl<<"Ihre Zufallszahlen werden generiert."<<endl;
    
    //	for(int zfsz=0; zfsz<10; zfsz++) { zfszahlen[zfsz] = rand() % 10;}
    
    /*	cout<<endl<<"..."<<endl;
    
    	for(int loop=0; loop<2; loop++)
    	{
    		for(int zfszout=0; zfszout<10; zfszout++)
    		{
    			cout<<endl<<zfszahlen[zfszout];
    		}
    
    		cout<<endl<<"****";
    	}
    */
    
    	hanzal(zfszahlen, zahlen);
    
    	cout<<endl<<"Die Zufallszahlen sind:"<<endl;
    
    	for(int x=0; x<11; x++){
    		cout<<"\nZahl: "<<zahlen[x]<<endl;
    	    cout<<"Haufigkeit: "<<zahlen[x+1];
    	}
    
    	return 0;
    }
    

    Ich habe in der oberen Schleife folgendes Problem.
    Bei erstem Vergleichem bekomme ich den richtigen wert.
    Wenn er zur nächsten doppelten Zahl kommt, denkt er es wären weitere doppelte zahlen vorhanden.

    Und gibt einfach nur noch blödsinn aus...

    Einfach mal im Gedanken nachfolziehen.

    Kann mir jemand das Programm korriegieren ?

    Danek



  • versuch mal, die beiden arrays in abhängigkeit zu setzen..

    in die schleife sowas...
    a2[a1[y]] ++;

    damit zählst du immer an der richtigen stelle eins hoch..



  • Hi

    Sowas haben wir noch nicht gemacht,
    Das muss anders gehen.

    Wer kann den C++ hier ?

    Gruß

    JM



  • C++ können? Hier? Im C++-Forum?

    Ich kann dir nur sagen, dass das kein Hausaufgabenforum ist, wir geben gerne Tipps oder Antworten zu konkreten Fragen, allerdings erledigen wir nicht die Hausaufgaben, die sind ja gerade zum Nachdenken gedacht, wie lange hast du dran gesessen?

    MfG MAV

    PS: elise gab dir praktisch schon die Lösung, versuche diese jetzt zu verstehen, dann kannst du sie guten Gewissens verwenden. 🙂



  • template <class T>void hanzal(T *a1,T* a2,int n){for(;--n+1;++a1)++a2[*a1-1];}
    


  • Kannst du das mal bitte auf meine Aufgabe übertragen.
    Ich kann ja auch nicht mit etwas kommen was nur Bill Gates versteht.

    Also bitte nur das was man auch im level dieser Aufgabe versteht.

    Ansonsten brauchst du dir keine Mühe oder Gedanken zu machen.
    Spar dir die Diskussion die jetzt von dir kommt ;)=



  • hallo

    dein array kann als index locker einen wert eines anderen arrays annehmen, so wie ich es zeigte.
    teste es einfach mal.

    es passt übrigens perfekt zu deinem lernlevel. ihr hattet schließlich arrays. vermutlich sollt ihr auf eine solche lösung selbständig kommen.

    so long



  • Danke



  • #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    
    void untersuchen(int a3[10], int a4[10], int a5[10])
    {
    	int zaehler=0;
    	int counter=1;
    cerr<<"A";
    	for(int a=0; a<10; a++)
    	{
    		cerr<<"B";
    		//************************************
    		if(a4[zaehler] != a3[a])
    			for(int b=1; b<10; b++)
    				{
    					if(a3[a] == a3[b])
    					a4[zaehler] =  a3[b];
    					a5[zaehler] = ++counter;
    				zaehler++;
    			}
    		//************************************
    	}
    cerr<<"C";
    }
    
    int main()
    {
    
    	int a1[10] = {7,3,5,2,8,2,9,2,4,2};
    	int a2[10] = {11,11,11,11,11,11,11,11,11,11};
    	int a6[10];
    
    	cout<<"\nDie Zahlen werden untersucht";
    
    	untersuchen(a1,a2,a6);
    
    	for(int x=0; x<11; x++)
    	{
    		cout<<"\nZahle: "<<a1[x]<<"\tHäufigkeit: "<<a2[x];
    	}
    
    	return 0;
    }
    

    Weisst du warum da Programm nicht geht ?

    Ist dringend 😉 🕶



  • Wenn ich nicht ganz falsch liege, übergibst Du die Arrays als Kopie an die Funktion untersuchen. Darin werden sie geändert und gehen dann verloren, wenn die Funktion durchgelaufen ist.
    Hattet ihr schon Referenzübergabe an Funktionen? Damit übergibst Du nur die Adresse des Arrays und arbeitest dann in der Funktion mit dem Original weiter.

    Gruß,
    MTE.



  • Kannst du das Program zum Laufen bringen ?
    Schreibe das Programm mal zu Ende.

    so das es geht.
    Referenzen hatten wir auch.

    Aber wenn es auch ohne geht wäre das nicht schlecht.



  • also wenn ich richtig verstanden habe was du haben willst (also zahlen von 1-10) sind in nem array und in dem anderen 10er array sollen die häufigkeiten dieser zahlen stehen dann funzt das doch so wie ich dir gepostet hab

    #include <iostream>
    
    template <class T>void hanzal(T *a1,T* a2,int n){for(;--n+1;++a1)++a2[*a1-1];}
    
    int main(){
    int a1[10]={3,2,4,1,5,6,7,8,6,1};
    int a2[10]={0,0,0,0,0,0,0,0,0,0};
    
    hanzal(a1,a2,10);
    
    for(int i=0;i<10;++i)std::cout<<a2[i]<<std::endl;
    
    }
    


  • menno, wieso machst du es nicht wie gesagt?

    letzer versuch, dir das zu sagen:

    array 1: zum bleistift

    3 3 3 7 7 3 3 3 3 7

    array 2: obere reihe der index, unten die initialisierung mit null

    0 1 2 3 4 5 6 7 8 9 (index)
    0 0 0 7 0 0 0 3 0 0 (inhalt an index)

    deswegen immer beim finden eins hochzählen, vorher auf 0 stellen.

    a2[ a1[y] ] ++;

    so. eine schleife bauen.. da hast du ja schon zur genüge



  • #include <iostream>
    using namespace std;
    
    //Erstellen sie ein Programm das ein Array mit 10 Elementen Initi 0-10. 
    //die Häufigkeit der Zahlen 1-10 sollen ermittlet, in einem weiterem Array gespeichert und 
    //anschließend ausgegeben werden.
    
    int main()
    {
    	//eingabe
    	//eringabe gespart, habe einfach feste werte genommen.
    	int zahlen[10]={7,3,5,2,8,2,9,2,4,2};//index von 0 bis 9
    
    	//verarbeitung
    	int count[12]={0,0,0,0,0,0,0,0,0,0,0};//index von 0 bis 11, 
    		//die 0 wird nicht benutzt, sondern ich benutze nur 1 bis 11
    
    	for(int i=0;i<10;i=i+1)//schleife läuft von 0 bis 9
    	{
    		int zahl=zahlen[i];//zahl liegt zufällig zwischen 1 und 10
    		count[zahl]=count[zahl]+1;//das hier ist elises trick!
    	}
    
    	//ausgabe
    	cout<<"zahl"<<'\t'<<"anzahl"<<endl;
    	for(int zahl=1;zahl<11;zahl=zahl+1)//schleife läuft von 1 bis 10
    	{
    		cout<<zahl<<'\t'<<count[zahl]<<endl;
    	}
    
    	return 0;
    }
    


  • count[zahl]=count[zahl]+1;//das hier ist elises trick!
    *lol*
    hört sich ja fast so an als ob sie/er was völlig neues erfunden hätte... das schreit ja danach sich das patentieren zu lassen um von jedem der das verwenden will Kohle abzugreifen:D



  • au ja... leider hat mein algorithmenprof dann sicher was dagegen 😞

    dabei wäre geld grad nett 🙂



  • ehre, wem ehre gebührt.



  • #include <algorithm>
    
    int main(int argc, char* argv[])
    {
       int zfszahlen[10]={7,3,5,2,8,2,9,2,4,2};
       int co[10];
       for(int i=0;i<10;i++)
       {
          co[i]=count(zfszahlen,zfszahlen+10,i+1);
          cout << i+1 << " " << co[i] << endl;
       }
       return 0;
    }
    


  • Dieser Beitrag wurde gelöscht!

Anmelden zum Antworten