Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » variable Mengen in C++

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 ] [ 3 ] [ 4 ] [ 5 ]
000
12.07.2003, 21:09 Uhr
~Jerome83
Gast


Hallo erstmal.

Das hier ist (hoffentlich" meine Rettung "im letzten Moment"...

ich muss in ein paar Tagen einen Programmentwurf schaffen mit folgender Problematik:

Ein Anwender soll in ein Programm 2 Mengen eingeben (Menegnelemente ganze Zahlen also INTEGER)
Und dann sollen ein paar Funktionen durchgeführt werden: Schnittmenge, Teimenge, Mengenvergleich.
Soweit sogut. Ich würde das ja mit Feldern machen aber das Problem ist das man vorher nicht weiß wieviele Elemente die Felder haben... Also ein dynamisches Feld, jeder Anwender kann also festlegen wie viele Elemente er eingeben will (pro Menge).
Ich habe keine Ahnung wie ich das auf die Reihe bekommen soll.

Das ganze soll in Form von Klassen passieren.
Und ein Konstruktor soll beim Eingeben der Feldelemente behilflich sein.

Irgendwelche Lösungsvorschläge, Anmerkungen, Quelltexte oder Programmbeispiele für die Lösung meiner Probleme?

Ich wäre sehr dankbar, ich weiß noch nichtmal wieviele Klassen ich überhaupt brauche.

Man man man, ich verzweifel hier noch...

Vielen vielen Dank schonmal im Voraus!

Ciao, Jerome.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.07.2003, 21:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
ich würde für dynamische Felder std::vector benutzen, such einfach in diesem forum danach, beispiele gibts viele
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.07.2003, 21:41 Uhr
~Jerome83
Gast


also wenn ich das als suchbegriff hier im forum eingebe findet er nix dazu...

kannst du std::vector mal erläutern???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.07.2003, 22:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


also wenn ich Suchbegriff "vector" eingebe, findet er ziemlich viele Einträge, z.b

www.fun-soft.de/forum/showtopic.php?threadid=2684
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.07.2003, 22:45 Uhr
~Jerome83
Gast


danke, klingt schonmal gut.

für mein problem wäre also eine verketette liste die beste lösung, wie ich meine. das haben wir auch behnadelt aber:

wie kann ich eine Meneg von Zahlen in form einer verketteten liste darstellen?
kann mir da mal jemand nen wuelltext anbieten???

wäre super.

danke, jerome.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.07.2003, 07:23 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn es eine Menge von Zahlen im Mathematischen Sinne sein sollte, dann ist eigentlich std::set die richtige Wahl: std::set paßt auf, daß keine Element doppelt auftaucht und - als kleines Bonbon - sortiert die Element der Menge.

Einfügen tut man mit insert, entfernen mit erase und prüfen, ob ein Element vorhanden ist mit find. Dazu gibt es noch einige STL Algorithmen, die Dir helpfen können bei Schnittmengenbildung usw.
--
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
006
13.07.2003, 08:16 Uhr
~Jerome83
Gast


die ganzen template klassen sollte ich lieber nicht verwenden, die haben wir nie behandelt, dann sieht der sofort das ich das hier net allein gemacht hab...das wäre schlecht...

ich brauch einfach ne verkettete liste, das haben wir mal gemacht, aber ich hab keine ahnung wie das in c++ -quelltext aussieht. hat einer mal ein beispiel oder einen kompletten quelltext zu dem thema???

wäre super

vielen dank,jerome.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.07.2003, 09:17 Uhr
Oliver
S2-Pixelgeneral


Hallo,

meinst du sowas:


C++:
include <iostream>
using namespace std;

class Menge
{
    int* elemente;
    int anzahl;
public:
    Menge();
    ~Menge(){delete [] elemente;}
    Menge(const int elements[],const int &anzahl);
    Menge(Menge &vorh);
    void Add(int element);
    Menge Schnittmenge(Menge &meng2);
    int GetAnzahl();
    int GetElemente(const int &index);
    // ...
};




Menge::Menge(const int elements[],const int &anzahl2)
{
    elemente=new int[anzahl2];
    anzahl=anzahl2;
    for(int i =0;i<anzahl;i++)
        elemente[i] = elements[i];
    anzahl = anzahl2;
}

Menge::Menge()
{
    elemente=0;
    anzahl=0;
}

int Menge::GetAnzahl()
{
    return anzahl;
}

int Menge::GetElemente(const int &index)
{
    return elemente[index];
}

Menge::Menge(Menge &vorh)
{
    anzahl = vorh.GetAnzahl();
    elemente = new int[anzahl];
    for(int i =0;i<anzahl;i++)
        elemente[i] = vorh.GetElemente(i);
}



void Menge::Add(int element)
{
    Menge merke(*this);
    anzahl++;
    elemente= new int[anzahl];
    for(int i = 0;i<anzahl-1;i++)
        elemente[i]=merke.GetElemente(i);
    elemente[anzahl-1]=element;
}




/*Menge Menge::Schnittmenge(Menge &meng2)
{
    Menge erg;
    for(int z =0;z<meng2.GetAnzahl();z++)
     for(int i = 0;i<anzahl;i++)
         if(elemente[i] == meng2.GetElemente(z)) erg.Add(elemente[i]);
    return erg;
}*/


// Das geht nicht...




Die Schnittmenge geht leider nicht.
Da hab ich irgendwas falsch gemacht.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.07.2003, 11:30 Uhr
~Jerome83
Gast


Super Sache die du da gemacht hast. Wie es aussieht hattest du wohl mal ne ähnliche Aufgabe...

Könntest du mir mal die einzelnen Zeilen deiner Klasse erklären? verstehe das alles nicht wirklich... ich hoffe du kannst mir helfen.....danke schonmal.

erklär doch bitte mal warum du einen zeiger auf einen integer wert namens "elemente" definierst, wozu braucht man den später???
Menge(); ist der konstruktor, richtig?
~Menge..... ist der destruktor, richtig?
so, und dann gehts los, die weiteren zeilen des public bereichs sind mir unklar...
bitte bitte mach dir die mühe, du bist immerhin der erste der eine lösung für mein problem überhaupt erstmal parat hat...
danke danke!!!

ciao, Jerome.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.07.2003, 12:46 Uhr
Oliver
S2-Pixelgeneral


Nein, hab so was nicht gehabt, hab ich mal schnell so zusammengestellt.
(wollt sowieso schon mal so ne Mengenklasse machen )

Also:

Erst einmal sind im privaten Bereich der Klasse ein Int-Zeiger deklariert.
Das könnte man auch so schreiben:


C++:
int elemente[];



Es ist also ein dynamisches Array, weil ja die Anzahl der Elemente dynamisch sein soll.
Dann ist noch ein int variable deklariert (die anzahl der Elemente).

So dann gibts es drei Konstruktore:

-den Default Konstruktor
-den "normalen" Konstruktor
-den Copy Konstruktor

Default-Konstruktor:

Dieser wird immer aufgerufen, wenn man schreibt:

C++:
Menge menge;



Also immer wenn keine Parameter übergeben werden.
Dieser initialisiert den Zeiger mit 0 und auch die Anzahl der Elemente mit 0.

"normaler" Konstruktor:

An diesen Konstruktor werden 2 Parameter übergeben.
Einmal ein Intarray (das sind im Prinzip die verschiedenen Elemente) und dann noch die Anzahl er Elemente.

Dann wird mit new so viel Speicher belegt wie es nötig ist, also die Anzahl der Elemente.
Jetzt wird die anzahl aktualisiert.
Dann wird in der Forschleife jedes einzelne Element, den Elementen der Menge zugewiesen:


C++:
elemente[i]=elements[i];


Das letzte (anzahl=anzahl2) ist doppelt gemoppelt, kann weg, weil es ja oben schon ist.

Copy Konstruktor:

Wie der Name schon sagt, wird hier praktisch eine Kopie angefertigt.
Also er wird immer aufgerufen wenn man folgendes schreibt:


C++:
Menge menge1;
Menge menge2[b](menge1)[/b] // menge2 ist dann menge1



Der Rest ist im Prinzip ist das das selbe, wie der normale Kontruktor,bloß dass die Anzahl mit GetAnzahl geholt werden muss.


So, dann gibt es noch den Destruktor, wo der Speicherbereich mit delete gelöscht wird.

Die Funktion GetAnzahl erklärt sich von alleine, da wird die Anzahl zurückgegeben.

Die Funktion GetElement ist eigentlich auch klar, da wird das gewünscht Element mit dem Index index zurückgegeben, der als Parameter übergeben wurde.


Das "komplizierteste" ist eigentlich die Funktion Add.
Hier wird ein Element hinzugefügt.

Als Parameter wird das gewünschte Element, was hinzugefügt werden soll, übergeben.

Dann wird eine Menge angelegt. Diese dient als Zwischenspeicher, wenn der neue Speicher allockiert wird.
Als Parameter wird der Inhalt (*) von this übergeben.
this ist ein Zeiger auf die Instanz, die die jeweilige Memberfunktion ausgelöst hat.
Jeztz wird er CopyKonstruktor bemüht der eine Kopie herstellt.
Dann wird noch die anzahl mit anzahl++; um eins erhöht, weil ja ein neues Element dazu kommt.
Dann wird wieder mit new der benötigte Speicherplatz allockiert.
Nun sind aber alle Elemente wieder weg.
Aber dazu haben wir ja eine Kopie angefertigt.
Nun werden schließlich alle Elemente wieder aufgefrischt.

Zum guten Schluss wird nun noch das Element dem letzten index zugewiesen.


Ich hoffe du hast es eingermaßen verstanden
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]     [ C / C++ (ANSI-Standard) ]  


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: