C' erano delle cose che non avevano senso come:
for(int r=0;r<N;r++)
{
for(int j=0;j<N;j++)
{
a[r][j]=n;
}
}
dove l' array a è già inizializzato e non si capisce perchè lo inizializzi con n.
Inoltre nella funzione occorrenze inserivi l' istruzione:
if(contatore==k)
cond=true;
all' interno del ciclo for e ciò non è corretto, mentre la funzione condizione è fatta bene.
Aggiungendo la funzione cin per inserire il valore n da tastiera, il programma corretto è il seguente:
#include<iostream>
using namespace std;
const int N=7;
bool condizione(int [N][N],int ,int, int);
bool occorrenze(int [N][N], int, int);
int main()
{
int k,n;
int a[N][N]={{1,2,3,1,1,5,1},{4,1,1,2,1,8,8},{4,3,1,9,7,6,1},{7,1,1,1,1,8,8},{3,4,5,6,2,1,8},{2,1,1,9,1,1,7},{1,1,1,1,2,2,3}};
cout<<"Inserire un numero k per le occorrenze:"<<endl;
cin>>k;
cout<<"Inserire il numero n da ricercare:"<<endl;
cin>>n;
if(occorrenze(a,k,n))
cout<<"e' verificata la condizione dell'esercizio"<<endl;
else
cout<<"non e' verificata la condizione dell'esercizio"<<endl;
return 0;
}
bool condizione(int a[N][N], int k, int n, int r)
{
int j,i;
int count=0;
bool trovato=false;
j=0;
while(j<N && !trovato)
{
if(a[r][j]==n)
{
count++;
trovato=count>=k;
}
j++;
}
return trovato;
}
bool occorrenze(int a[N][N], int k, int n)
{
int contatore=0;
bool cond=false;
for(int i=0; i<N; i++)
{
if(condizione(a,k,n,i))
contatore++;
}
if(contatore==k)
cond=true;
return cond;
}