traccia esercizio: Si progetti l'algoritmo di un programma MODULARE che carichi da un file, che si trova nel percorso c:/matrice.txt, gli elementi di una matrice composta da numeri interi.Si stampino a video gli elementi di valore massimo di ogni riga e quelli di valore minimo di ogni colonna.
Si creino e utilizzino inoltre delle librerie e si ricerchino i punti di sella (elementi
che siano contemporaneamente massimo di riga e minimo di colonna).
Ho svolto tutto l'esercizio, i massimi di riga e i minimi di colonna li ho trovati ma per quanto riguarda i punti di sella, non ci sono riuscito...
La matrice che si trova in c:/matrice.txt è:
4 4
45 90 55 24
66 99 72 78
33 98 67 88
12 6 7 9
Questi sono i miei 3 file:

1)libreria.h



#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string.h>


using namespace std;
#define MAX 50
typedef int vettore[MAX];
typedef int matrice[MAX][MAX];
typedef char stringa[MAX];




void caricaMatrice(matrice, int&, int&);
void passaRiga(matrice, int&, int&);
void passaColonna(matrice, int&, int&);
int ricercaMassimo(vettore, int&, int&);
int ricercaMinimo(vettore, int&);
void ricercaPuntiDiSella(matrice, int&, int&);

2)funzioni.cpp
#include "libreria.h"
void caricaMatrice(matrice m, int& r, int& c){
ifstream f;
stringa percorso="c:/matrice.txt";
f.open(percorso);
if(!f){
cout<<"***ERRORE***\nIl file non e' stato trovato";
exit(1);
}
while(!f.eof()){
f>>r;
f>>c;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
f>>m[i][j];
cout<<m[i][j]<<"\t";
}
cout<<endl;
}


}

}
void passaRiga(matrice a, int& nriga, int& ncol){
int max=0;
int p=0;
for(int i=0; i<nriga; i++){
max=ricercaMassimo(a[i], ncol, p);
cout<<"Il massimo della "<<i+1<<" riga e' "<<max;
cout<<endl;
}
}
int ricercaMassimo(vettore v, int& c, int& pos){
int M=v[0];
for(int i=0; i<c; i++){
if(v[i]>M){
M=v[i];
pos=i;
}
}
return M;
}


void passaColonna(matrice a, int& nriga, int& ncol){
int min=0;
vettore b;
for(int j=0; j<ncol; j++){
for(int i=0; i<nriga; i++){
b[i]=a[i][j];
}
min=ricercaMinimo(b, nriga);
cout<<"Il minimo della "<<j+1<<" colonna e' "<<min;
cout<<endl;
}
}


int ricercaMinimo(vettore v, int& r){
int m=v[0];
for(int i=0; i<r; i++){
if(v[i]<m){
m=v[i];
}
}
return m;
}


void ricercaPuntiDiSella(matrice m, int& r, int& c){
vettore b;
int mag=0, mino=0;
int p=0;
for(int i=0; i<r; i++){
mag=ricercaMassimo(m[i], c, p);
for(int j=p; j<p+1; j++){
for(int q=0; q<r; q++){
b[q]=m[q][j];
}
mino=ricercaMinimo(b, r);
if(mag==mino){
cout<<mag<<" e' un punto di sella";
cout<<endl;
}
}

}

}
3)main.cpp


#include "libreria.h"
int main(){
matrice mat;
int nr=0, nc=0;
caricaMatrice(mat, nr, nc);


passaRiga(mat, nr, nc);
passaColonna(mat, nr, nc);
ricercaPuntiDiSella(mat, nr, nc);
return 0;
}


Il programma funziona, infatti mi trova tutti i massimi di riga e tutti i minimi di colonna, però non mi esce che 12 e' un punto di sella...qualcuno può dirmi dove sbaglio?