Problem mit class?



  • Und zwar habe ich folgendes problem. Ich hab eine class geschrieben die auch soweit funktioniert. jetzt habe ich ein methode Häufigkeit (für zahlen) geschrieben.
    int Statistik::MachHaeufigkeit (int i)
    {
    Haufen=0;
    for (int a=0; a<100;a++)
    {
    if (i == Daten(a)) Haufen = Haufen +1;
    }
    return Haufen;
    jetzt will ich die 5 häufigsten zahlen aus geben. und da ist mein problem. Wie mache ich das am besten.
    Ich bedanke mich schon mal für eure mithilfe



  • Irgendwie beist sich das.

    Du übergibst 1 Zahl. Diese Zahl kann nur n mal vorkommen. Wie willst Du daraus die 5 Häufigsten machen ?

    Wenn es darum geht die n Häufigsten Zahlen zwischen X und Y auszuwerten würde ich eine MultiMap nehmen. Als Key die Häufigkeit als Value den Wert. Die Map Sortiert das dann fein für einen und man muß nurnoch vom Rand aus der Map n Elemente ausgeben.

    Beispiel:

    // DelMe3.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include <vector>
    #include <algorithm>
    #include <time.h>
    #include <map>
    #include <iostream>
    
    using namespace std;
    
    class test
    {
    	// pures Füllen des Vectors mit Daten
    	vector<int> vec;
    public:
    
    	test(int nZufallsZahlen = 5000)
    	{
    		for(int i = 0;i<nZufallsZahlen;++i)
    			vec.push_back(rand() % 100);
    	}
    
    	// Möglichkeit 1 mit Normaler map (kleinste Zahl an Anfang)
    	multimap<int,int> Haeufigkeit(int AuswertenVon = 0,int AuswertenBis = 100)
    	{
    		if(AuswertenVon > AuswertenBis)
    			swap(AuswertenBis,AuswertenVon);
    
    		multimap<int,int> helper;
    		for(int i = AuswertenVon;i < AuswertenBis;++i)
    		{
    			int c = count(vec.begin(),vec.end(),i);
    			helper.insert(make_pair(c,i));
    		}
    		return helper;
    	}
    
    	// Hier der Map sagen das sie die größten Zahlen an den Anfang sortieren soll
    	multimap<int,int,greater<int> > Haeufigkeit2(int AuswertenVon = 0,int AuswertenBis = 100)
    	{
    		if(AuswertenVon > AuswertenBis)
    			swap(AuswertenBis,AuswertenVon);
    
    		multimap<int,int,greater<int> > helper;
    		for(int i = AuswertenVon;i < AuswertenBis;++i)
    		{
    			int c = count(vec.begin(),vec.end(),i);
    			helper.insert(make_pair(c,i));
    		}
    		return helper;
    	}
    
    };
    
    template <class T>
    void ausgeben_von_vorne( const T & mymap,int die_ersten_n_zahlen)
    {
    	T::const_iterator pos = mymap.begin();
    	for(int i = 0;i<die_ersten_n_zahlen;++i,++pos)
    		cout<<"Die Zahl "<<pos->second<< " kommt "<< pos->first<<" mal vor\n";
    }
    
    template <class T>
    void ausgeben_von_hinten( const T & mymap,int die_ersten_n_zahlen)
    {
    	T::const_reverse_iterator pos = mymap.rbegin();
    	for(int i = 0;i<die_ersten_n_zahlen;++i,++pos)
    		cout<<"Die Zahl "<<pos->second<< " kommt "<< pos->first<<" mal vor\n";
    }
    
    int main(int argc, char * argv[])
    {
    
    int counter = 0;
    int AuswertenVon = 0;
    int AuswertenBis = 0;
    
    	// Initialisieren des Zufallsdingens
    	srand(time(NULL));
    
    	// Instanz von test anlegen
    	test t;
    
    	cout<<"Geben Sie an wieviele Zahlen als Häufigste / Seltenste ausgegeben werden sollen\n";
    	cin>>counter;
    
    	cout<<"Geben Sie an von welchem Wert aus diese Betrachtung erfolgen soll ( z.B. 0) ";
    	cin>>AuswertenVon;
    
    	cout<<"Geben Sie an bis zu welchem Wert diese Betrachtung erfolgen soll ( z.B. 100) ";
    	cin>>AuswertenBis;
    
    	// ne Normale Map holen die mit der kleinsten Zahl nach vorne Sortiert ist
    	// und die 5 Häufigsten Zahlen
    	multimap<int,int> result ( t.Haeufigkeit(AuswertenVon,AuswertenBis) );
    	multimap<int,int,greater<int> > result2 ( t.Haeufigkeit2(AuswertenVon,AuswertenBis) );
    
    	cout<<"Die Häufigsten"<<counter<<"  Zahlen:\n";
    	cout<<"ausgeben_von_hinten(result,counter);\n";
    	ausgeben_von_hinten(result,counter);
    	cout<<"\nausgeben_von_vorne(result2,counter);\n";
    	ausgeben_von_vorne(result2,counter);
    
    	cout<<"\n\n";
    	cout<<"Die seltensten"<<counter<<"  Zahlen:\n";
    	cout<<"ausgeben_von_hinten(result2,counter);\n";
    	ausgeben_von_hinten(result2,counter);
    	cout<<"\nausgeben_von_vorne(result,counter);\n";
    	ausgeben_von_vorne(result,counter);
    
    	return 0;
    }
    

Anmelden zum Antworten