PDA

Visualizza la versione completa : [C/C++]: Struttura dati basata su puntatori


UltraBeginner
12-09-2006, 13:29
ciao a tutti,

sono nuovo del forum e come vedete dal nik ho appena iniziato con la programmazione (da circa due mesi :) ) Ora sono arrivato all argomento dei puntatori e qui sto sbattendo la testa di brutto. :dh: :dh: :dh: :dh: :dh: :dh: :dh: :dh: :dh: :dh:
Per la cronaca, sapreste in che maniera si puo implementare questa struttura dati? (sempre che si possa implementare....)

[1]-->[dato1]-->[datoA]
[2]-->[dato2]-->[datoB]
[3]-->[dato3]-->[datoC]
[4]-->[dato4]-->[datoD]
[n]-->[daton]-->[daton]

Detta in parole, sarebbe un vettore di puntatori che puntano a un dato (in questo caso il numero di una carta da gioco, es dato1),ma come posso fare a partire dal numero della carta a puntare anche al seme della carta?( es datoA).
E possibile creare questa struttura SOLO usando puntatori? (e non cose piu avanzate come struct liste etc, ho sbirciato il libro -.-). Vi faccio questa domanda perche sono allo studio del capitolo del puntatori e il problema si deve risolvere con i mezzi fin qui studiati. Nel caso in cui la risposta sia negativa allora mi sa ke dovro' cambiare approccio (alias algoritmo) per risolvere il mio problema.

Grazie a tutti per l attenzione!!!!!

Saluti!!!

The Beginner


PS se qualcuno e interessato a discutere sul mio problema, cioe a una simulazione di poker, ben venga :)

andbin
12-09-2006, 14:10
Originariamente inviato da UltraBeginner
[1]-->[dato1]-->[datoA]
[2]-->[dato2]-->[datoB]
[3]-->[dato3]-->[datoC]
[4]-->[dato4]-->[datoD]
[n]-->[daton]-->[daton]

Detta in parole, sarebbe un vettore di puntatori che puntano a un dato (in questo caso il numero di una carta da gioco, es dato1),ma come posso fare a partire dal numero della carta a puntare anche al seme della carta?( es datoA).
E possibile creare questa struttura SOLO usando puntatori? (e non cose piu avanzate come struct liste etc, ho sbirciato il libro -.-). Vi faccio questa domanda perche sono allo studio del capitolo del puntatori e il problema si deve risolvere con i mezzi fin qui studiati. Nel caso in cui la risposta sia negativa allora mi sa ke dovro' cambiare approccio (alias algoritmo) per risolvere il mio problema.Allora ... in effetti i puntatori sono l'argomento pi complesso del linguaggio "C" e .... bisogna capirli a fondo per poterli usare!!

Fatta questa premessa, veniamo al tuo problema. Tu dici che vuoi risolvere la cosa con dei puntatori ma ... la soluzione migliore non questa. Devi pensare a quali sono i dati da gestire e a come sono rapportati tra di loro.
Prendiamo una carta da gioco: essa ha 2 caratteristiche: il numero e il seme. Questi due dati non sono collegati tra di loro. Non ha senso dire che il numero 1 "collegato" al seme "fiori". la carta che ha numero 1 e seme "fiori".
Quindi il modo migliore usare una semplice struttura. Ad esempio:


typedef struct
{
short numero;
char *seme;
} CARTA;

CARTA carte[2] = { { 1, "fiori" }, { 2, "fiori" } };
Nota: ho usato una stringa per identificare il seme. Nulla vieta di usare un valore numerico (es. 1, 2, 3, 4). Dipende dall'uso che se ne deve fare!


Originariamente inviato da UltraBeginner
PS se qualcuno e interessato a discutere sul mio problema, cioe a una simulazione di poker, ben venga :) Personalmente, no, grazie ... non so giocare a poker. http://img383.imageshack.us/img383/4245/iconwink5sx.gif

fastcoder
12-09-2006, 14:19
Credo che usando solo i puntatori sia un po' dura. Se mi concedi una struct farei qualcosa del genere (assumo che dato1 e dato A siano delle stringhe e che dato A sia il seme della carta dato1), in fondo le struct me le studierei per andare avanti :D


struct carta
{
char carta[20];
char *seme;
};

struct carta *carte[n]; // mettici il numero di carte.
char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.

Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei cos:


strcpy(carte[0].carta, "Donna");
carte[0].seme = semi[2];

Se proprio non vuoi usare la struct allora qualcosa del genere:


char carte[n][20]; // mettici il numero di carte.
char semi_carte[n][20]; // mettici il numero di carte.
char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.

Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei cos:


strcpy(carte[0], "Donna");
strcpy(semi_carte[0], semi[2]);

Ovviamente questa soluzione pi brutta e spreca pi memoria e funziona solo se poi i semi non cambiano (se no te li devi cambiare tu a mano uno per uno in semi_carte).
Prova un po' se funziona...
:ciauz:

Opps ho visto troppo tardi che ti aveva risposto Andbin :)

UltraBeginner
12-09-2006, 14:21
Grazie per la rispo!

spiegazione molto chiara!! :) :) Preso atto che bisogna usare la struct :cry: :cry: :cry:
(che per ora non posso usare perche il capitolo 'non me lo consente' -.-) rileggo per la milionesima volta il testo del problema e cerco un algoritmo con matrici e vettori!!!

Ti faccio poi sapere se ne cavo qualcosa dal buco!!

A presto!!!

PS Vista l ora, buon pranzo lol

UltraBeginner
12-09-2006, 14:24
Originariamente inviato da fastcoder
Credo che usando solo i puntatori sia un po' dura. Se mi concedi una struct farei qualcosa del genere (assumo che dato1 e dato A siano delle stringhe e che dato A sia il seme della carta dato1), in fondo le struct me le studierei per andare avanti :D


struct carta
{
char carta[20];
char *seme;
};

struct carta *carte[n]; // mettici il numero di carte.
char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.

Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei cos:


strcpy(carte[0].carta, "Donna");
carte[0].seme = semi[2];

Se proprio non vuoi usare la struct allora qualcosa del genere:


char carte[n][20]; // mettici il numero di carte.
char semi_carte[n][20]; // mettici il numero di carte.
char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.

Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei cos:


strcpy(carte[0], "Donna");
strcpy(semi_carte[0], semi[2]);

Ovviamente questa soluzione pi brutta e spreca pi memoria e funziona solo se poi i semi non cambiano (se no te li devi cambiare tu a mano uno per uno in semi_carte).
Prova un po' se funziona...
:ciauz:

Opps ho visto troppo tardi che ti aveva risposto Andbin :)

meglio risposte in piu ke in meno!!!! Grazie mille anke la tua rispo e molto chiara!!!!

Argh non vedo l ora di arrivare alle struct!!!! Sto sclerando con sti algoritmi di ricerca su matrici e vettori!!!!!!!! :) :) :) :) :)

A presto!! :ciauz: :ciauz: :ciauz:

Loading