PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mengen in C++ (PE)



LigaNL
21-06-2003, 09:07
hallo.

vorneweg möchte ich mal erläutern das ich im 2. semester wirtschaftsinformatik studiere und wir nun C++ haben (vorlesung).

nun sollen nwir bis zum 20.07. einen programmentwurf machen bei dem ich keinerlei vorstellung habe wie ich rangehen soll.

folgendes:

Thema: Mengen

es geht darum das man 2 variabel große mengen eingeben soll. das programm soll eine mengenvereinigung und den mengendurchschnitt "machen können". ausserdem ein vergleich ob beide mengen identisch sind.

das programm soll einen konastruktor und einen destruktor beinhalten, was wir zuletzt durchgenommen haben.

da ich das ganze c++ sehr sehr schwierig finde und keine ahnung habe wie ich da jetzt rangehe hoffe ich auf eure hilfe!!!

also bitte, wer kann mir sagen wie ich da rangehen muss???

schlecht is natürlich das keiner weiß was ich aus den vorlesungen alles kennen müsste, aber bitte, helft mir!

danke vielmals!

ciao.....

tuxipuxi
21-06-2003, 09:21
hi,

schwierig deine frage zu beantworten :).
brauchst du einen anhaltspunkt wie du das theoretisch machst oder moechtest du jetzt ein codebeispiel?
oder gegenfrage:
was hast du schon probiert?

gruss,

tuxipuxi.

LigaNL
21-06-2003, 09:31
ich brauche erstmal den theoretischen ansatz.

vielleicht hilft mir das weiter.

einfach ne abfolge von den schritten die ich machen muß...

tuxipuxi
21-06-2003, 09:36
hi,

also variabel gross nimmt man ja am besten einen container, z.b. einen vector:
http://www.cppreference.com/cppvector.html

als ansatz:

du koenntest in der mainfunktion deine beiden vektoren einlesen, sie dem konstruktor deiner klasse uebergeben und in der klasse funktionen wie schnittMenge() usw. implementieren, die dir die schnittmenge ausgibt.

der destruktor gibt deine ressourcen, also deine vektoren und was du sonst noch so brauchst wieder frei.


vielleicht koennen wir jetzt ja konkreter werden :).

gruss,

tuxipuxi.

LigaNL
21-06-2003, 09:40
also von containern hab ich nie was gehört. und da wir das nicht gemacht haben würde der dozent sich sehr wundern...
gibts ne andere möglichkeit die mengen einzulesen?

tuxipuxi
21-06-2003, 09:42
hi,

also wenn das wirklich variable mengen sein sollen, muesste es schon ein container sein.
wenn du die moeglichkeit der arrays( z.b. int myArray[10]; ) nehmen wuerdest, waere es ja ein fester index. arrays nehmen als index( in diesem fall 10, also anzahl der elemente ) keine NICHT konstante variable. sprich: du muesstest viel speicher allokieren.

wenn das in ordnung ist fuer dich, koenntest du das ganze halt fuer arrays machen. also 2 arrays mit sagen wir 1000 elementen und dort liest du das ein und uebergibst sie deinem konstruktor.


gruss,

tuxipuxi.

edit: du koenntest natuerlich auch verkettete listen oder so etwas benutzen, aber das ist nun nicht wirklich realitaetsnah.

LigaNL
21-06-2003, 09:51
also container, davon hab ich echt noch nie was gehört...

felder scheiden aus, soll ja ne variable größe haben die menge...

aber die sache mit den verketteten listen wäre ne lösung, das haben wir gemacht. aber nur in c, in c++ nicht. aber darum geht es ihm wohl, das man das anwenden kann...

naja, stellt sich mir nun as nächste problem: wie stelle ich das an???

ciao...

tuxipuxi
21-06-2003, 09:55
hi,

ich halte eine verketette liste fuer unsinn, total ueberfluessig fuer das problem.
arrays waeren halt ne relativ simple loesung gewesen.

aber mal im ernst:
du bist student und nicht schueler, wenn er dir nur sagt WAS er haben will, dann kannst du entscheiden WIE du es machst, und da waeren halt container das richtige. variable groesse, schnell, gute zugriffsfunktionen.
du musst dich erstmal entscheiden was du nun nehmen moechtest.

gruss,

tuxipuxi.

LigaNL
21-06-2003, 10:02
naja, das glaub ich dir gern.


nur nehem ich etwas was wir nicht hatten dann kommen definitiv fragen auf mich zu, die ich, weil ich es ja nicht kenne, nicht beantworten kann.

erklärst du mir die sache so das ich sie richtig kapiere und eventuelle fragen beantworten kann dann könnte ich das ja nehmen.

oder erklär mir die sache container mal und dann werd ich den dozenten am montag mal darauf ansprechen was er aben will, was meinst du?

tuxipuxi
21-06-2003, 10:11
hi,

ich wuerde sagen du spielst mal mit containern rum und stellst dann deine konkreten fragen. ich kann dir beim besten willen jetzt nicht seitenlange postings zu containern schreiben.

gruss,

tuxipuxi.

LigaNL
21-06-2003, 10:19
wenn ich mir das was bei diesem link con dir steht anschaue muss ich leider zugeben das mein englisch bei weitem nicht ausreicht um das übersetzen zu können.

gibt es das auch in deutsch???

wenn nicht dann sollte ich das mal doch lieber mit ner liste probieren...

tuxipuxi
21-06-2003, 10:28
hi,

es tut mir leid, aber langsam werde ich fassungslos. ich bin in der 10. klasse gymnasium und habe keine probleme damit, du bist student!

"Vectors contain contiguous elements stored as an array. Accessing members of a vector or appending elements can be done in constant time, whereas locating a specific value or inserting elements into the vector takes linear time."

Vektoren enthalten nebeneinander angeordnete Elemente die gespeichert werden wie in einem array. Zugriff auf elemente eines vektors oder anhaengen von elementen wird in konstanter zeit verrichtet, wobei das finden eines elements mit einem bestimmten wert und das einfuegen von elementen in den vektor eine lineare zeit benoetigt.

das ist doch nicht schwer.

gruss,

tuxipuxi.

LigaNL
21-06-2003, 10:37
tja, is halt so, bin ne NULL in englisch...

abi is ja auch net so schwer zu bekommen, bruachst ja nur ne 4 zu schaffen und schon biste durch... und studieren kannste dann auch problemlos. will mich hier nicht als "dämlich" outen *g* aber englisch ist ne schwäche von mir...

wenn ich das lese was du übersetzt hast kann ich mir das schon vorstellen, nur bin ich immer mehr der meinung das das so nicht gemacht werden soll. wir sollen in dem programm schließlich das umsetzen was wir gelernt haben, und nicht irgendwas anderes.

sorry, aber ich versuchs mit ner liste.

brauche ich da jetzt ne einfach oder ne doppelt verkettete liste und wie implemetiere ich da eine menge?

danke und ciao.....

tuxipuxi
21-06-2003, 10:44
hi,

dann benutzt du halt eine liste :).
nur ich wuerde nun wirklich nicht versuchen selber eine zum implementieren, versuch lieber eine fertige: http://www.cppreference.com/cpplist.html .

dann hast du deine verkettete liste, musst sie nur nicht selbst machen.
da hast du insert() functions usw. schon drin und brauchst dich nicht selber mit knoten rumschlagen :).

lies dich mal rein und teste code.

gruss,

tuxipuxi.

LigaNL
21-06-2003, 10:51
wobei wir wieder beim englisch wären *grmpf*

die definition einer einfach linear verketteten liste könnte so aussehen, oder?

struct knoten
{

LigaNL
21-06-2003, 10:52
wobei wir wieder beim englisch wären *grmpf*

die definition einer einfach linear verketteten liste könnte so aussehen, oder?

struct knoten
{
int info;
struct knoten *next;
};

ODER?

und wie kann ich jetzt mit hilfe dieser definition 2 mengen definieren?

tuxipuxi
21-06-2003, 10:54
damit haettest du dann einen leeren struct mit einem parse error :).

"Lists are sequences of elements stored in a linked list. Compared to vectors, they allow fast insertions and deletions, but slower random access."

Listen sind sequenzen von elementen, gespeichert in einer verketteten liste. verglichen mit vektoren sind sie schneller beim einfuegen und loeschen, aber langsamer beim zugriff.


gruss,

tuxipuxi.

edit:

hab geschrieben waehrend deines 2. posts.

ja, so koennte es aussehen.

LigaNL
21-06-2003, 11:04
und wie bekomm ich da nun 2 mengen hin?

hab das bisher nie gemacht, muss icheinfach 2 klassen machen?

tuxipuxi
21-06-2003, 11:09
2 instanzen erstellen:



#include <iostream>
#include <list>
using namespace std;

int main( int argc, char* argv[] )
{

list<int> a,b;

}



edit:

jetzt das ganze mit einem mini beispiel:




#include <iostream>
#include <list>
using namespace std;

int main( int argc, char* argv[] )
{

list<int> a,b;

for( int i=0; i < 10; ++i ) {
a.push_back( i );
}

for( int j=10; j > 0; --j ) {
b.push_back( j );
}

for( list<int>::iterator iter = a.begin(); iter != a.end(); ++iter ) {
cout<< *iter << endl;
}

for( list<int>::iterator iter = b.begin(); iter != b.end(); ++iter ) {
cout<< *iter << endl;
}


}



ist nur so lang weils ein beispiel sein soll.

LigaNL
21-06-2003, 11:21
mh, ich glaub das wird nix.

sind wieder ein paar dinge dabei von denen ich nie was gehört habe!!!

list<int> a,b; was bedeutet das???

push_back - nie gehört...

mh, hatte gedacht das wird schon irgendwie gehen, aber wie es aussieht wird das wohl nix werden. das problem is ja das ich das nur mit dem machen will was ich in der vorlesung erzählt bekommen habe, und das muss ja auch damit gehen! neue sachen reinbringen birgt ne menge probleme...

tuxipuxi
21-06-2003, 12:17
hi,

das ist der normalfall beim programmieren. du wirst immer neue sachen entdecken.
vereinfacht:


list<int> a;


legt eine instanz der klasse list mit dem namen a fuer den typ int an.

was push_back macht solltest du wirklich selbst herausfinden koennen.
"push_back() add an element to the end of the list".

BTW moechte ich mal betonen das du student bist und kein schueler :).
der unterschied zwischen schuelern und studenten ist ja wohl auch der, dass schueler frontal was reingeboxt bekommen und es genauso machen muessen und studenten etwas freier arbeiten.

ich weiss auch nicht was ihr gelernt habt, aber es wird wohl kaum bei v. listen stehen geblieben sein.

gruss,

tuxipuxi.

anda_skoa
21-06-2003, 12:37
Ich würde mich vorrangig mal um die Mengeneigenschaften, etc kümmern.
Du kannst ja zuerst mal mit einem Array mit fester Größe arbeiten.

Ich schlage vor, eine Klasse für Mengen zu schreiben, die dann Methoden zum hinzufügen, etc. hat.
Elemente werden ja nur hinzugefügt, wenn sie nicht schon vorhanden sind.

Dann Methoden für Durchschnitt, Vereinigung, Gleichheit.
Letzteres eventuell als Gleichheitsoperator.

Zurück zur Speicherung:
eventuell sollte man klären, ob "variable Größe" bedeutet, dass sie ich ändern kann, oder dass sie zur Kompilezeit nicht feststeht.
Ersteres ist schwierig ohne Standardcontainer, zweiteres nur ein mit new angelegtes Array gelöst.

Ciao,
_