PDA

Visualizza la versione completa : [c] creare libreria di insiemi arbitrari


cala82
15-06-2009, 18:26
Ciao a tutti, devo realizzare una libreria per la gestione di insiemi di dati di tipo arbitrario, destinata all'uso da parte di altre applicazioni.La libreria deve fornire funzioni per creare nuovi insiemi, aggiungere un elemento a un insieme,
aggiungere tutti gli elementi di un insieme a un altro insieme, ecc.

Per implementare l insieme posso utilizzare una struttura di dati generici in c?? esempi di come andrebbero implementate?? come faccio poi a fare confronti tra insiemi per vedere se entrambi contengono lo stesso elemento?
ci sono librerie gi implementate che mi possono aiutare a capire come fare??
scusate la pioggia di domande ma ammetto che sono un po confuso.. :bh: :bh: :bh: :dh: :dh:

Grazie :ciauz: :ciauz:

Stoicenko
15-06-2009, 18:58
le cose migliori le trovi nelle collection della stl.. prendi spunto da quelle

chu
16-06-2009, 11:31
Ho dato un'occhiata su internet per la libreria stl, ma ho visto che riguarda il c++ ma non il c..E' corretto?Anche io ho lo stesso problema..libreria per insiemi di tipo arbitrario per un progetto in c..e anche io non ho idea di come fare.. :dh:

XWolverineX
16-06-2009, 11:39
Non facilissimo in C, dato che non hai i template, le classi e la possibilit di ereditare classi (che sono UTILISSIME in questi casi).

Ad ogni modo, al posto dei template, o usi i puntatori a void* oppure devi fare riferimenti in base al sizeof della struttura (cos simuli le strutture derivate), un p come fa Windows.

Stoicenko
16-06-2009, 11:45
il riferimento alle stl era per il modo di gestire delle collezioni.. ovviamente in c non ci sono ne classi ne template.. im base alle tue conoscenze e alle richieste puoi prendere pi o meno spunto..

chu
16-06-2009, 11:48
Ok..grazie mille!! :D

cala82
16-06-2009, 12:05
scusate ma io ancora non capisco bene :dh: :dh: devo utilizzare i puntatori void per creare l' insieme, ma come faccio??? e a fare poi un confronto tra gli elementi dell insieme ovvero controllare se 2 insiemi contengono lo stesso elemento.... :master: :master: e tra le librerie cosa mi conviene guardare?? scusate l insistenza ma sono parecchio confuso...

XWolverineX
16-06-2009, 12:11
Il progetto difficile, questo da fissarlo in testa.

Eccoti un esempio per le strutture derivate.



struct V1
{
int cSize;
int campo1;
};


struct V2
{
int cSize;
int campo1;
int campo2;
};



Le 2 strutture evidentemente differiscono per la loro grandezza.
Dunque puoi usarle entrambe in un'unica funzione che prende un puntatore alla struttura base e fare poi considerazioni sulla grandezza. Esempio pratico



V2 v;
v.campo1 = 2;
v.campo2 = 3;
v.cSize = sizeof(V2);

Funzione((V1*)&V2);


void Funzione(V1 *p)
{
if (p->cSize == sizeof(V1))
{//codice per V1}

if (p->cSize == sizeof(V2))
{V2 *pp = (V2*)&p; //altro codice}

}

Loading