Ringrazio entrambi! Quindi Scara se ho capito bene non sempre devo dichiarare parametri di I/O per le funzioni? Ma se non lo faccio non rischio che il compilatore mi dia errori?
Mi è molto più chiaro lo scopo di size_t, e ho compreso concettualmente come funziona l'allocazione di array di array! Inoltre poco fa ho aggiunto una nuova funzione al mio programma, completandolo. Ecco qui:
codice:#include <iostream>#include <fstream> #include <cstdlib> using namespace std; // lettura matrice da file + allocazione int **readMat(int**&m, size_t& size) { ifstream in("mat.txt"); in >> size; m = new int *[size]; for(int i = 0; i < size; ++i) m[i] = new int[size]; for(int i = 0; i < size; ++i) for(int j = 0; j < size; ++j) in >> m[i][j]; return m; } // Liberazione memoria void freeMat(int **&m, size_t size) { for(int i = 0; i < size; ++i) delete[] m[i]; delete[] m; } // Calcolo del minimo delle righe int calc_ind_min(int **m,int size,int r) { int min=m[r][0]; int i,indmin=0; for (i=0;i<size;i++) { if (m[r][i]<min) { min=m[r][i]; indmin=i; } } return indmin; } // Calcolo del massimo delle colonne + calcolo e stampa del punto di sella int trova_punto_sella(int**m,int size, int t) { int sella; int posc; posc = calc_ind_min(m,size,t); int maxcol=m[t][posc]; for(int i=0;i<size;i++) { if(maxcol<m[i][posc]) maxcol=m[i][posc]; } if(maxcol==m[t][posc]) { sella=maxcol; cout<<sella<<" Punto di sella in posizione "<<t<<" "<<posc<<endl; return sella; } else return -1; } int main(void) { size_t size; int **m; readMat(m, size); // stampa a video della matrice allocata for(int i = 0; i < size; ++i) { for(int j = 0; j < size; ++j) cout << m[i][j] << '\t'; cout << endl; } int r; for(r=0;r<size;r++) { calc_ind_min(m,size,r); } cout << endl; cout << endl; int t; for(t=0;t<size;t++) { trova_punto_sella(m,size,t); } freeMat(m, size); return 0; }

Rispondi quotando
