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

    [C++] Caricamento matrice da file e inserimento somme in array

    Salve a tutti scusate se chiedo sempre spero un giorno di poter aiutare altri in difficoltà come me e ricambiare.

    Il mio programma è molto semplice deve prendere da file una matrice allocarla dinamicamente stamparla e poi successivamente prendere questa matrice e fare le somme degli elementi delle righe e metterli un array anch'esso allocato dinamicamente però mi stampa cose che non centrano non capisco cosa sbaglio.

    Questo è il moi file.txt



    3


    1 2 3


    4 5 8


    5 1 1

    Questa è la mia libreria:

    codice:
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <cstring>
    
    
    using namespace std;
    
    
    #define N 100
    
    
    typedef char Stringa [N];
    
    
    void carica_file(Stringa , fstream &, int *);
    void riempimento_matrice(Stringa ,fstream &, int **, int d);
    void stampa_matrice(int ** ,const int );
    void somma_righe(int **, int *, const int);
    void stampa_vettore(int *, const int );

    Questa è sono le mie funzioni :

    codice:
    #include "summat.h"
    
    
    void carica_file(Stringa nome, fstream &f, int *size){
        
        int d;
        
        cout<<"\n Inserisci nome del file :";
        cin.getline( nome, N-1, '\n');
        f.open(nome, ios::in);
        if(!f){
            
            cout<<"\n Errore in fase di apertura file insesitente o nome errato.";
            exit(1);
        
        }else {
            
            f>>d;
            
        }
        
        *size=d;
        
    
    
    
    
    }
    
    
    void riempimento_matrice(Stringa nome, fstream &f, int **m, int d){
        
        for(int i=0; i<d; i++){
            
            for(int j=0; j<d; j++){
                
                f>>m[i][j];
                
            }
            
        }
        
        f.close();
        
    }
    
    
    
    
    void stampa_matrice( int **matrix,const int dimensione){
        
        for(int i=0; i<dimensione; i++){
            
            for(int j=0; j<dimensione; j++){
                
                cout<<matrix[i][j]<<" ";
                
            }
            
        cout<<endl;
            
        }
        
        cout<<endl;
        
    }
    
    
    
    
    void somma_righe(int **mat, int *vett, const int dim){
        
        int somma=0, cont=0, tot=0, x=0;
        
        for(int i=0; i<dim; i++){
            
            for(int j=0; j<dim; j++){
                
                somma += mat[i][j];
                cont++;
                
                if(cont==dim){
                    
                    vett[x]=somma;
                    x++;    
                    somma=0;
                }
            }
            
        }
        
    }
    
    
    void stampa_vettore(int *vett, const int d){
        
        cout<<"\n Il vettore delle somme delle righe è il seguente: \n";
        
        for(int i =0; i<d; i++){
            
            cout<<vett[i]<<endl;
            
        }
        
    }
    Questo è il mio main:

    codice:
    #include "summat.h"
    
    
    int main(){
        
        Stringa nome_file;
        fstream file;
        int **mat;
        int dim;
        
    
    
        carica_file(nome_file, file, &dim);
        
        mat= new int*[dim];
        
        for(int i=0; i<dim; i++){
            
            mat[i]= new int[dim];
            
        }
    
    
        riempimento_matrice(nome_file, file, mat, dim);
        
        cout<<"\n La matrice letta è: \n";
        
        stampa_matrice(mat, dim);
        
        int *vet= new int [dim];
        stampa_vettore(vet, dim);
        
        
    
    
    }
    Questo è quello che mi stampa:

    1.png
    2.png

  2. #2
    Scusa, ma la funzione somma_righe(...) non la chiami da nessuna parte?
    Inoltre nella stessa funzione non azzeri count una volta arrivato a dim.
    Poi, se vuoi fare delle cose alla fine di ogni riga, basta mettere il codice tra la chiusura del secondo e del primo for, senza usare altri indici.

  3. #3
    Quote Originariamente inviata da scimmiaparlante Visualizza il messaggio
    Scusa, ma la funzione somma_righe(...) non la chiami da nessuna parte?
    Inoltre nella stessa funzione non azzeri count una volta arrivato a dim.
    Poi, se vuoi fare delle cose alla fine di ogni riga, basta mettere il codice tra la chiusura del secondo e del primo for, senza usare altri indici.
    sono proprio stupido a voglia a cercare di capire il problema comunque grazie ho cambiato un paio di linee di codice e funziona tutto

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 © 2020 vBulletin Solutions, Inc. All rights reserved.