Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Salvare e leggere matrice somma da un file - Linguaggio[C]

    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 :
    codice:
    #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!!!
    Ultima modifica di AmedeoFalco; 30-08-2017 a 11:54

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    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.



    codice:
    /*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 
    
    
    
    }
    Ultima modifica di torn24; 31-08-2017 a 08:34
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Salva anche righe e colonne:
    codice:
    righe colonne
    a . . .
    . . . .
    . . . .
    . . . .
    . . . d
    esempio:
    codice:
    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
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    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

  5. #5
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    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.



    codice:
    /*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

    codice:
     FILE *file;
    file=fopen("somma.txt", "w") //per scritture
    
    file=fopen(" somma.txt", "r") //per lettura
    Ultima modifica di AmedeoFalco; 31-08-2017 a 13:54

  6. #6

    Codice funzionante

    Come sempre ringrazio chi mi ha risposto e posto il codice funzionante

    codice:
    #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;
    }
    Ultima modifica di AmedeoFalco; 31-08-2017 a 15:47

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.