Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: anonimo115 en 19 Agosto 2017, 11:24 am



Título: Cosa rarisima en codigo c++
Publicado por: anonimo115 en 19 Agosto 2017, 11:24 am
Buenos días.
Me tendria que salir ANA 1 15 19 pero sin embargo me sale ANA 15 19.
No se por qué se come la primera posición.
¿Podríais por favor echarle un vistazo?

Este es el enunciado

(http://s2.subirimagenes.com/imagen/previo/thump_9785956seleccin047.png)

y este mi codigo

Código
  1. #include <iostream>
  2. using namespace std;
  3. const unsigned MAX_PAL_DIST=20;
  4. const unsigned MAX_REP=20;
  5. typedef int TArrayPosiciones[MAX_REP];
  6.  
  7. struct TPalabra{
  8. unsigned numpos;
  9. string palabra;
  10. TArrayPosiciones arrpos;
  11. };
  12.  
  13. typedef TPalabra TArrayPalabras[MAX_PAL_DIST];
  14.  
  15. struct TVector{
  16. unsigned numelem;
  17. TArrayPalabras arrpal;
  18. };
  19.  
  20. bool esPalindromo(const string& palabra){
  21.    string aux="", aux2="";
  22. for(unsigned cont=0; cont<palabra.size();cont++){
  23.    aux+=palabra[cont];
  24. }
  25. for(int cont=palabra.size()-1; cont>=0;cont--){
  26.    aux2+=palabra[cont];
  27. }
  28. return aux==aux2&&aux.size()>1;
  29. }
  30.  
  31. bool primeraVez(const string& palabra, const TVector& vect){
  32. bool laprimera=true;
  33. int cont=0;
  34. while(laprimera&&cont<vect.numelem){
  35.    if(vect.arrpal[cont].palabra==palabra){
  36.        laprimera=false;
  37.    }
  38.    ++cont;
  39. }
  40. return laprimera;
  41. }
  42.  
  43. int buscaPalabra(const string& palabra, const TVector& vect){
  44. int cont=0;
  45. while(vect.arrpal[cont].palabra!=palabra){
  46.    ++cont;
  47. }
  48. return cont;
  49. }
  50.  
  51. void muestraPalabra(int pos, const TVector& vect){
  52. cout<<vect.arrpal[pos].palabra<<" ";
  53. for(unsigned cont=0;cont<vect.arrpal[pos].numpos;cont++){
  54.    cout<<vect.arrpal[pos].arrpos[cont]<<" ";
  55. }
  56. }
  57.  
  58. void mostrarVector(const TVector& vect){
  59. for(unsigned cont=0;cont<vect.numelem;cont++){
  60.    muestraPalabra(cont, vect);
  61.    cout<<endl;
  62. }
  63. }
  64.  
  65. int main(){
  66. string palabra;
  67. int cont=0;
  68. TVector vect;
  69. vect.numelem=0;
  70. cout<<"Introduzca su texto (FIN para terminar)"<<endl;
  71. cin>>palabra;
  72. ++cont;
  73. while(palabra!="FIN"&&cont<MAX_PAL_DIST){
  74.    if(esPalindromo(palabra)){
  75.        if(primeraVez(palabra, vect)){
  76.            vect.arrpal[vect.numelem].numpos=0;
  77.            vect.arrpal[vect.numelem].palabra=palabra;
  78.            vect.arrpal[vect.numelem].arrpos[0]=cont;
  79.            ++vect.numelem;
  80.            ++vect.arrpal[vect.numelem].numpos;
  81.        }else{
  82.            int pos=buscaPalabra(palabra, vect);
  83.            vect.arrpal[pos].arrpos[vect.arrpal[pos].numpos]=cont;
  84.            ++vect.arrpal[pos].numpos;
  85.        }
  86.    }
  87.    ++cont;
  88.    cin>>palabra;
  89. }
  90. mostrarVector(vect);
  91. }

Muchas gracias de antemano


Título: Re: Cosa rarisima en codigo c++
Publicado por: AlbertoBSD en 5 Septiembre 2017, 00:42 am
La imagen es muy pequeña y el codigo no se entiende del todo. Si tuviera el enunciado mas grande, no me daria flojera depurar el codigo paso a paso.

Saludos!