PDA

Visualizza la versione completa : Copiare parte di Array 2D di una struct in una ricorsiva!


FreeManX
30-12-2002, 11:36
Ciao,
il tutto riguarda il C.

Dato un array pippo[6][6], che passa in un certo controllo devo assegnare ad esempio a nuovo_pippo[n] = pippo[n], cioe' tutto il vettore legato al primo indice!
Ma le sto provando di tutti i colori, ma non ho capito dove svaglio.

Se non sbaglio scrivendo pippo[n] mi da l'indirizzo di quel elemento che coincide con il primo elemento pippo[n][0], ma se provo ad essegnarlo a nuovo_pippo mi va in crisi, ho provato ad usare tutti gli operatori *, & ma niente.

Dove sbaglio?

Ah vi ricordi il tutto fa parte di una struct cosi definita:


typedef struct {
int nrighe;
int ncolonne;
int cella[10][10];
} matrice;


E la funzione (ricorsiva... almeno spero:D) che dovrebbe fare questa cosa e:


/*Funzione ricorsiva per eliminare una riga */
matrice delRow(matrice m, int dR_row, int dR_dim, int dR_dim1) {
//Variabili
matrice newM;

// Caso base
if (dR_dim < 0) {
newM.nrighe = m.nrighe - 1;
newM.ncolonne = m.ncolonne;
return newM;
}

if (dR_dim != dR_row) {
//Prima della riga da eliminare
newM.cella[dR_dim1] = m.cella[dR_dim];
return delRow(m, dR_rom-1, dR_row1-1);
}
if (dR_dim == dR_row) {
newM.cella[dR_dim1] = m.cella[dR_dim];
return delRow(m, dR_dim-1, dR_dim);
}

} //End delRom


La func. dovrebbe eliminare una riga di una matrice.... qualcola la elimina, ma non so che dato che poi i dati che mi ristituisce so tutti u uguali e non centrano una mazza con quelli inseriti da me! :D

dove sbaglio?

r0x
30-12-2002, 20:55
Cazzarola .. :)

Non puoi fare nuovo_pippo[n]=pippo[n]! E` un`assegnazione di puntatori (tra l`altro non modificabili)! Scordati queste cose ad alto livello in C.

Devi iterarti tutta la matrice, anzi, in realta` tenere costante la colonna e iterare le righe.

O la devi fare per forza ricorsiva? Mi pare un po` una boiata spararsi una ricorsione per questa roba..

Aggiungo: non si puo` _rimuovere_ una riga da una "matrice" allocata staticamente.

Ciao.

FreeManX
31-12-2002, 14:44
Originariamente inviato da r0x
Cazzarola .. :)

Non puoi fare nuovo_pippo[n]=pippo[n]! E` un`assegnazione di puntatori (tra l`altro non modificabili)! Scordati queste cose ad alto livello in C.

Devi iterarti tutta la matrice, anzi, in realta` tenere costante la colonna e iterare le righe.

O la devi fare per forza ricorsiva? Mi pare un po` una boiata spararsi una ricorsione per questa roba..

Aggiungo: non si puo` _rimuovere_ una riga da una "matrice" allocata staticamente.

Ciao.

Dopo averci menato non poco stamattina l'ho capito :)

Lo so che e una boiata farla ricorsiva, ma la devo fa per esercizio, e per niente altro.... alla fine o risolto cosi:


matrice delRow(matrice m, int dR_row, int dR_dim, int dR_dim1) {
int i;
// Caso base
if (dR_dim > m.nrighe -1) {
m.nrighe = m.nrighe - 1;
m.ncolonne = m.ncolonne;
return m;
}

//Elimina riga
if (dR_dim == dR_row) {
return delRow(m, dR_row, dR_dim+1, dR_dim1);
}

//Passo ricorsivo
//SwapElementi
i = 0;
while (i <= m.ncolonne-1) {
m.cella[dR_dim1][i] = m.cella[dR_dim][i];
i++;
}
return delRow(m, dR_row, dR_dim+1, dR_dim1+1);



} //End delRom


Per la mia prima "complicata" func. ricorsiva non e niente male :)

Grazie ciaoo!

Loading