mit welchen eingaben...



  • wie kann ich denn testen wie oft eine zahl in 10 eingegebenen zahlen vorkommt?
    in einem c++ programm...



  • Du gibst alle Zahlen in ein Array oder std::vector<> ein und jagst dann einmal std::count da drüber.



  • wie geht des mit dem count??

    hab die eingabe fertig... aber komm jetzt überhaupt net weiter...



  • count() ist ein Algorithmus der C++ Standardbibliothek - dem übergibst du zwei Iteratoren (Zeiger) auf den Anfang und das Ende deiner Eingabedaten sowie einen Vergleichswert, und erhältst als Rückgabe, wie oft der Vergleichswert in den Daten vorkommt.



  • vector<int> v;
     for( int i = 0; i < 10; i++ ) {
       v.push_back( i );
     }              
    
     int target_value = 3;
     int num_items = count( v.begin(), v.end(), target_value );             
    
     cout << "v contains " << num_items << " items matching " << target_value << endl;
    

    Ist das Beispiel von http://www.cppreference.com/cppalgorithm/count.html

    Zufall? 😉



  • hmm ok...

    der anfang und des ende sind die erste und letzte zahl??



  • Du musst der Funktion schon einen Iterator übergeben. Die gibt es nur bei Container-Klassen der STL. .begin() liefert einen Iterator auf das erste Element und .end() einen Iterator der "hinter" das letzte zeigt, also auf kein gültiges Element.

    Ohne vector mit einem Array würde das so aussehen:

    int numbers[10]; 
    int key = 4; // die gesuchte Zahl
    // ... hier füllen ...
    
    int count = 0;
    for(int i = 0; i < 10; i++){
      if (numbers[i] == key) count++;
    }
    

    Fertig.



  • Jens Friedrich schrieb:

    der anfang und des ende sind die erste und letzte zahl??

    Der Anfang ist ein Zeiger auf das erste Array-Element, das Ende ein Zeiger hinter das letzte Element (die STL arbeitet mit halboffenene Intervallen, weil da einige Definitionen einfacher sind).



  • was hat des mit dem vektor < > auf sich??

    kann ich des auch mim array machen??



  • muss ich des noch in irgendeine schleife einbinden... bei mir funtz immer noch net..

    #include <iostream>
    using namespace std;

    int main (void)
    {
    int Zahl[10], i = 0, k, b;
    double a;

    while (i<10)
    {
    cout << "Bitte " << i+1 << "te Zahl eingeben" << endl;
    cin >> a;

    b = ((int)a);

    if(a < 10 || a != b)

    cout << "Die eingegebene zahl ist zu klein, versuchen Sie es erneut." << endl;

    else if(a > 20)

    cout << "Die eingegebene Zahl ist zu groß, versuchen Sie es erneut." << endl;

    else if(a !=b)

    cout << "Die eingegebene Zahl ist keine ganze Zahl, versuchen Sie es erneut." << endl;

    else
    {
    Zahl[i] = b; i++;
    }
    }

    int key = 10; // die gesuchte Zahl
    // ... hier füllen ...

    int count = 0;
    for(int i = 0; i < 10; i++){
    if (Zahl[i] == key) count++;

    }
    }



  • Jens Friedrich schrieb:

    was hat des mit dem vektor < > auf sich??

    kann ich des auch mim array machen??

    Klar kannst du - aber mit einem vector<> bist du flexibler (schau mal in deinem C++ Buch nach, da gibt's bestimmt eine Erklärung).

    PS: Wie äußert sich denn dieses "funzt immer noch nicht"?



  • ja also die eingabe funktioniert... aber des nit dem zählen noch net... finde aber keinen fehler...

    hab den quelltest ja jetzt hier ma reingeschtellt... vielleicht findet ihr was...



  • Jens Friedrich schrieb:

    ja also die eingabe funktioniert... aber des nit dem zählen noch net... finde aber keinen fehler...

    Was genau funktioniert denn an der Zählung noch nicht? Und warum verwendest du nicht die Standard-Funktionen dafür:

    int ct = std::count(Zahl,Zahl+10,key);
    


  • also ich will aus 10 Zahlen jeweils wissen wie oft eine zahl vorkommt...

    BSP:
    10,10,10,11,11,12,12,13,17,12
    10 = 3mal
    11 = 2mal
    12 = 3mal
    13 = 1mal
    17 = 1mal

    aber bei mir springt er immer nach der eingabe aus dem programm...

    was mach ich falsch??



  • Wenn du mehrere Werte zählen willst, mußt du das in einer eigenen Schleife erledigen:

    do
    {
      cin>>key;
      if(key>0)
      {
        int ct = count(...);
        cout<<key<<" kommt "<<ct<<" mal vor."<<endl;
      }
    }
    while(key>0);
    


  • key ist in dem fall die zahl von der ich wissen will wie oft sie vorkommt??



  • Jens Friedrich schrieb:

    key ist in dem fall die zahl von der ich wissen will wie oft sie vorkommt??

    Ja, aber das war sie doch schon in deinem letzten Code.



  • kann mir jemand sagen wo hier noch ein fehler steckt wenn ich auflisten will wie oft jede eingegeben Zahl vorkommt...
    #include <iostream>
    using namespace std;

    int main (void)
    {
    int Zahl[10], i = 0, k, b, key;
    double a;

    while (i<10)
    {
    cout << "Bitte " << i+1 << "te Zahl eingeben" << endl;
    cin >> a;

    b = ((int)a);

    if(a < 10 || a != b)

    cout << "Die eingegebene zahl ist zu klein, versuchen Sie es erneut." << endl;

    else if(a > 20)

    cout << "Die eingegebene Zahl ist zu groß, versuchen Sie es erneut." << endl;

    else if(a !=b)

    cout << "Die eingegebene Zahl ist keine ganze Zahl, versuchen Sie es erneut." << endl;

    else
    {
    Zahl[i] = b; i++;
    }
    }

    do
    {
    cin>>key;
    if(key>0)
    {
    int ct = count(Zahl[i]);
    cout<<key<<" kommt "<<ct<<" mal vor."<<endl;
    }
    }
    while(key>0);
    }



  • #include <map>
    ...
    
    using namespace std;
    
    ...
    
    map<int,int> count;
    for(int i = 0; i < 10; i++){
      count[Zahl[i]]++;
    }
    
    map<int,int>::iterator iter;
    for(iter = count.begin(); iter != count.end(); ++iter){
      cout << iter->first << " kommt " << iter->second << " mal vor" << endl;
    }
    


  • des is doch aber wieder mit vector <> oder??

    muss des aber mim array machen..



  • Wenn du für alle Werte in deinem Zahlenbereich zählen mußt, sieht die Schleife etwas anders aus:

    for(int key=10;key<=20;++key)
    {
      int ct=std::count(Zahl,Zahl+10,key);//oder deine selbstgeschriebene Zählschleife
      if(ct>0) cout<<key<<"-"<<ct<<endl;
    }
    

Anmelden zum Antworten