Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gringo89 en 15 Abril 2012, 22:51 pm



Título: Ejercicio de Recursividad
Publicado por: gringo89 en 15 Abril 2012, 22:51 pm
Hola gente, ando haciendo un tp y me quede trancado en una parte, les dejo el enunciado del problema:

A partir de un texto de más de 100 caracteres, deberá consideralo como un puntero a Char y aplicar aritmetica de punteros.
Deberá contar cuantas veces se repite cada letra, cuantas son vocales, cuantas consonantes y cuantos blancos, en una única pasada, mediante una funcion recursiva final.
Deberá escribir como comentario del codigo, cuales son los tipos y las funciones que intervienen en la definicion recursiva.
Deberá transformarla según dichos parametros en una función iterativa que calcule lo mismo.
Ambas deben retornar un arreglo con los valores encontrados para cada letra, las vocales, las consonantes y los blancos.
Es decir, que deberá programar dos funciones que devuelvan el mismo resultado, una recursiva final y otra iterativa.


osea tengo que hacer el mismo ejercicio, pero uno usando recursividad y el otro iteracion.
Hice casi todo, pero no se como realizar el conteo de el numero de veces que esta cada letra en el texto mediante la función recursiva, si pudieran darme una pista les agradecería.

Les dejo el codigo que realice hasta ahora:

----------------------------------------------------------------------------------------------------------------
/* A partir de un texto de más de 100 caracteres, deberá consideralo como un puntero a Char y
aplicar aritmetica de punteros. Deberá contar cuantas veces se repite cada letra,
cuantas son vocales, cuantas consonantes y cuantos blancos, en una única pasada, mediante una funcion recursiva final.
Deberá escribir como comentario del codigo, cuales son los tipos y las funciones que intervienen en la definicion recursiva.
 Deberá transformarla según dichos parametros en una función iterativa que calcule lo mismo.
Ambas deben retornar un arreglo con los valores encontrados para cada letra, las vocales, las consonantes y los blancos.
 
Es decir, que deberá programar dos funciones que devuelvan el mismo resultado, una recursiva final y otra iterativa. */


#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;


void igualar(char *, char *);
void FuncionRe (char *, int, int, int, int);
void FuncionIt(char *, char*);

  
  
 int main()
 {
    int const cant=21;                          
    char texto[cant]="abcdefabcd  abcdefkl";
    char aux[cant]= "";
    int cont=0;
    //cout << "Introduce una frase: " << endl;
    //cin.getline(texto,20, '\n');
    cout << "Tu frase es: '" << texto << "'" << endl << endl;
    
    
    
    cout<< "Con funciones iterativas : " << endl;
    igualar(texto, aux);
    FuncionIt(aux, texto);
    cout<< endl << endl << endl << "---------------------------------------------------------------" << endl<< "Con funciones recursiva : " << endl;
    igualar(texto, aux);
    FuncionRe(texto, 0, 0, 0, 0);
  
 
 
    system("PAUSE");
    return 0;    
      
}  

void igualar (char *tex, char *au)
{
     //cout<<" TEX ES = " << tex << endl;
    
     for(int i=0;i<20;i++)
        {    
        //au=tex;
            *(au+i)=*(tex+i);
            //cout<<" *(AU+i) ES = " << *(au+i) << endl;
        }
    
     //cout<<" AU ES = " << au << endl;
            
}

void FuncionIt(char *b, char *text)
{
    
    char *g;
    char v,z;
    g=b;
    int contvoc=0, contcons=0, contesp=0;
    
    
    for(int i=0;i<20;i++)
        
         {
         int contletrep=0;            
      
            
                         for(int j=(i+1);j<(20);j++)
                                 {
                                     v=g;
                                     z=g[j];
                                    
                                   if((g)==(*(g+j)))
                                      if(*(g+j)!=NULL)
                                      {        
                                                
                                                //cout<<endl<<"Compara : "<<v<<" con: "<<z<<endl;                      
                                                contletrep++;
                                                //cout<<"\n"<<"entra al if"<<cont<<endl;
                                                
                                                *(g+j)=NULL;
                                                
                                            
                                       }
                                    
                                   }
                                   if(*(g+i)!=NULL)
                                    if(*(text+i)!=' ')
                                   {cout<<"La cantidad de veces que se repite "<<g<<" es : " << contletrep <<endl;}
                                  
                                  
                                    if( *(text+i) == 'a' || *(text+i)  =='e' || *(text+i)  =='i' ||*(text+i)  == 'o' || *(text+i)  =='u' )
                                   {
                                       contvoc++;
                                   }
                                   else if(*(text+i)==' ')
                                      contesp++;
                                   else
                                       contcons++;
                                          
                                  
         }
     cout<<endl<<"-------------"<<endl;                                    
     cout<< "La cantidad de vocales es = " << contvoc << endl;
     cout<< "La cantidad de consonantes es =" << contcons << endl;
     cout<< "La cantidad de espacios es = " << contesp << endl;
    
}  


void FuncionRe (char *text, int i, int contvoc, int contcons, int contesp)
{  
    if(i>19)
    {
            cout<< "La cantidad de vocales es = " << contvoc << endl;
            cout<< "La cantidad de consonantes es =" << contcons << endl;
            cout<< "La cantidad de espacios es = " << contesp << endl;
            
    }
    
            
    else
    {
                if( *(text+i) == 'a' || *(text+i)  =='e' || *(text+i)  =='i' ||*(text+i)  == 'o' || *(text+i)  =='u' )
                {
                    
                    contvoc++;
                    FuncionRe(text, ++i , contvoc, contcons, contesp);
                }
                else if(*(text+i)==' ')
                {
                     contesp++;
                     FuncionRe(text, ++i , contvoc, contcons, contesp);
                }    
                else
                {
                    contcons++;
                     FuncionRe(text, ++i , contvoc, contcons, contesp);
                }
                
     }      
    
}                      
-----------------------------------------------------------------------------------------------
Para que entiendan mejor, la funcion recursiva es la ultima[ void FuncionRe (char *text, int i, int contvoc, int contcons, int contesp) ]
Hasta ahora solo pude contar cuantas vocales, espacios y consonantes hay, pero no pude contar el numero de cada letra.

muchas gracias.


Título: Re: Ejercicio de Recursividad
Publicado por: david_BS en 25 Abril 2012, 01:48 am
si te ayuda, es algo parecido
http://foro.elhacker.net/programacion_cc/recursividad-t359491.0.html