Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Anzahl verschiedener Zahlen in einem Array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
07.06.2003, 19:47 Uhr
Dirk22



Hi, ich möchte folgendes Problem lösen.
Ich habe ein Array, welches nur positive Ganzzahlen und Nullen enthält. Nun möchte ich herausfinden, wieviele verschiedene Zahlen in diesem Array sind. Wenn eine 0 im Array vorkommt, so soll diese nicht zur Anzahl verschiedener Zahlen hinzuzählen, sondern ignoriert werden.

Am besten mache ich mal ein paar Beispiele:

0,0,5,7,5,3,2 Lösung 4 (verschiedene Zahlen: 2,3,5 und 7)

4,0,4,4,4,4,4 Lösung 1(da nur 4)

3,4,5,0,3 Lösung 3(da 3,4 und 5)

Ich habe mir nun auch schon Gedanken auf dem Papier über dieses Problem gemacht. Aber ich glaube, dass es viel geschickter geht.

Wie würdet ihr dieses Problem lösen?

Vielen Dank im Voraus

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.06.2003, 20:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Beispiel:

C++:
#include <iostream>
#include <set>
#include <vector>
#include <cstdlib>
#include <iterator>
#include <algorithm>

int main()
{
    std::vector<unsigned> zahlen;
    std::set<unsigned> zaehler;

    std::srand(time(NULL));

    // Baue Zahlenfolge auf
    for(int i=0; i<10; ++i)
    {
        zahlen.push_back(rand()%20);
    }

    // Gebe zur kontrolle die Zahlenfolge auf den Bildschrim aus
    std::copy(zahlen.begin(), zahlen.end(), std::ostream_iterator<unsigned>(std::cout, " "));
    std::cout<<std::endl;

    // Der eigentlich interessante teil:
    for(std::vector<unsigned>::const_iterator i=zahlen.begin(); i!=zahlen.end(); ++i)
    {
        zaehler.insert(*i);
    }
    zaehler.erase(0); // 0 nicht berücksichtigen
    std::cout<<zaehler.size()<<" verschiedene Zahlen!"<<std::endl;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.06.2003, 21:16 Uhr
~0xdeadbeef
Gast


Oder, ums gleich zu kapseln:

C++:
#include <vector>
#include <set>

template<class typ> int verschiedene_zahlen(std::vector<typ> v) {
    std::set<typ> s;
    for(int i = 0; i < v.size(); ++i)
      s.insert(v[i]);
    s.erase(0);
    return s.size();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.06.2003, 09:13 Uhr
Dirk22



Hi,

erstmal vielen Dank für eure Antworten. Die Idee mit der Menge ist natürlich super. Dadurch wird alles ganz leicht. Ich habe das Ganze mal mit meinem Problem ausprobiert, und es funktioniert auch. Leider bekomme ich 11 Warnungen.

Ich habe folgendes gemacht:
Ich hatte zu Anfang ein BYTE-Array gegeben welches die Grösse 6 hat.

C++:

BYTE zahlen[6]; //BYTE-Array wurde danach schon noch mit Werten gefüllt
int Anzahl;
std::set<BYTE> zaehler;
for(i = 0; i <= 6; i++)
{
      zaehler.insert(zahlen[i]);        
}
zaehler.erase(0);
Anzahl = zahlen.size();



Hier sind die Warnungen, die ich bekomme:
warning C4786: 'std::reverse_bidirectional_iterator<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::
allocator<unsigned char> >::iterator,unsigned char,unsigned char &,unsigned char *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
warning C4786: 'std::reverse_bidirectional_iterator<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::
allocator<unsigned char> >::const_iterator,unsigned char,unsigned char const &,unsigned char const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
warning C4786: 'std::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >
::iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator>' : Bezeichner wurde auf '255' Zeichen in den
Debug-Informationen reduziert
warning C4786: 'std::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >
::const_iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::const_iterator>' : Bezeichner wurde auf '255' Zei
chen in den Debug-Informationen reduziert
warning C4786: 'pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned
char> >::iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned ch' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
cprogramme\msvisualstudio\vc98\include\xtree(376) : Bei der Kompilierung der Member-Funktion 'unsigned int __thiscall std::_Tree<unsigned char,unsigned char,struct std::set<unsigned char,struct std::less<unsigned char>,class std::allocator
<unsigned char> >::_Kfn,struct std::less<unsigned char>,class std::allocator<unsigned char> >::erase(const unsigned char &' der Klassenvorlage
warning C4786: 'std::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsi
gned char> >::iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator>' : Bezeichner wurde auf '255' Zei
chen in den Debug-Informationen reduziert
cprogramme\msvisualstudio\vc98\include\xtree(376) : Bei der Kompilierung der Member-Funktion 'unsigned int __thiscall std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_
Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::erase(const unsigned char &' der Klassenvorlage
cprogramme\msvisualstudio\vc98\include\xtree(182) : warning C4786: 'std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char>
>::~_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen ve
rkürzt
cprogramme\msvisualstudio\vc98\include\xtree(162) : warning C4786: 'std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char>
>::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen ver
kürzt
cprogramme\msvisualstudio\vc98\include\utility(21) : warning C4786: 'std::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<uns
igned char> >::iterator,bool>::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator,bool>' : Bezeichner w
urde auf '255' Zeichen in den Debug-Informationen verkürzt
cprogramme\msvisualstudio\vc98\include\utility(21) : warning C4786: 'std::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<uns
igned char> >::iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator>::pair<std::_Tree<unsigned char,u
nsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned ch
ar>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
cprogramme\msvisualstudio\vc98\include\utility(119) : warning C4786: 'std::pair<std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<un
signed char> >::iterator,std::_Tree<unsigned char,unsigned char,std::set<unsigned char,std::less<unsigned char>,std::allocator<unsigned char> >::_Kfn,std::less<unsigned char>,std::allocator<unsigned char> >::iterator>' : Bezeichner wurde auf '255' Z
eichen in den Debug-Informationen verkürzt

Ach übrigens, ich habe diesen Code in einem MFC-Projekt angewendet, welches von CFormView abgeleitet wurde. Nur falls das eine Rolle spielt.

Vielen Dank im Voraus

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.06.2003, 10:29 Uhr
virtual
Sexiest Bit alive
(Operator)


Das ist ein Compiler Problem Deines VC. Du kannst mit der entprechenden pragma Anweisung diese Warning disablen, weil sie keinem weh tut.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.06.2003, 11:52 Uhr
Dirk22



Hi,

es hat geklappt, allerdings wurden nur die Warnungen entfernt, die sich auf mein cpp-File bezogen haben, denn dort habe ich ja auch den folgenden Befehl reingeschrieben:


C++:
#pragma warning ( disable : 4786 )


Wie kann ich z.B. eine Warnung entfernen, die sich auf cprogramme\msvisualstudio\vc98\include\utility(119) bezieht?

Vielen Dank im Voraus

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.06.2003, 12:38 Uhr
virtual
Sexiest Bit alive
(Operator)


Du mußt das pragma am Anfang des Programms einbauen, bereits vor deb Includes. Jedenfalls würde ich das erwarten, ich verschieb Dich mal zu den Profis.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.06.2003, 14:25 Uhr
Dirk22



Ich habe es nun in die stdafx.cpp reingeschrieben. Und bisher scheint es zu klappen.

Wo sind diese Profis? Wo wird dieser Thread nun weiter angezeigt?

mfg

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.06.2003, 14:32 Uhr
Dirk22



Ok, habe verstanden. Hier sind die Profis und hier im MFC/VC++ Forum wird der Thread weiter angezeigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.06.2003, 15:43 Uhr
virtual
Sexiest Bit alive
(Operator)


Genau. Du kannst Davon ausgehen, daß in einem Forum, wo es um den VC geht, dir eher einer ne Antwort geben kann. Ich verwende den VC zwar auch, aber nur dann, wenn es sein muß. Die Jungs in diesem Forum tun es tatsächlich freiwillig.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: