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

    [C++] Matrice come argomento di funzione

    Salve a tutti,
    vorrei capire come si fa a passare una matrice come argomento ad una funzione (che poi ci farà i vari calcoli).
    Mi servirebbe passare una matrice di grandezza sia fissa e sia variabile (con dimensioni acquisite durante l'esecuzione del programma).
    Ho iniziato a scrivere qualcosa ma trovo degli errori e quindi chiedo a voi

    Per il momento devo imparare a gestire bene il passaggio di array multidimensionale.


    codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    
    int det(int** mat)
    {
        return 0;
          }
    
    
    int main()
    {
        int mat[5][5]  = {3,4,6,3,5,9,1,0,1,4,6,3,7,4,0,12,34,3,7,5,4,6,2,5,8};
    
        cout << "Determinante = " << det(mat) << endl;
    
        system("PAUSE");
        return EXIT_SUCCESS;
          }

    (Dev C++)
    >> Errori:

    main.cpp In function `int main()':
    22 main.cpp cannot convert `int (*)[5]' to `int**' for argument `1' to `int det(int**)'
    Makefile.win [Build Error] [main.o] Error 1



    Perfavore potete illuminarmi su come passare correttamente una matrice (sia statica che dinamica) ?

    Grazie a tutta la community

  2. #2
    Io farei così, gestisci dinamicamente la matrice e passi alla funzione la sua dimensione:

    Codice PHP:
    #include <iostream>

    using namespace std;

    int stampa(int** matint nint m) {
      for(
    int i=0;i<n;i++) {
        for(
    int j=0;j<m;j++) {
          
    cout << mat[i][j] << " | ";
        }
        
    cout << "\n";
      }
    }

    int main() {
      
    int** mat;
      const 
    int n 5;
      const 
    int m 5;

      
    mat = new int*[n];

      for(
    int i=0;i<n;i++) {
        
    mat[i] = new int[m];
      }

      for(
    int i=0;i<n;i++) {
        for(
    int j=0;j<m;j++) {
          
    mat[i][j] = i*j;
        }
      }

      
    stampa(mat,n,m);

      for(
    int i=0;i<n;i++) {
        
    delete(mat[i]);
      }

      
    delete(mat);


    Puoi anche creare una classe-involucro attorno alla matrice, in modo da evitare di passare le dimensioni alla funzione (avrai il tuo metodo get per questo).

  3. #3
    Per completezza, posto la soluzione che usa la classe:

    Codice PHP:
    #include <iostream>

    using namespace std;

    template <class T>
    class 
    Mat {
        private:
            
    int n;
            
    int m;
            
    T** mat;
        public:
            
    Mat(int p_nint p_m);
            ~
    Mat();
            
    int get_n();
            
    int get_m();
            
    Toperator() (int rowint col);
            
    T operator() (int rowint col) const;
            
            
    void init();
    };

    template <class T>
    Mat<T>::Mat(int p_nint p_m) {
        
    p_n;
        
    p_m;
        
        
    mat = new T*[n];
        
        for(
    int i=0;i<n;i++) {
            
    mat[i] = new T[m];
        }
    }

    template <class T>
    Mat<T>::~Mat() {
        for(
    int i=0;i<n;i++) {
            
    delete(mat[i]);
        }
        
        
    delete(mat);
    }

    template <class T>
    int
    Mat
    <T>::get_n() {
        return 
    n;
    }

    template <class T>
    int
    Mat
    <T>::get_m() {
        return 
    m;
    }

    template <class T>
    TMat<T>::operator() (int rowint col) {
        if(
    row >= || col >= m)
            throw 
    "Out of range";
        return 
    mat[row][col];
    }

    template <class T>
    T Mat<T>::operator() (int rowint col) const {
        if(
    row >= || col >= m)
            throw 
    "Out of range";
        return 
    mat[row][col];
    }

    template <class T>
    void Mat<T>::init() {
        for(
    int i=0i<n;i++) {
            for(
    int j=0;j<m;j++) {
                
    mat[i][j] = i*j;
            }
        }
    }

    template <class T>
    void stampa(Mat<Tmat) {
        for(
    int i=0;i<mat.get_n();i++) {
            for(
    int j=0;j<mat.get_m();j++) {
                
    cout << mat(i,j) << " | ";            
            }
            
    cout << "\n";
        }    
    }

    int main() {
        
    Mat<doublemat Mat<double>(3,4);
        
    mat.init();    
        
    stampa(mat);


  4. #4
    Grazie mille sei stato chiarissimo e completo.

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