Il codice mi sembra corretto, per quanto riguarda i suggerimenti ci sarebbero parecchie ottimizzazioni da fare, a scriverle tutte faccio prima a postarti il codice di come svolgerei io l'esercizio:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const unsigned int R = 10;
unsigned int numero_casuale(unsigned int MIN, unsigned int MAX);
void genera_matrice_casuale(int matrice[][R], unsigned int righe, unsigned int colonne);
void stampa_matrice(int matrice[][R], unsigned int righe, unsigned int colonne);
void genera_vettore_pari_dispari(int matrice[][R], unsigned int righe, unsigned int colonne, int v_pari[], unsigned int &dim_pari, int v_dispari[], unsigned int &dim_dispari);
void stampa_vettore(int vettore[], unsigned int dim);
int media_vettore(int vettore[], unsigned int dim);
void sostituzione_valori_matrice(int matrice[][R], unsigned int righe, unsigned int colonne, int target, int n);
unsigned int indice_max_diagonale_principale(int matrice[][R], unsigned int righe, unsigned int colonne);
void elimina_riga_matrice(int matrice[][R], unsigned int &righe, unsigned int colonne, unsigned int indice_riga);
int main()
{
srand(time(0));
int m[R][R];
int v_p[R * R];
int v_d[R * R];
unsigned int l_p;
unsigned int l_d;
unsigned int r = numero_casuale(R / 2, R);
unsigned int c = r;
genera_matrice_casuale(m, r, c);
cout << "MATRICE CASUALE:\n";
stampa_matrice(m, r, c);
genera_vettore_pari_dispari(m, r, c, v_p, l_p, v_d, l_d);
cout << "\n\nVETTORE PARI:\n";
stampa_vettore(v_p, l_p);
cout << "\n\nVETTORE DISPARI:\n";
stampa_vettore(v_d, l_d);
sostituzione_valori_matrice(m, r, c, 0, media_vettore(v_p, l_p));
sostituzione_valori_matrice(m, r, c, 50, media_vettore(v_d, l_d));
elimina_riga_matrice(m, r, c, indice_max_diagonale_principale(m, r, c));
cout << "\n\nMATRICE MODIFICATA:\n";
stampa_matrice(m, r, c);
}
unsigned int numero_casuale(unsigned int MIN, unsigned int MAX)
{
return MIN + rand() % (MAX - MIN + 1);
}
void genera_matrice_casuale(int matrice[][R], unsigned int righe, unsigned int colonne)
{
for(unsigned int i = 0; i < righe; ++i)
{
for(unsigned int j = 0; j < colonne; ++j)
{
matrice[i][j] = numero_casuale(0, 99);
}
}
}
void stampa_matrice(int matrice[][R], unsigned int righe, unsigned int colonne)
{
for(unsigned int i = 0; i < righe; ++i)
{
for(unsigned int j = 0; j < colonne; ++j)
{
if(matrice[i][j] < 10)
{
cout << " ";
}
cout << matrice[i][j] << " ";
}
cout << endl;
}
}
void genera_vettore_pari_dispari(int matrice[][R], unsigned int righe, unsigned int colonne, int v_pari[], unsigned int &dim_pari, int v_dispari[], unsigned int &dim_dispari)
{
dim_pari = 0;
dim_dispari = 0;
for(unsigned int i = 0; i < righe; ++i)
{
for(unsigned int j = 0; j < colonne; ++j)
{
if(matrice[i][j] % 2)
{
v_dispari[dim_dispari++] = matrice[i][j];
}
else
{
v_pari[dim_pari++] = matrice[i][j];
}
}
}
}
void stampa_vettore(int vettore[], unsigned int dim)
{
for(unsigned int i = 0; i < dim; ++i)
{
cout << vettore[i] << " ";
}
}
int media_vettore(int vettore[], unsigned int dim)
{
int somma = 0;
for(unsigned int i = 0; i < dim; ++i)
{
somma += vettore[i];
}
return somma / dim;
}
void sostituzione_valori_matrice(int matrice[][R], unsigned int righe, unsigned int colonne, int target, int n)
{
for(unsigned int i = 0; i < righe; ++i)
{
for(unsigned int j = 0; j < colonne; ++j)
{
if(matrice[i][j] == target)
{
matrice[i][j] = n;
}
}
}
}
unsigned int indice_max_diagonale_principale(int matrice[][R], unsigned int righe, unsigned int colonne)
{
unsigned int r = righe;
if(colonne < righe)
{
r = colonne;
}
unsigned int indice = 0;
for(unsigned int i = 1; i < r; ++i)
{
if(matrice[i][i] > matrice[indice][indice])
{
indice = i;
}
}
return indice;
}
void elimina_riga_matrice(int matrice[][R], unsigned int &righe, unsigned int colonne, unsigned int indice_riga)
{
--righe;
for(unsigned int i = indice_riga; i < righe; ++i)
{
for(unsigned int j = 0; j < colonne; ++j)
{
matrice[i][j] = matrice[i + 1][j];
}
}
}
Magari puoi trarne qualche spunto. Se qualcosa non ti è chiaro o trovi qualche errore, fammi sapere!
EDIT:
corretto il verso della diseguaglianza nella funzione indice_max_diagonale_principale().