Programmieren - alles kontrollieren 4.939 Themen, 20.672 Beiträge

variable Menge inform einer Klasse in C++

JeromeB / 5 Antworten / Flachansicht Nickles

Hallo erstmal.


Ich muss für einen Programmentwurf 2 variabel große Mengen in Form von Klassen definieren (in C++).


Leider hab ich keine Idee wie das gehen soll und komme somit zu keinem Ergebnis. Die Sache ist auch recht dringend und ich würde mich sehr sehr freuen wenn sich hier jemand bereiterklären würde mir dabei zu helfen, inform des Quelltextes.


Vielleicht hat ja auch jemand ein Programm in dem er das schonmal gemacht hat.


Vielen vielen Dank an alle Helfer.


Ciao, Jerome.....(Jerome2000@gmx.de)

bei Antwort benachrichtigen
mr.escape JeromeB „aja, verkettete liste, super sache, hab ich schonmal gehört... ist ja ne gute...“
Optionen

Mit dem obigen beispiel käme etwa sowas raus:

intKette kette3;//ohne starteintrag, da noch unbekannt

int z;//da kommen die eingaben jeweils hin
do {
printf("element eingeben (->Eingabe):");
scanf("%d", &z);//von standardeingabe
kette3.Append(z);//wert speichern
getchar();//zeilenende aus standardeingabe löschen
printf("weiter element? (->JA/NEIN):");//hier wird es hässlich, denn
//immer JA oder NEIN tippen zu müssen ist "böse", etwas einfacheres
//ist netter, z.b. keine eingabe für ja und alles andere für nein
z=getchar();
} while(z==10);//wenn bei JA/NEIN frage nichts eingegeben wird, geht es weiter
//hier ist die erste variable voll, das gleiche nochmal für die
// zweite und danach der rest (schnittmenge, vergleich und anderer funktionen)

//es muss in "class intKette" übrigens auch noch heissen:
intKette(){glieder=NULL;}
intKette(int z){glieder=NULL;Append(z);}
~intKette(){if(glieder) delete glieder;glieder=NULL;}
void Append(int z){//element einfügen, sehr simpel; sortiertes einfügen wäre evtl. besser, fehlerbehandlung empfohlen
intKettenglied *neu=new intKettenglied;
neu->num=z;
neu->next=glieder;
glieder=neu;
}

//eine mögliche sort routine
typedef int (__cdecl *COMPARE )(const void *elem1, const void *elem2);

int gliedcomp(const intKettenglied **arg1, const intKettenglied **arg2){
if((*arg1)->num>(*arg2)->num)
return 1;
if((*arg1)->num<(*arg2)->num)
return -1;
return 0;
}

void intKette::Sort(){
int n, i;
intKettenglied *act_gl=glieder;
intKettenglied **sortarray;
n=0;
while(act_gl){
n++;//ist anzahl elemente
act_gl=act_gl->next;
}
if(n<2)//0 oder 1 elemente sind automatisch richtig sortiert
return;
//alle zeiger in ein array
sortarray=new intKettenglied*[n];
act_gl=glieder;
i=0;
while(act_gl){
sortarray[i++]=act_gl;
act_gl=act_gl->next;
}
//sortieren
qsort(sortarray, n, sizeof(intKettenglied*), (COMPARE)gliedcomp);
//und neu aufbauen
glieder=sortarray[0];
for(i=0;i<n-1;i++){
sortarray[i]->next=sortarray[i+1];
}
sortarray[i]->next=NULL;//kette stoppen
delete[] sortarray;//array freigeben
}


Und das ganze, wie immer ohne viel fehlerbehandlung, da nur das prinzip gezeigt werden soll.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen