Eh si ho riletto secondo l' esempio della tua matrice ( ma non l' ho testato eseguendolo perchè mi scoccio di scrivere il programma xD ) comunque ti spiego quello che ho capito:
Innanzitutto sono sbagliati anche gli altri perchè nella prima riga ( 5 5 5 ) ci sono due occorrenze e non tre.
Il problema consiste nel fatto che fa lo stesso algoritmo partendo dall' elemento successivo , esempio con la prima riga:
partiamo dalla seconda posizione ( j=1 ---> 5 ) m[0][1] == m[0][2]? si -> occ++ ( 1 )
m[0][1] == m[0][3]) ? si - > occ++ ( 2 ) ; ora finisce il secondo ciclo e si incrementa il primo e quindi j = 2:
m[0][2] == m[0][3] ? si ->> occ++ ( 3: ERRORE )
Se fai lo stesso esempio con l' ultima riga vedi che ti spieghi il motivo per cui escono 6 occorrenze e non 3 . Quindi per cui penso che si possa risolvere in questo modo:
void calcolaOccorrenze(matrice m,int r,int c, vettore & v,int rpm){
int i=0;
bool continuo= true;
while(i<r)
{
int occ=0;
continuo=true;
for( int j=0;j<c-1;j++)
{
if ( continuo )
for(int k=j+1;k<c;k++)
if(m[i][j]==m[i][k])
{
occ++;
cout<<m[i][j];
v[i].val=m[i][j];
continuo=false;
}
}
v[i].occ=occ;
i++;
}
for (int p=0;p<c;p++)
cout<<"il numero "<<v[p].val<<" si ripete "<<v[p].occ<<" volte \n";
}
Il problema ora ( e non risolto ) è quello che ti ho detto io prima: se ci fossero due occorrenze di valori diversi? ( esempio: 1 2 1 2 ) questo algoritmo non lo permetterà e ti darà errore semmai inserissi una matrice di questo tipo ^^.
comunque sia controlla se funziona adesso
DIstinti Saluti,
Alessandro