Esercizio matrice trasposta c++

di il
1 risposte

Esercizio matrice trasposta c++

Buongiorno, devo svolgere un esercizio in cui si alloca una matrice di n righe e m colonne e la si riempe con numeri casuali.
dopodichè bisogna scrivere una funzione che esegua la matrice trasposta.

sotto incollo il mio file.cpp.
Quello che non capisco è il fatto che il terminale segnali una segmentation fault, mentre se eseguo lo stesso identico comando della funzione nel main (senza quindi usare la funzione void) il programma gira senza problemi e stampa i risultati correttamente.
grazie in anticipo.
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <ctime>

using namespace std;

void trasposta (double**, int, int, double**);

int main() {
    int n, m, r, c;
    double **matrix, **trasp;
    
    cout << "Num di righe della matrice? ";
    cin >> n;
    cout << "Num di colonne della matrice? ";
    cin >> m;
    
    matrix=new double *[n];
    for (int i=0; i< n; i++) {
        matrix[i]=new double [m];
    }
    srand(time(NULL));
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            matrix[i][j]=rand()%10;
        }
    }
    
    ofstream fout("matrix.dat");
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            fout << setw(15) << fixed << setprecision(1) << matrix[i][j];
        }
        fout << endl;
    }
    
    fout << '\n' << '\n';
        
    trasposta (matrix, n, m, trasp);
    
    for (int i=0; i<m; i++) {
        for (int j=0; j<n; j++) {
            fout << setw(15) << fixed << setprecision(1) << trasp[i][j];
        }
        fout << endl;
   }
        
    fout.close();
    
    for (int i=0; i<n; i++) {
        delete [] matrix[i];
    }
    for (int i=0; i<m; i++) {
         delete [] trasp[i];
    }
    delete [] matrix;
    delete [] trasp;
    
    return 0;
}

void trasposta (double **matrix, int n, int m, double **trasp) {
      
    trasp=new double *[m];
    for (int i=0; i<m; i++) {
        trasp[i]=new double [n];
    }
    
    for (int i=0; i<m; i++) {
        for (int j=0; j<n; j++) {
            trasp[i][j]=matrix[j][i];
        }
    }
}  

1 Risposte

  • Re: Esercizio matrice trasposta c++

    La funzione deve utilizzare un triplo puntatore

    void trasposta(double**, int, int, double***);

    quindi devi chiamarla con

    trasposta(matrix, n, m, &trasp);

    e modificarne il contenuto in maniera opportuna.
Devi accedere o registrarti per scrivere nel forum
1 risposte