View Full Version : [C]Dove sbaglio?
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:
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:
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 ...
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
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;
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(...)
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!!
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.
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.