PDA

View Full Version : [C++]problema difficile da riassumere...


sirus
03-03-2005, 15:15
ciao ragazzi ho un piccolo problema complicato da riassumere nel titolo, ho necessita di allocare n matrici di dimensione variabile in memoria...cosė ho pensato di fare cosė:

...
**arrayPtrMatrici = new float*[nMatrici];
for(unsigned int k = 0; k < nMatrici; k++) {
int n,m;
cin >> n;
cin >> m;
...
for(unsigned int j = 0; j < m; j++) {
for(unsigned int i = 0; i < n; i++) {
...
}
}
}
...

all'interno del for che scirre k dovrei dove ci sono i puntini inserire il codice per caricare in memoria dinamica una matrice n*m e poi successivamente nel ciclo che scorre i scrivere il codice per inserire un valore all'interno della cella [n][m] ma non sono come fare dato che non ho mai usato dei puntatori a puntatori...
qualcuno che mi da una idea???
sul mio schifo di libro di testo non c'č nulla riguardo a delle strutture di dati simili :muro:

Ziosilvio
03-03-2005, 15:37
A occhio, per l'allocazione dinamica questo codice non va.
Innanzitutto, devi dichiarare una variabile puntatore a puntatori a puntatori al tipo che ti serve:
double ***m;
che inizializzi con:
m = (double***)malloc(num*sizeof(double**));
Poi, per ciascuna matrice leggi il numero di righe (rows) e di colonne (cols) e allochi:
m[n] = (double**)malloc(rows*sizeof(double*));
for (int i=0; i<rows; i++)
m[n][i] = (double*)malloc(cols*sizeof(double));
A questo punto, l'elemento all'incrocio della riga i e della colonna j della matrice di posizione n e' semplicemente:
m[n][i][j]

'Sta cosa pero' non funziona molto bene, perche' quando devi deallocare, devi ricordarti quanto era grande ciascuna matrice: e questo o te lo sei scritto prima da qualche parte, oppure non esiste nessun modo sicuro per farlo.
Io definirei una classe matrice, i cui campi sono i numeri di righe e colonne, e poi un array bidimensionale con i valori. Ovviamente, a quel punto l'elemento all'incrocio della riga i e della colonna j della matrice di posizione n diventa:
m[n].elemAt(i,j)
dove elemAt e' un membro funzione della classe matrice che restituisce il valore giusto.

Ah: se vuoi un libro di testo decente, piglia il Deitel&Deitel.
Il tuo cos'e'? E perche' ne parli cosi' male?

sirus
03-03-2005, 16:58
tu hai usato la sintassi alla vecchia maniera (C) io invece uso la sintassi del C++ (new) cmq parlo cosė male del mio libro perchč uno č eccessivamente sintetico, mai un esempio e poi non č completo :muro: dei puntatori fa solo la parte per il passaggio dei parametri alle funzione per input/output :rolleyes: per il resto č vecchissimo come contenuti (č un jackson libri)

cionci
03-03-2005, 20:15
Originariamente inviato da sirus
tu hai usato la sintassi alla vecchia maniera (C) io invece uso la sintassi del C++ (new)
La sostanza non cambia...metti la new al posto della malloc e togli i sizeof e i cast espliciti...

sirus
03-03-2005, 20:30
domani provo subito, ora ho troppo sonno :) notte a tt e grazie