Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62

    [C] salvare matrice in un file

    ciao a tutti!!
    devo scrivere un programma che legga in input due matrici, calcoli la matrice somma e la salvi all'interno di un file testo..
    io l'ho fatto..o almeno credo di averlo fatto..ed è proprio questo che vi chiedo è giusto quello che ho scritto?

    codice:
    #include<stdio.h>
    #include<iostream>
    
    /*definizione costanti simboliche*/
    
    #define MAXRIGHE 20
    #define MAXCOLONNE 30
    
     main()
    {
          
        
          int nrighe;
          int ncolonne;
          
          /*definizione di array bidimensionali*/
          int a[MAXRIGHE][MAXCOLONNE], b[MAXRIGHE][MAXCOLONNE], c[MAXRIGHE][MAXCOLONNE];
          
          /*definizione di prototipi di funzioni*/
          void ingresso(int a[][MAXCOLONNE], int nrighe, int ncolonne);
          void somma(int a[][MAXCOLONNE],int b[][MAXCOLONNE],int c[][MAXCOLONNE], int nrighe, int ncolonne);
          void uscita(int c[][MAXCOLONNE], int nrighe, int ncolonne);
          
          /*lettura e scrittura tabella di numeri "a" e "b"*/
          printf("di quante righe si compone la tabella? ");
          scanf("%d", &nrighe);
          printf("e di quante colonne? ");
          scanf("%d", &ncolonne);
          
          printf("la tabella 'a' e' la seguente:\n");
          ingresso (a,nrighe,ncolonne);
          
          printf("la tabella 'b' e' la seguente: \n");
          ingresso (b,nrighe,ncolonne);
          
          somma(a,b,c,nrighe,ncolonne);
         
          
          /*effettuata l'operazione ottengo la tabella "c"*/
          printf("la somma degli elementi di ciascuna tabella ci da la seguente tabella 'c': \n" );
          uscita(c,nrighe,ncolonne);
          
          }
          
          /*legge la prima tabella di numeri*/
          void ingresso(int a[][MAXCOLONNE], int m, int n)
          
          {
               int riga, colonna;
               
               for(riga=0; riga<m; ++riga){
                           printf("inserisci i dati per la riga numero %2d|n", riga+1);
                           for(colonna=0;colonna<n;++colonna)
                           scanf("%d", &a[riga][colonna]);
                           }
                           return;
                           }
           /*somma gli elementi della prima tabella a quelli della seconda tabella*/                 
          void somma(int a[][MAXCOLONNE], int b[][MAXCOLONNE],int c[][MAXCOLONNE], int m, int n)
          {
               int riga, colonna;
               for(riga=0;riga<m;++riga)
               for(colonna=0;colonna<n;++colonna)
               c[riga][colonna]= a[riga][colonna] + b[riga][colonna];
               return;
               }
               
               /*scrive la tabella somma,ossia "c"*/
              void uscita(int c[][MAXCOLONNE],int m, int n)
              {
                  FILE *ftp;
                   int riga, colonna;
                   for(riga=0; riga<m;++riga){
                               for(colonna=0;colonna<n;++colonna)
                               printf("%4d", c[riga][colonna]);
                               printf("\n");
                               }
                               ftp=fopen("sample.dat", "w");
                               fprintf(ftp,"%4d", c[riga][colonna]);
                               fclose(ftp);
                               system("PAUSE");
                               return;
                               }
    pongo questa domanda perchè per me è come se non avessi creato il file dove porre la matrice somma..almeno visivamente, quando compilo non mi pare
    grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    1) i prototipi delle funzioni non si mettono all'interno del main ma fuori

    2) nella funzione uscita i cicli visualizzano i dati ma non li scrivono nel file. Tra la fopen e la fclose ci sta solo una fprintf (e sbagliata) mentre ci dovrebbero essere i cicli ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    la fprintf dovrebbe essere corretta così..
    giusto?

    codice:
        
    
    fprintf(ftp,"%4d", riga, colonna);
    poi mettendo tra la fopen e la fclose i cicli ho modificato in questa maniera

    codice:
     
      void uscita(int c[][MAXCOLONNE],int m, int n)
              {
                  FILE *ftp;
                   int riga, colonna;
                   ftp=fopen("sample.dat", "w");
                   for(riga=0; riga<m;++riga){
                               for(colonna=0;colonna<n;++colonna)
                               printf("%4d", c[riga][colonna]);
                               printf("\n");
                               }
                               
                              fprintf(ftp,"%4d", riga, colonna); 
                              
                               fclose(ftp);
                               system("PAUSE");
                               return;
                               }
    non capisco però,credo che continuo a sbagliare qualcosa..metto o non metto la fprintf il risultato e quindi la matrice somma ce l'ho ugualmente..
    e quindi in questo caso è inutile mettere la fprinf perchè ho già le printf? o sto continuando a non mettere la matrice nel file?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda che è semplice, ma ti devi concentrare un attimo ...

    1) per inviare i dati al file devi usare esclusivamente le fprintf (le printf si usano per il video, ma non è questo il caso dato che devi scrivere su file e non su video); quindi, non ci devono essere printf ma solo fprintf

    2) se scrivi

    fprintf(ftp,"%4d", riga, colonna);

    non fai altro che mandare su file il valore della variabile riga e non i dati della matrice

    Per inviare i dati della matrice dovrai inviare il valore di c e quindi

    fprintf("%4d", c[riga][colonna]);

    all'interno dei cicli

    P.S. La system("PAUSE"); alla fine non serve
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    quindi di fondo quando compilo non vedo niente?
    devo fare questo
    codice:
       void uscita(int c[][MAXCOLONNE],int m, int n)
              {
                  FILE *ftp;
                   int riga, colonna;
                   ftp=fopen("sample.dat", "w");
                   for(riga=0; riga<m;++riga){
                               for(colonna=0;colonna<n;++colonna);
                              }
                               
                              fprintf(ftp,"%4d",c[riga][colonna]); 
                              fclose(ftp);
                              system("PAUSE");
                              return;
                               }
    però credo che la fprintf deve essere così

    fprintf(ftp,"%4d",c[riga][colonna])
    altrimenti il compilatore mi da errore dicendo che nelle fprintf manca FILE* cioè ftp..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da milu
    quindi di fondo quando compilo non vedo niente?
    Ma che vuoi vedere durante la compilazione?

    Tu sai cosa vuol dire compilare?

    Devi eseguire il codice per capire se funziona e se ci sono problemi ...


    devo fare questo
    Certo che la fprintf deve essere in quel modo (vedi di studiare la documentazione sulla fprintf ...).

    Ma deve stare all'interno del secondo ciclo for ... fai attenzione alle parentesi { } dei cicli perché attualmente la fprintf è fuori dai cicli ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    inizialmente avevo scritto la fprinf in quel modo e avevi detto che era sbagliata credevo fosse scritta male..non credevo che l'errore fosse nel fatto che non era nei cicli..
    cmq quando faccio partire il run(sbagliavo a dire quando compilo),
    io inserisco da tastiera le due matrici a, b e la matrice c alla fine non la vedo..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da milu
    inizialmente avevo scritto la fprinf in quel modo e avevi detto che era sbagliata
    No ... fai attenzione alle risposte ... avevo scritto che questa

    fprintf(ftp,"%4d", riga, colonna);

    era sbagliata e che quello che dovevi usare era questa

    fprintf("%4d", c[riga][colonna]);

    e nel ciclo.

    io inserisco da tastiera le due matrici a, b e la matrice c alla fine non la vedo..
    Non la vedi aprendo il file ... giusto?

    E hai corretto il codice come ti ho detto o no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    ho modificato così
    codice:
             
     void uscita(int c[][MAXCOLONNE],int m, int n)
              {
                  FILE *ftp;
                   int riga, colonna;
                   ftp=fopen("sample.dat", "w");
                   if(ftp){
                   for(riga=0; riga<m;++riga){
                               for(colonna=0;colonna<n;++colonna)
                               fprintf(ftp,"%4d",c[riga][colonna]); 
                               }
                               fclose(ftp);
                               }
                               else
                               printf("errore durante l'apertura del file");
                               system("PAUSE");
                            return;
                               }
    e poichè non mi dice errore durante l'apertura del file, dovrebbe essere fatta bene..giusto?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scrivila così

    codice:
    void uscita(int c[][MAXCOLONNE],int m, int n)
    {
    	FILE *ftp;
    	int riga, colonna;
    
    	ftp=fopen("sample.dat", "w");
    
    	if(ftp)
    	{
    		for(riga=0; riga<m;++riga)
    		{
    		    for(colonna=0;colonna<n;++colonna)
    		       fprintf(ftp, "%4d ",c[riga][colonna]); 
    
    		    fprintf(ftp, "\n");
    		}
    
    		fclose(ftp);
    	}
    	else
    		printf("errore durante l'apertura del file");
    
    	return;
    }
    in modo che ci siano degli spazi tra i dati e che questi siano organizzati in linee.

    Inoltre, in questo modo il codice è più chiaro ...

    Se funziona o no, infine, dovresti saperlo aprendo il file sample.dat che il programma ha scritto ... lo hai mai fatto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.