Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Copiare parte di Array 2D di una struct in una ricorsiva!

    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:
    codice:
    typedef struct {
      int nrighe;
      int ncolonne;
      int cella[10][10];
    } matrice;
    E la funzione (ricorsiva... almeno spero) che dovrebbe fare questa cosa e:
    codice:
    /*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!

    dove sbaglio?

  2. #2
    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.

  3. #3
    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:
    codice:
    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!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.