Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Matrici dinamiche
Forum - C/C++ - Matrici dinamiche - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 15:56
Domenica, 31/10/2010
Testo quotato

Postato originariamente da TheKaneB:
Codice sorgente - presumibilmente C/C++

  1. int sizeX = 10;
  2. int sizeY = 10;
  3. int * matrice = malloc(sizeof(*matrice) * sizeX * sizeY);



Codice sorgente - presumibilmente Plain Text

  1. // al posto di matrice[x][y] = 42;
  2. matrice[x + y*sizeX] = 42;





Non ho capito bene, e più leggo il mio manuale più mi confondo.

Perchè scrivi
Codice sorgente - presumibilmente Plain Text

  1. malloc(sizeof(*matrice) * x * y)



e non
Codice sorgente - presumibilmente Plain Text

  1. malloc(sizeof(int) * x * y)


??

E poi:

Credo che i puntatori non siano molto diversi da degli array o meglio: gli array non sono molto diversi da dei puntatori.
Codice sorgente - presumibilmente C/C++

  1. int array[n];
  2. int *p;
  3. p=array;



il "nome" dell'array corrisponde ad una locazione di memoria o meglio all'inizio del blocco di memoria che contiene in successione tutti gli indirizzi dei valori contenuti nell'array.

E fin qui ci sono. Il mio libro però non mi dice che posso fare
Codice sorgente - presumibilmente C/C++

  1. int array[n];
  2. int *p;
  3. p=array;
  4.  
  5. p[5]=x; /* <-- questo */



mi dice semmai di fare
Codice sorgente - presumibilmente C/C++

  1. int array[n];
  2. int *p;
  3. p=array;
  4.  
  5. p=p+5;
  6. *p=x;



:pat:

PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 15:57
Domenica, 31/10/2010
Testo quotato

Postato originariamente da Giarados:

Testo quotato

Postato originariamente da TheKaneB:
Codice sorgente - presumibilmente C/C++

  1. int sizeX = 10;
  2. int sizeY = 10;
  3. int * matrice = malloc(sizeof(*matrice) * sizeX * sizeY);



Codice sorgente - presumibilmente Plain Text

  1. // al posto di matrice[x][y] = 42;
  2. matrice[x + y*sizeX] = 42;





Non ho capito bene, e più leggo il mio manuale più mi confondo.

Perchè scrivi
Codice sorgente - presumibilmente Plain Text

  1. malloc(sizeof(*matrice) * x * y)



e non
Codice sorgente - presumibilmente Plain Text

  1. malloc(sizeof(int) * x * y)


??

E poi:

Credo che i puntatori non siano molto diversi da degli array o meglio: gli array non sono molto diversi da dei puntatori.
Codice sorgente - presumibilmente C/C++

  1. int array[n];
  2. int *p;
  3. p=array;



il "nome" dell'array corrisponde ad una locazione di memoria o meglio all'inizio del blocco di memoria che contiene in successione tutti gli indirizzi dei valori contenuti nell'array.

E fin qui ci sono. Il mio libro però non mi dice che posso fare
Codice sorgente - presumibilmente C/C++

  1. int array[n];
  2. int *p;
  3. p=array;
  4.  
  5. p[5]=x; /* <-- questo */



mi dice semmai di fare
Codice sorgente - presumibilmente C/C++

  1. int array[n];
  2. int *p;
  3. p=array;
  4.  
  5. p=p+5;
  6. *p=x;



:pat:



evidentemente il tuo libro è scarso. Cambialo.

PM
Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 16:01
Domenica, 31/10/2010
Insomma: da ora sino a quando mi arriva il manuale Deitel & Deitel posso vedere i puntatori come degli array?

PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 16:07
Domenica, 31/10/2010
Testo quotato

Postato originariamente da Giarados:

Insomma: da ora sino a quando mi arriva il manuale Deitel & Deitel posso vedere i puntatori come degli array?



assolutamente si ;)

PM
Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 17:15
Domenica, 31/10/2010
Testo quotato

Postato originariamente da TheKaneB:
e per accedervi poi, devi fare così:
Codice sorgente - presumibilmente Plain Text

  1. // al posto di matrice[x][y] = 42;
  2. matrice[x + y*sizeX] = 42;





Mi viene spontaneo fare un'altra domanda. Io, sebbene ho seguito il tuo consiglio, devo fornire un'interfaccia per la classe che sto scrivendo che permetta l'accesso all'array come se fosse bidimensionale (sebbene sia implementato monodimensionalmente).

Quindi, sapendo che sto esaminando l'elemento n dell'array è giusto affermare che volendo restituire le coordinate attribuibili a tale elemento se esso fosse in un array bidimensionale allora dovrei utilizzare tali formule:

array[x + y*dimX] -> array[x + y*dimX] == array[n] --> n==x+y*dimX

x=n-y*dimX
y=(n-x)/dimX

o erro?

EDIT:

ops :rotfl: ho comunque bisogno di y e x...

Ultima modifica effettuata da Giarados il 31/10/2010 alle 17:17
PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
0
Down
V
Segnala al moderatore
Postato alle 17:41
Domenica, 31/10/2010
Testo quotato

Postato originariamente da Il Totem:
Va de retro! Ti hanno fatto il lavaggio del cervello in Minnesota!



:nono:

Il lavaggio del cervello lo fanno in Italia quando dei professori reciclati da matematica si mettono ad insegnare informatica e decidono di tradurre impropriamente certi termini.


Il mio blog: https://piero.dev
PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 18:13
Domenica, 31/10/2010
Testo quotato

Postato originariamente da Giarados:

Testo quotato

Postato originariamente da TheKaneB:
e per accedervi poi, devi fare così:
Codice sorgente - presumibilmente Plain Text

  1. // al posto di matrice[x][y] = 42;
  2. matrice[x + y*sizeX] = 42;





Mi viene spontaneo fare un'altra domanda. Io, sebbene ho seguito il tuo consiglio, devo fornire un'interfaccia per la classe che sto scrivendo che permetta l'accesso all'array come se fosse bidimensionale (sebbene sia implementato monodimensionalmente).

Quindi, sapendo che sto esaminando l'elemento n dell'array è giusto affermare che volendo restituire le coordinate attribuibili a tale elemento se esso fosse in un array bidimensionale allora dovrei utilizzare tali formule:

array[x + y*dimX] -> array[x + y*dimX] == array[n] --> n==x+y*dimX

x=n-y*dimX
y=(n-x)/dimX

o erro?

EDIT:

ops :rotfl: ho comunque bisogno di y e x...



la formula inversa è semplice:
x = n % dimY;
y = n / dimY; // divisione intera

deriva dalla banale considerazione che, avendo A / B = quoziente + resto/B (che deriva a sua volta da A = B * quoziente + resto), posso ottenere resto = modulo_di(A / B) e quoziente = divisione_intera(A / B).

Ultima modifica effettuata da TheKaneB il 31/10/2010 alle 18:15
PM
Avatar
Giarados (Ex-Member)
Pro


Messaggi: 69
Iscritto: 25/07/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 21:07
Domenica, 31/10/2010
Grazie delle delucidazioni. Comunque sono costretto a ripiegare sulla soluzione di Piero dato che ho la necessità di definire un metodo per il ridimensionamento della matrice e non credo che sia fattibile avendo i dati disposti in maniera sequenziale a meno che non vada eliminando elementi periodicamente. Inoltre nel caso di un ingrandimento della matrice dovrei duplicare l'array per poi andarlo a ricopiare con 1 elemento in più ogni n elementi.

Naaa troppo complicato :)

Ultima modifica effettuata da Giarados il 31/10/2010 alle 21:08
PM
Pagine: [ 1 2 3 ] Precedente | Prossimo