Ir ao conteúdo
  • Cadastre-se
Cristiano Nogueira

Contar vogais usando função, com recursividade

Recommended Posts

Ola pessoal tenho um exercício de faculdade onde tenho que fazer um programa que conte o números de vogais de uma string, porém sou obrigado a usar recursividade e não estou conseguindo usar a recursividade.

 

o programa sem recursividade é essa, alguém tem alguma ideia de como eu posso utilizar a recursividade?

 

#include<stdio.h>
#include<string.h>
int contarVogais(char *palavra,int n)
{
    int i,x;
    x=0;
    for(i=0;i<n;i++)
    {
      if(palavra=='a' || palavra=='e' || palavra=='i' || palavra=='o' || palavra=='u')
      {
        x++;
      }
    }
    return x;
}
void main()
{
    char palavra[30];
    int n,m;
    scanf(" %s",&palavra);
    n=0;
    n = strlen(palavra);
    printf("%d\n",n);
    m=contarVogais(palavra,n);
    printf("%d\n",m);
}
  

 

Editado por DiF
Botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites
//variaveis globais
int qtds = 0;
int posicao = 0;

//metodo recursivo, vai chamar ele mesmo para resolver o problema
void conta(stinrg palavra, int posicao) {

	//vou colocar o caracter da posição que passei em uma string para comparação
	palavra = palavra.charAt(posicao);

	//se minha variavel de controle, para saber quando parar for menor que o tamanho da palavra passada, ele vai continuar
	if(palavra.legth() >= posicao) {
        //caso seja vocal vai adicionar um na contagem.
		if(palavra ='a' || palavra ='e' || palavra ='i' || palavra ='o' || palavra ='u'){
			qtds++;
		}
		//chamo novamente passando uma nova posicao caso meu primeiro if ainda for positivo
		conta("eita nossa", posicao+1);
	}
}


void main(){
                               
conta("eita nossa", 0);
return qtds;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui está a minha solução:

#include <stdio.h>

int contavogais(char *frase){
    //Se encontrar uma vogal checa a proxima letra, soma 1 ao resultado, e retorna a soma
    if (*frase == 'a' || *frase == 'A' ||
        *frase == 'e' || *frase == 'E' ||
        *frase == 'i' || *frase == 'I' ||
        *frase == 'o' || *frase == 'O' ||
        *frase == 'u' || *frase == 'U')
        return contavogais(++frase) + 1;
    //Senao, se encontrar o fim da frase/string retorna 0
    else if (*frase == '\0')
        return 0;
    //Senao apenas segue checando a proxima letra e retorna o resultado
    else
        return contavogais(++frase);
}

int main()
{
    char frase[] = "Esta frase contem onze vogais";
    int total;
    
    total = contavogais(frase);
    printf("%d\n", total);

    return 0;
}

Então ele checa a se a letra/char na posição da memória apontada pelo ponteiro passado como parâmetro da função é uma vogal, se sim analisa o próxima letra e soma o que a analise retorna mais 1, se não é vogal apenas retorna o que a analise da próxima letra retornar, mas se encontrar o caractere '\0' que indica o final da string apenas retorna 0 e não checa mais nenhuma letra.

 

Observe que '++frase' é usado para incrementar o ponteiro, que nesse caso equivale a mudar para a próxima posição no vetor de chars que contém a string sendo analisada.

Editado por isrnick

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

O exercício é converter este fragmento para solução com recursividade, ou podemos passar outra

solução para o problema principal, mas que utilize apenas recursividade??

Editado por Mauro Britivaldo
semântica

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×