I do not know how to do this exercise.
It gives me that the number of occurrences is zero and as much as I look at the code I do not know why. This is my tried code:
#include <iostream>
using namespace std;
const unsigned TAM1=11;
const unsigned TAM2=4;
typedef unsigned TNumeros[TAM1];
typedef unsigned TPermutacion[TAM2];
typedef bool TTachados[TAM2];
void inicializa(TTachados& tachados){
for(unsigned cont=0;cont<TAM2;cont++){
tachados[cont]=false;
}
}
bool esta(int num, const TPermutacion& permutacion, const TTachados& tachados){
bool encontrado=false;
int cont=0;
while(cont<TAM2&&!encontrado){
if(permutacion[cont]==num&&tachados[cont]==false){
encontrado=true;
}
++cont;
}
return encontrado;
}
bool todosTachados(const TTachados& tachados){
bool loestan=true;
int cont=0;
while(loestan&&cont<TAM2){
if(tachados[cont]!=true){
loestan=false;
}
++cont;
}
return loestan;
}
bool esOcurrencia(int pos, const TNumeros& numeros,const TPermutacion& permutacion, TTachados& tachados){
for(int cont=pos;cont<TAM2+pos;cont++){
if(esta(numeros[cont], permutacion, tachados)){
tachados[cont-pos]=true;
}
}
return todosTachados(tachados);
}
unsigned numOcurrencias(const TNumeros& numeros, const TPermutacion& permutacion){
TTachados arrtachados;
int suma=0, cont=0;
inicializa(arrtachados);
while(cont+TAM2<=TAM1){
if(esOcurrencia(cont, numeros, permutacion, arrtachados)){
++suma;
}
inicializa(arrtachados);
++cont;
}
return suma;
}
void leeNumeros(TNumeros& arrnum){
for(unsigned cont=0;cont<TAM1;cont++){
cin>>arrnum[cont];
}
}
void leePermutacion(TPermutacion& arrper){
for(unsigned cont=0;cont<TAM2;cont++){
cin>>arrper[cont];
}
}
int main(){
TNumeros arrnum;
TPermutacion arrper;
cout<<"Introduzca los numeros"<<endl;
leeNumeros(arrnum);
cout<<"Introduzca la permutacion"<<endl;
leePermutacion(arrper);
cout<<"El numero de ocurrencias es de "<<numOcurrencias(arrnum, arrper);
}