Ciao,
ho provato a vedere velocemente di scrivere qualcosa che possa funzionare per la parte 3.

codice:
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main() {
    //matrice n per m;
    int n = 2, m = 2;
    int matrice[2][2];

    matrice[0][0] = 1;
    matrice[0][1] = 1;
    matrice[1][0] = 1;
    matrice[1][1] = 4;

    int freq[4][2]; //array freq contiene il valore del numero e quante sono
    //le ricorrenze di questo numero
    //in freq, freq[n*m][0] = valore del numero; invece freq[n*m][1] = quante 
    //volte appare in matrice
    //percio' la prima colonna dell'array deve poter contenere al 
    //massimo n*m numeri (se sono tutti numeri diversi)

    //inizializziamo tutti i campi di freq a 0;
    for (int i = 0; i < (n*m); i++){
        freq[i][0] = 0;
        freq[i][1] = 0;
    }
    //cicliamo gli elementi di di freq per creare un array di numeri
    // che appaiono in matrice e la loro frequenza
    int numero;
    for (int e = 0; e < n; e++) {
        for (int f = 0; f < m; f++) {
            //prendi il numero dalla matrice e lo vai ad immettere nell'array delle frequenze
            numero = matrice[e][f];
            for (int g = 0; g < (e+f+1); g++) {
                //controlli se il numero e' gia stato inserito
                if (freq[g][1] == 0) {
                    //aumenti la frequenza di uno
                    freq[g][0] = numero;
                    freq[g][1] = 1;
                    break;
                }
                else {
                    if (freq[g][0] == numero) {
                        freq[g][1]++;
                        break;
                    }
                }
            }
        }
    }

    int freq_maggiore = 1;
    int numero_piu_frequente;
    int frequenza;
    //controllare quale e' il numero che appare piu volte
    for (int i = 0; i < (n*m); i++) {
        frequenza = freq[i][1];
        //controlla che questo numero, ovvero freq[i][0] appaia piu volte di 1.
        if (frequenza > freq_maggiore) {
                freq_maggiore = frequenza;
                numero_piu_frequente = freq[i][0];
        }
    }
    //controllare che il numero piu frequente sia solo uno
    int count = 0;
    for (int i = 0; i < (n*m); i++) {
        if (freq[i][0] == numero_piu_frequente) {
                count++;
        }
    }

    if (count > 1 || freq_maggiore == 1) {
        cout << "Non esiste un numero presente piu volte!" << endl;
    }
    else {
        cout << "Il numero che appare piu volte(" << freq_maggiore << " volte): ";
        cout << numero_piu_frequente << endl;
    }
}
Dovresti inserire questo codice sotto tutto il resto del tuo e cambiare la mia variabile matrice[][] in quella tua. Nel codice sopra, io ho creato una matrice 2x2 e ho inizializzato i campi nei numeri che ho scelto io. Per far funzionare il tuo codice con il mio devi cambiare il mio utilizzando le tue variabili (le mie righe = n, le mie colonne = m).

L'array freq, e' un array che salva il numero che e' stato inserito in matrice e quante volte questo numero appare in tutta la matrice. Non ho avuto modo di testare questo snippet a fondo, quindi potrebbero esserci dei bugs. Prova a compilarlo e a vedere se capisci come funziona.

Beavey