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

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


Messaggi: 69
Iscritto: 25/07/2010

Segnala al moderatore
Postato alle 17:52
Sabato, 30/10/2010
Come si dichiarano? E come si fa riferimento agli elementi contenuti?

So dal mio libro sul C che un array dinamico si dichiara tramite un puntatore  attribuendogli l'indirizzo che la funzione malloc restituisce (NULL in caso di errore), si ridimensiona tramite realloc e si libera tramite free.

Purtroppo il mio libro non tratta le matrici multidimensionali che sono quelle che a me servono maggiormente per il momento.


PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
2
Down
V
Segnala al moderatore
Postato alle 21:58
Sabato, 30/10/2010
Brr... "matrici", ma che siamo, matematici?

Si chiamano array bidimensionali (non vettori, i vettori sono quelli della fisica o quelli che vengono istanziati con il template vector).

L'esempio di hackersitiz č un esempio di allocazione statica, a noi interessa quella dinamica:

Codice sorgente - presumibilmente C++

  1. int numRows = 10;
  2. int numCols = 10;
  3. int **arr = (int **) malloc(numRows *sizeof(int));
  4.  
  5. int c;
  6. for(c=0;c< numRows ;c++)
  7.   arr[c] = (int *) malloc(numCols*sizeof(int));


Ultima modifica effettuata da pierotofy il 30/10/2010 alle 21:59


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


Messaggi: 1792
Iscritto: 26/06/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 22:17
Sabato, 30/10/2010
mi ha detto mio "cuggino" che se fai cosė:

Codice sorgente - presumibilmente C/C++

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



diminuisci drasticamente la frammentazione della Ram e l'overhead delle allocazioni

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;



:k:

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
1
Down
V
Segnala al moderatore
Postato alle 4:13
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;






L'inizializzazione č pių veloce, ma l'accesso diventa pių lento (per la moltiplicazione).


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


Messaggi: 1792
Iscritto: 26/06/2009

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

Postato originariamente da pierotofy:

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;






L'inizializzazione č pių veloce, ma l'accesso diventa pių lento (per la moltiplicazione).



l'accesso random si, ma l'accesso sequenziale č pių veloce, perchč non rompi le linee della cache e viene massimizzato dal prefetch delle ram dinamiche... ovviamente tutto ha dei lati positivi e negativi. Comunque considera che una moltiplicazione impiega mediamente 5 cicli di clock, che potrebbe corrispondere a un singolo ciclo di Ram su alcuni sistemi moderni. Questa tecnica la uso quando programmo sulle console e su sistemi con poca memoria.

PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 21:39
Domenica, 31/10/2010
certo, ma infatti la mia era solo una chicca... diciamo che č un metodo per ottimizzare le prestazioni in caso di utilizzi molto particolari (lo usavo per fare software rendering sul nintendo ds).

per usi generali meglio sbattersene dell'efficienza e puntare alla semplificazione del lavoro e del codice :-)

come diceva il grande Knuth, l'ottimizzazione prematura č la radice di tutti i mali. :-)

PM
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:55
Sabato, 30/10/2010
considera la matrice come un array di array

PM
Avatar
hackersitiz (Normal User)
Pro


Messaggi: 120
Iscritto: 29/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 19:08
Sabato, 30/10/2010
Infatti sono array di array, ma sono detti vettori multidimensionali...
Ti faccio un'esempio:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.      int vettore[10][10];
  5.      return 0;
  6. }


Ecco questo č un vettore comunque ti passo una guida
http://elite.polito.it/files/courses/06AZN/lucidi/C/L6.2-u ...

buona fortuna

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

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

Postato originariamente da pierotofy:

Brr... "matrici", ma che siamo, matematici?

Si chiamano array bidimensionali (non vettori, i vettori sono quelli della fisica o quelli che vengono istanziati con il template vector).



Va de retro! Ti hanno fatto il lavaggio del cervello in Minnesota! :rotfl:

PM
Pagine: [ 1 2 3 ] Precedente | Prossimo