PDA

View Full Version : [C]Dove sbaglio?


comm64
26-04-2007, 11:12
Salve ho dei problemi con questo codice(quando chiamo la funzione stampa mi stampa tutti 0)

void video(int** A,int n);


int main(int argc, char *argv[])
{
int m;
int i,j;
double **matrice;

printf("Inserisci la dimensione della matrice: \n");
scanf("%d",&m);
int n=m+1;
double b[n+1]; //vettore dei termini noti
matrice=calloc(n,sizeof(double*));

double cont;

for (i=0;i<=n;++i){
matrice[i]=calloc(n+1,sizeof(double));
}

for(i=1;i<n;i++)
{
for (j=1;j<n;j++)
{
matrice[i][j]=cont;
// printf("%f\t",matrice[i][j]);
cont++;
}

// printf("\n\n\n");
}
video(matrice,n);


system("PAUSE");
return 0;
}
void video(int** A,int n)
{
int i;
int j;
for(i=1;i<n;i++)
{

for (j=1;j<n;j++)
{
printf("%f\t",A[i][j]);
}
printf("\n\n\n");
}
}


speriamo che qualcuno lo sappia perchè io tra un pò impazzisco

trallallero
26-04-2007, 12:49
ehm ... la funzione stampa non c´e´:D

beppegrillo
26-04-2007, 12:50
matrice=calloc(n,sizeof(double**));
matrice[i]=calloc(n+1,sizeof(double *));

Prova così

trallallero
26-04-2007, 12:53
double **matrice;

void video( int **A,int n )

printf("%f\t",A[i][j]);

dichiari double, ricevi int e stampi float ... :eek:

comm64
26-04-2007, 13:22
double **matrice;

void video( int **A,int n )

printf("%f\t",A[i][j]);

dichiari double, ricevi int e stampi float ... :eek:

SEI UN MAGO! mannaggia ho fatto un errore troppo stupido...
si vede che mi sto esaurendo....:muro:

comm64
26-04-2007, 15:17
ne approffitto per chiedere il prototipo di una funzione per prendere una matrice dal file;

grazie

solo il prototipo;

trallallero
26-04-2007, 15:28
ne approffitto per chiedere il prototipo di una funzione per prendere una matrice dal file;

grazie

solo il prototipo;

cosa intendi ? se sai le dimensioni della matrice leggi con una fread ...

comm64
26-04-2007, 15:41
ciao,
Allora ho la mia matrice salvata su file,(sono in possesso solo del nome del file) (non so gli elementi presenti) potrebbe essere anche 1000X1000
io avevo pensato cosi:

void leggidafile()
{
FILE* fp;
.....
...
...
adesso dovrei allocare una matrice double [n][n](quadrata)
PARI AGLI ELEMENTI del file

potrei contare solo le righe o solo le colonne ed aggiornare il valore di n man mano che incontro un elemento ma non so come fare

comm64
26-04-2007, 15:44
ECCO DOVE MI SONO FERMATO
void leggi_da_file()
{
FILE*fp;
char buf[256];
int n;
double A[n][n];
char* filename="C:\\matrice.txt";
int riga=0;

if((fp=fopen(filename,"r+"))==NULL)
{
printf("Impossibile aprire il file");
return;
}
else
{
//in questo punto devo allocare una matrice pari alla dimensione degli elementi presenti nel file;

comm64
26-04-2007, 15:51
un ultimo grandissimo problema...


all'uscita della funzione mi deve ritornare una matrice creata dinamicamente pari agli elementi del file;

come si mette nel prototipo il ritorno???

trallallero
26-04-2007, 15:53
ECCO DOVE MI SONO FERMATO
void leggi_da_file()
{
FILE*fp;
char buf[256];
int n;
double A[n][n];
char* filename="C:\\matrice.txt";
int riga=0;

if((fp=fopen(filename,"r+"))==NULL)
{
printf("Impossibile aprire il file");
return;
}
else
{
//in questo punto devo allocare una matrice pari alla dimensione degli elementi presenti nel file;


conosci la dimensione del singolo elemento ? se si, calcoli la diemnsione del file (feek, ftell) la dividi per la dim e ottieni quanti elementi sono.

trallallero
26-04-2007, 15:54
un ultimo grandissimo problema...


all'uscita della funzione mi deve ritornare una matrice creata dinamicamente pari agli elementi del file;

come si mette nel prototipo il ritorno???

double **funz(...)

comm64
26-04-2007, 16:11
Grazie adesso mi manca solo il modo di leggere gli elementi del file e poi apro lo spumante!!!!!:) :)
perchè non ho capito bene come fare

sono elemento di tipo double

Siete tutti bravissimi!!

comm64
26-04-2007, 16:35
1.189207 1.259921 1.414214 2.000000
1.259921 1.414214 2.000000 4.000000
1.414214 2.000000 4.000000 8.000000
2.000000 4.000000 8.000000 16.000000



questo è un esempio del file che ha 16 elementi

a me interesserebbe solo contare le righe o le colonne

ma anche tutti gli elementi e poi ci faccio la radice quadrata che tanto è sempre una matrice NxN

trallallero
27-04-2007, 06:06
1.189207 1.259921 1.414214 2.000000
1.259921 1.414214 2.000000 4.000000
1.414214 2.000000 4.000000 8.000000
2.000000 4.000000 8.000000 16.000000



questo è un esempio del file che ha 16 elementi

a me interesserebbe solo contare le righe o le colonne

ma anche tutti gli elementi e poi ci faccio la radice quadrata che tanto è sempre una matrice NxN
nel momento in cui sai quanto è grande il file (ci sei riuscito o serve aiuto ?) dividi la dimensione per la sizeof(double) e sai quanti elementi ci sono. Quindi (se sei sicuro che sia SEMPRE una matrice quadrata) sai le misure e allochi una matrice e fai un'unica fread che legge l'intero file nella matrice.

comm64
27-04-2007, 10:00
nel momento in cui sai quanto è grande il file (ci sei riuscito o serve aiuto ?) dividi la dimensione per la sizeof(double) e sai quanti elementi ci sono. Quindi (se sei sicuro che sia SEMPRE una matrice quadrata) sai le misure e allochi una matrice e fai un'unica fread che legge l'intero file nella matrice.

Ciao, io sono riuscito a capire come fare a contare gli elementi,
quindi ho allocato la matrice dinamicamnte,
il problema adesso è la lettura ed inserimento in mtarice degli elementi


potresti farmi l'esempio di una fread?
mettiamo caso che la mia matrice sia A[n][n] come uso la fread per inserire ?


Grazie

trallallero
27-04-2007, 10:41
Ciao, io sono riuscito a capire come fare a contare gli elementi,
quindi ho allocato la matrice dinamicamnte,
il problema adesso è la lettura ed inserimento in mtarice degli elementi


potresti farmi l'esempio di una fread?
mettiamo caso che la mia matrice sia A[n][n] come uso la fread per inserire ?


Grazie

dal man:
size_t fread(void *restrict ptr, size_t size, size_t nitems,FILE *restrict stream);

quindi fai:
fread( A, sizeof(A) * <numero matrici da leggere>, 1, pFile);

se non ho sbagliato qualcosa, sono un po´ impegnatuccio e ho scritto al volo

ciao