› Foros › Off-Topic › Miscelánea
#include <iostream>
using namespace std;
const unsigned MAX_PAL_DIST=20;
const unsigned MAX_REP=20;
typedef int TArrayPosiciones[MAX_REP];
struct TPalabra{
unsigned numpos;
string palabra;
TArrayPosiciones arrpos;
};
typedef TPalabra TArrayPalabras[MAX_PAL_DIST];
struct TVector{
unsigned numelem;
TArrayPalabras arrpal;
};
bool esPalindromo(const string& palabra){
string aux="", aux2="";
for(unsigned cont=0; cont<palabra.size();cont++){
aux+=palabra[cont];
}
for(int cont=palabra.size()-1; cont>=0;cont--){
aux2+=palabra[cont];
}
return aux==aux2&&aux.size()>1;
}
bool primeraVez(const string& palabra, const TVector& vect){
bool laprimera=true;
int cont=0;
while(laprimera&&cont<vect.numelem){
if(vect.arrpal[cont].palabra==palabra){
laprimera=false;
}
++cont;
}
return laprimera;
}
int buscaPalabra(const string& palabra, const TVector& vect){
int cont=0;
while(vect.arrpal[cont].palabra!=palabra){
++cont;
}
return cont;
}
void muestraPalabra(int pos, const TVector& vect){
cout<<vect.arrpal[pos].palabra<<" ";
for(unsigned cont=0;cont<vect.arrpal[pos].numpos;cont++){
cout<<vect.arrpal[pos].arrpos[cont]<<" ";
}
}
void mostrarVector(const TVector& vect){
for(unsigned cont=0;cont<vect.numelem;cont++){
muestraPalabra(cont, vect);
cout<<endl;
}
}
int main(){
string palabra;
int cont=0;
TVector vect;
vect.numelem=0;
cout<<"Introduzca su texto (FIN para terminar)"<<endl;
cin>>palabra;
++cont;
while(palabra!="FIN"&&cont<MAX_PAL_DIST){
if(esPalindromo(palabra)){
if(primeraVez(palabra, vect)){
vect.arrpal[vect.numelem].numpos=0;
vect.arrpal[vect.numelem].palabra=palabra;
vect.arrpal[vect.numelem].arrpos[0]=cont;
++vect.numelem;
++vect.arrpal[vect.numelem].numpos;
}else{
int pos=buscaPalabra(palabra, vect);
vect.arrpal[pos].arrpos[vect.arrpal[pos].numpos]=cont;
++vect.arrpal[pos].numpos;
}
}
++cont;
cin>>palabra;
}
mostrarVector(vect);
}
#include <iostream>
using namespace std;
const unsigned MAX=5;
const unsigned MAX_REP=4;
const unsigned MAXNUMEROS=20;
typedef unsigned TPosiciones[MAX_REP];
typedef int TArrayNumeros[MAXNUMEROS];
struct TNumero{
unsigned num;
TPosiciones pos;
unsigned ocupa;
};
typedef TNumero TSecuencia[MAX];
struct TNumeros{
TSecuencia numeros;
unsigned tam;
};
struct TNumerosAux{
unsigned numelem;
TArrayNumeros arrnum;
};
bool esta(int numero, const TNumeros& vect){
bool encontrado=false;
int cont=0;
while(cont<vect.tam&&!encontrado){
if(vect.numeros[cont].num==numero){
encontrado=true;
}
++cont;
}
return encontrado;
}
int buscaPos(int numero, const TNumeros& vect){
int cont=0;
while(vect.numeros[cont].num!=numero){
++cont;
}
return cont;
}
int buscaYtacha(TNumerosAux& tachados, const TNumeros& vect){
int cont=0;
while(tachados.arrnum[cont]==-1){
++cont;
}
int mayor=cont;
for(unsigned cont2=0;cont2<vect.tam;cont2++){
if((vect.numeros[cont2].num>vect.numeros[mayor].num)&&(tachados.arrnum[cont2]!=-1)){
mayor=cont2;
}
}
tachados.arrnum[mayor]=-1;
return mayor;
}
void inicializa(TNumerosAux& tachados){
for(unsigned cont=0;cont<tachados.numelem;cont++){
tachados.arrnum[cont]=0;
}
}
void muestra(int posicion, const TNumeros& vect){
cout<<vect.numeros[posicion].num<<": ";
for(unsigned cont=0;cont<vect.numeros[posicion].ocupa;cont++){
cout<<vect.numeros[posicion].pos[cont]<<" ";
}
}
void analizaMayores(int m, const TNumeros& vect){
TNumerosAux tachados;
tachados.numelem=vect.tam;
inicializa(tachados);
for(unsigned cont=0;cont<m;cont++){
muestra(buscaYtacha(tachados, vect), vect);
cout<<endl;
}
}
int main(){
int m, numero, cont=0;
TNumeros vect;
vect.tam=0;
do{
cout<<"Introduzca un numero natural menor que 30"<<endl;
cin>>m;
}while(m<=0||m>30);
cout<<"Introduzca una secuencia de numeros acabada en 0"<<endl;
cin>>numero;
while(numero!=0){
if(!esta(numero , vect)){
vect.numeros[vect.tam].ocupa=0;
vect.numeros[vect.tam].num=numero;
vect.numeros[vect.tam].pos[0]=cont;
++vect.tam;
++vect.numeros[vect.tam].ocupa;
}else{
int posi= buscaPos(numero, vect);
vect.numeros[posi].pos[vect.numeros[posi].ocupa]=cont;
++vect.numeros[posi].ocupa;
}
++cont;
cin>>numero;
}
analizaMayores(m, vect);
}
if(primeraVez(palabra, vect)){
vect.arrpal[vect.numelem].numpos=0;
vect.arrpal[vect.numelem].palabra=palabra;
vect.arrpal[vect.numelem].arrpos[0]=cont;
++vect.numelem;
++vect.arrpal[vect.numelem].numpos; /* ¿por qué incrementas la posición del siguiente elemento de lista si esa palabra no ha sido añadida aun? .
Esto debió hacerse antes de ++vect.numelem, para corregir lo que te pasa después, si no me he perdido */
}else{
int pos=buscaPalabra(palabra, vect);
vect.arrpal[pos].arrpos[vect.arrpal[pos].numpos]=cont;
++vect.arrpal[pos].numpos;
}
#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);
}