PDA

Visualizza la versione completa : Salvare e leggere matrice somma da un file - Linguaggio[C]


AmedeoFalco
30-08-2017, 11:51
Salve ragazzi!! Come da titolo ho da svolgere questo esercizio che mi dice:
"Date due matrici in input ne calcoli la matrice somma e la salvi prima all'interno di un file testo e poi la legga dallo stesso"

Io per adesso sono arrivato qui :

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cstring>

#define N 10

void Leggi_Mat(int a[N][N],int b[N][N]){
int row;
int column ;

printf("Inserisci numero di righe: ");
scanf("%d",&row);
printf("Inserisci numero colonne: " );
scanf("%d",&column);
for(int i=0;i<row;i++){

for(int j=0;j<column;j++){

printf("Inserisci elmento di a[%d][%d]: ",i,j);
scanf("%d",&a[i][j]);

}
}
printf("\nInserisci numero di righe seconda matrice: ");
scanf("%d",&row);
printf("\nInserisci numero colonne sconda matrice: " );
scanf("%d",&column);
for(int i=0;i<row;i++){

for(int j=0;j<column;j++){

printf("Inserisci elmento di a[%d][%d]: ",i,j);
scanf("%d",&b[i][j]);

}
}
}
void Somma_Mat(int a[N][N],int b[N][N]){
FILE *fp;
fp=fopen("somma.txt","w");
int row;
int column ;
int c[N][N];

printf("\nLa matrice somma e':\n");
int i, j;
for(int i=0;i<row;i++){

for(int j=0;j<column;j++)

c[i][j]=a[i][j]+b[i][j];
}
for(int i=0;i<row;i++){

for(int j=0;j<column;j++)
printf("%3d ",c[i][j]);
printf("\n");
fwrite(c,sizeof(int),row*column,fp);
fclose(fp);
}
return;
}
int main() {
int a1[N][N];
int b1[N][N];
Leggi_Mat(a1,b1);
Somma_Mat(a1,b1);
return 0;
}


Vorrei un aiuto su come salvare e poi leggere la stessa matrice!
PS: la define so che per questioni di memoria devo aumentarla quindi N=10 non va bene io metto N=300!! Questo perché nel corso di studi fatto all'Uni per il remo di ingegneria che faccio(aerospaziale) il mio prof ha escluso la memoria dinamica come argomento!!!

torn24
31-08-2017, 08:30
Avrei una soluzione semplice che non va in disaccordo con la traccia :)
Ti basta salvare su un file di testo elemento per elemento della matrice.
In maniera non diversa da come stampi una matrice, cioè due cicli for() annidati, il primo per le righe il secondo per le colonne, puoi scrivere su file tutti gli elementi della matrice.Per leggere da file userai lo stesso sistema.






/*Scrittura matrice su file*/

for(i=0;i<righe;i++){

for(j=0;j<colonne;j++){


fprintf(file,"%d\n",matrice[i][j]);

}
}

/* Lettura matrice da file*/
for(i=0;i<righe;i++){

for(j=0;j<colonne;j++){

fscanf(file,"%d",&elemento);
printf("%d",elemento);

}
printf("\n"); // Nuova riga



}

Scara95
31-08-2017, 10:08
Salva anche righe e colonne:

righe colonne
a . . .
. . . .
. . . .
. . . .
. . . d

esempio:

3 5
1 2 3 4 5
5 6 7 9 10
11 12 13 14 15

Altrimenti non potresti più leggere il file in 2 sessioni diverse, o meglio, potresti ma faresti più fatica

AmedeoFalco
31-08-2017, 13:43
Posso inserire svantaggio e lettura da file di testo nello stesso prototipo di funzione?

Cioè fare come dice @torn24 ma tutto in un solo prototipo

AmedeoFalco
31-08-2017, 13:45
Avrei una soluzione semplice che non va in disaccordo con la traccia :)
Ti basta salvare su un file di testo elemento per elemento della matrice.
In maniera non diversa da come stampi una matrice, cioè due cicli for() annidati, il primo per le righe il secondo per le colonne, puoi scrivere su file tutti gli elementi della matrice.Per leggere da file userai lo stesso sistema.






/*Scrittura matrice su file*/

for(i=0;i<righe;i++){

for(j=0;j<colonne;j++){


fprintf(file,"%d\n",matrice[i][j]);

}
}

/* Lettura matrice da file*/
for(i=0;i<righe;i++){

for(j=0;j<colonne;j++){

fscanf(file,"%d",&elemento);
printf("%d",elemento);

}
printf("\n"); // Nuova riga



}










Con elemento chi stiamo richiamando??

Ovviamente devo sempre scrivere


FILE *file;
file=fopen("somma.txt", "w") //per scritture

file=fopen(" somma.txt", "r") //per lettura

AmedeoFalco
31-08-2017, 15:42
Come sempre ringrazio chi mi ha risposto e posto il codice funzionante :ciauz:



#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cstring>


#define N 10


void Leggi_Mat(int a[N][N],int b[N][N],int row,int column){


for(int i=0;i<row;i++){

for(int j=0;j<column;j++){

printf("Inserisci elmento di a[%d][%d]: ",i,j);
scanf("%d",&a[i][j]);

}
}
printf("\n");
for(int i=0;i<row;i++){

for(int j=0;j<column;j++){

printf("Inserisci elmento di b[%d][%d]: ",i,j);
scanf("%d",&b[i][j]);

}
}
}
void Somma_Mat(int a[N][N],int b[N][N],int row,int column){
FILE *fp;
fp=fopen("somma.txt","w");

int c[N][N];

printf("\nLa matrice somma e':\n");
int i, j;
for(int i=0;i<row;i++){

for(int j=0;j<column;j++)

c[i][j]=a[i][j]+b[i][j];
}
for(int i=0;i<row;i++){

for(int j=0;j<column;j++){
printf("%3d ",c[i][j]);
fprintf(fp,"%3d", c[i][j]);


}
fprintf(fp, "\n");
printf("\n");
}
fclose(fp);
printf("\nLa matrice letta dal file di testo e': \n");
fp=fopen("somma.txt","r");
for(int i=0;i<row;i++){


for(int j=0;j<column;j++){


fscanf(fp,"%d",&c[i][j]);
printf("%3d ", c[i][j]);


}
fscanf(fp, "\n");
printf("\n"); // Nuova riga


}
fclose(fp);
return;
}
int main() {
int a1[N][N],row,column;
int b1[N][N];
printf("Inserisci numero di righe: ");
scanf("%d",&row);
printf("Inserisci numero colonne: " );
scanf("%d",&column);


Leggi_Mat(a1,b1,row,column);
Somma_Mat(a1,b1,row,column);
return 0;
}

Loading