PDA

View Full Version : [Linguaggio C] Allocazione dinamica di una matrice bidimensionale


misterx
16-02-2005, 09:59
come si fa ?

grazie 1000

Fenomeno85
16-02-2005, 10:24
devi usare calloc

~§~ Sempre E Solo Lei ~§~

misterx
16-02-2005, 11:05
esempio scusa ?

supponiamo di partire da questa:

matrice[10][10];

ma durante l'esecuzione del programma mi serve la medesima matrice di 100x100 elementi, cosa scrivo ?

non mi era mai capitata una situazione con gli array :muro:

misterx
16-02-2005, 12:15
data una matrice fatta cosμ, esiste un algoritmo che mi determina la lunghezza dei percorsi?



••••••••••• •e
••• • ••
••• • ••
••• •• •••••••
•••••••••••••••• •
• ••••••••• •
s •••• •




s = start
e = end

Fenomeno85
16-02-2005, 12:43
ci sono vari algoritmi che cercano le strade migliori. Se non erro uno si chiamava di dijistra o simile.

per un array θ cosμ quindi ti crei un array

#include <stdio.h>
#include <stdlib.h>

int main (void){
int *pMatrice;
pMatrice = (int*) calloc (10*10, sizeof(int));
for (int i=0;i<100;i++){
pMatrice[i]=i+1;
}
for (i=0;i<100;i++){
printf ("%d\t",pMatrice[i]);
if (i==i*10 && i!=0) printf ("\n");
}

printf ("\n\n\n\n\n2 elemento della 3 riga:%d",pMatrice[3*10+2]);

system ("PAUSE");
return (0);
}


questo θ un metodo

~§~ Sempre E Solo Lei ~§~

misterx
16-02-2005, 13:23
grazie Fenomeno85 :)

ho trovato pure questo


int i;
int **p;
p = (int**)malloc(riga*sizeof(int*));
for(i = 0; i <= colonna; i++)
p[i] = (int*) malloc(colonna*sizeof(int));



se riga = 10 e colonna = 10

dovrebbero venire allocati (10*4) + (10*4) = 160 (byte) o sbaglio ?

Fenomeno85
16-02-2005, 16:18
si dovrebbero essere 160 byte perς poi la dimensione dei valori dipende anche dall'architettura se non ricordo male ... cmq possono variare questo son sicuro.

~§~ Sempre E Solo Lei ~§~

Ziosilvio
16-02-2005, 22:53
Originariamente inviato da Fenomeno85
ci sono vari algoritmi che cercano le strade migliori. Se non erro uno si chiamava di dijistra o simile.
Dijkstra (http://en.wikipedia.org/wiki/Edsger_Dijkstra), pronunciato DIX-tra.

Ziosilvio
16-02-2005, 22:55
Originariamente inviato da misterx

int i;
int **p;
p = (int**)malloc(riga*sizeof(int*));
for(i = 0; i <= colonna; i++)
p[i] = (int*) malloc(colonna*sizeof(int));



se riga = 10 e colonna = 10

dovrebbero venire allocati (10*4) + (10*4) = 160 (byte) o sbaglio ?
No, un po' di piω.
Il motivo θ che allochi prima una sequenza di puntatori a int, e poi dieci sequenze di dieci int ciascuna.
Quindi la memoria totale allocata θ riga*sizeof(int*) + riga*colonna*sizeof(int).

A proposito: nel for su i, la seconda condizione deve essere "i < riga".

Fenomeno85
17-02-2005, 09:46
Originariamente inviato da Ziosilvio
Dijkstra (http://en.wikipedia.org/wiki/Edsger_Dijkstra), pronunciato DIX-tra.

grazie x l'info sul nome :D

~§~ Sempre E Solo Lei ~§~

misterx
26-02-2005, 10:57
Originariamente inviato da Ziosilvio
No, un po' di piω.
Il motivo θ che allochi prima una sequenza di puntatori a int, e poi dieci sequenze di dieci int ciascuna.
Quindi la memoria totale allocata θ riga*sizeof(int*) + riga*colonna*sizeof(int).

A proposito: nel for su i, la seconda condizione deve essere "i < riga".



dei cammini minimi a sorgente singola, sai nulla ?

mpattera
27-02-2005, 20:54
Originariamente inviato da Fenomeno85
ci sono vari algoritmi che cercano le strade migliori. Se non erro uno si chiamava di dijistra o simile.

dijkstra serve per trovare il cammino minimo tra due nodi di un grafo pesato.