Jump to content
  • 0
Leonardo Pimenta

Programa em C que deve retornar numeros de vogais, consoantes e caracteres especiais(não especificados)

Question

Eis o programa para contagem de vogais e consoantes pronto.

A questão é como contar os caracteres especiais sem especificá-los.

Adicionei um }else{

                              especiais += 0;

                        }

...porém assim obtenho  números

#include <stdio.h>
#include <string.h>

void quantidade(char *texto, int contador);
int main(){
	char texto[255];
	int contador;
	gets(texto); 
	contador = strlen(texto);
	quantidade(texto, contador);
	return 0;
}
void quantidade(char *texto, int contador){
	char alf[27]={'a','e','i','o','u','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','\0'};
	int i, j, vogais=0, consoantes=0;
	for(i=0;i<contador;i++){
		for(j=0;j<27;j++){
			if(texto[i] == alf[j] && j < 5){
				vogais += 1;
			}else if(texto[i] == alf[j] && j >= 5){
				consoantes += 1;
			}
		}
	}
	printf("Vogais:%d\n",vogais);
	printf("Consoantes:%d\n",consoantes);
}
	

arbitrariamente grandes(sim,declarei int especiais=0 antes).

 

 

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Leonardo olá 

Podes utilizar o int é igual ...

 

// Exemplo TESTE.
#include <stdio.h>
#include <string.h>

void quantidade(char *texto, int contador){
	char alf[27] = { 'a', 'e', 'i', 'o', 'u', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z', '\0' };
	int i, j, vogais = 0, consoantes = 0, especiais = 0;
	int vogal_or_consoante = 0;
	for (i = 0; i<contador; i++){
		for (j = 0; j<27; j++){
			if (texto[i] == alf[j] && j < 5){
				vogais += 1;
				vogal_or_consoante = 1;
			}
			else if (texto[i] == alf[j] && j >= 5){
				consoantes += 1;
				vogal_or_consoante = 1;
			}
		}
		if (vogal_or_consoante == 0)
		{
			especiais++;
		}
		else
		{
			vogal_or_consoante = 0;
		}
	}
	printf("Vogais:%d\n", vogais);
	printf("Consoantes:%d\n", consoantes);
	printf("Especiais:%d\n", especiais);
}

int main(array<System::String ^> ^arg){
	char texto[255];
	int contador;
	gets(texto);
	contador = strlen(texto);
	quantidade(texto, contador);
	return 0;
}

Podes utilizar qualquer variável para fazeres isto... Apenas utilizei o "bool" por ser mais simples de entender...

 

Abraço,

Vítor Mendes

  • +1 1

Share this post


Link to post
Share on other sites
  • 0

Bom dia Leonardo

 

Então uma forma simples de fazer, que fiz aqui é da seguinte forma :

// Exemplo TESTE.
#include <stdio.h>
#include <string.h>

void quantidade(char *texto, int contador){
	char alf[27] = { 'a', 'e', 'i', 'o', 'u', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z', '\0' };
	int i, j, vogais = 0, consoantes = 0, especiais = 0;
	bool vogal_or_consoante = false;
	for (i = 0; i<contador; i++){
		for (j = 0; j<27; j++){
			if (texto[i] == alf[j] && j < 5){
				vogais += 1;
				vogal_or_consoante = true;
			}
			else if (texto[i] == alf[j] && j >= 5){
				consoantes += 1;
				vogal_or_consoante = true;
			}
		}
		if (vogal_or_consoante == false)
		{
			especiais++;
		}
		else
		{
			vogal_or_consoante = false;
		}
	}
	printf("Vogais:%d\n", vogais);
	printf("Consoantes:%d\n", consoantes);
	printf("Especiais:%d\n", especiais);
}

int main(array<System::String ^> ^arg){
	char texto[255];
	int contador;
	gets(texto);
	contador = strlen(texto);
	quantidade(texto, contador);
	return 0;
}

 

Havia melhor formas para o fazer... Mas enfim foi a forma mais rápida xD, pelo que testei aqui parece-me fazer o que queres..

 

Agora porque é que ao meteres um else dentro do 2 ciclo for não funciona simples repara o teu 2 ciclo for vai percorrer o array alf e comparar um a um carácter desse array com o array texto, ou seja vai haver muitas ocasiões em que por exemplo o carácter seja uma vogal ou até mesmo uma consoante mas que não seja igual naquele momento ao carácter do array alf e ai iria para o else e seria identificado como carácter especial e ficaria assim até que o carácter fosse igual ao carácter do array alf.

 

O que fiz foi criar uma variavel booleana ou true ou false sempre que no teu 2 ciclo for é detectada uma vogal ou consoante esta variável irá ficar true quando sair do 2 ciclo for vamos se ela está false se for false significa que o carácter nem é vogal nem consoante ou seja é "especial" então somamos +1 à variável caso contrario se foi detectado um carácter então vamos meter a variável de novo a false para podermos saber se o 2 carácter é ou não especial e por ai em diante ...

 

Já agora uma pergunta utilizas que compilador ?

Pergunto porque nestes casos os pontos de paragem ajudam bastante a perceber a lógica principalmente para iniciantes quando estudava utilizava muito enfim, fica a dica..

Eu utilizo VisualStudio 2013

 

Abraço,

Vítor Mendes

 

  • +1 1

Share this post


Link to post
Share on other sites
  • 0

Vitor Mendes , utilizo o compilador que vem no próprio Ubuntu, pelo terminal.

Entendi o meu erro, mas terei que fazer sem usar "Bool", pois ainda não aprendi isso, estou cursando Algoritmos e Estruturas de Dados I no curso de Eng. da Computação.

Pretendo usar a tabela ASCII pra ficar mais fácil.

De qualquer maneira obrigado pela atenção.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By edvaldo joviano de paula
      Prezados, boa tarde!
      Preciso de uma ajuda sendo possível:
       
      Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3)
      select codkit, produtos from kit where codkit = 1
      ---   ----
      1    2
      1    3
      Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo:
      kit 1 (2,3)
      kit 4 (2,10)
      kit 5 (3,11).
       
      Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4.
       
      Espero ter explicado de forma a ser entendido e agradeço a ajuda.
       
    • By GabiBozzano
      Boa tarde a todos! Tenho um programa pra entregar na faculdade e estou com algumas dificuldades.
      As 3 funções que o programa exige, eu já as criei, porem na main() não sei como chama-las, e não sei como criar um laço para que o jogo seja efetuado 10000 vezes, assim como não consigo fazer com que tenha a saída esperada. Não é permitido usar vetores, ponteiros, biblioteca math e etc.
      Qualquer dica eu apreciarei muito.
      Obrigada,
      Gabriela.
       
       
       
       
    • By Diogo Dall'Orto
      Ola pessoal boa tarde.
      Por  gentileza preciso da vossa ajuda.
       
      O programa para verificar o maior,  menor e seus respectivos índices eu consegui fazer conforme podem observar no código e saída abaixo, o problema esta quando tenho que implementa-lo na função.
       
      #Escreva um programa em Python com uma função que recebe por parâmetro uma lista de números inteiros e retorna o índice em que se encontra o maior elemento da lista.
      #Escreva um programa em Python com uma função que recebe por parâmetro uma lista de números inteiros e retorna o índice em que se encontra o menor elemento da lista.
       
      Estou a uma semana agarrado nisso! Help please!
       
      # Criar um programa em python que cria # uma lista com 10 elementos. Após isso # implementar o algoritmo para verificar e # exibir o maior elemento do vetor lista = list() for i in range(1, 11): lista.append(int(input(f'{i} - Digite um valor: '))) pos = maior = menor = indice = indicemai = indicemen = 0 while pos < len(lista): if pos == 0: maior = menor = lista[pos] indice = pos else: if lista[pos] > maior: maior = lista[pos] indicemai = pos pos += 1 while pos < len(lista): if pos == 0: menor = maior = lista[pos] indice = pos else: if lista[pos] < menor: menor = lista[pos] indicemen = pos pos += 1 print() print(f'Maior valor na lista esta é {maior}, e esta na posicao [{indicemai}] ') print(f'Menor valor na lista esta é {menor}, e esta na posicao [{indicemen}]') "D:\Python\Projetos Pycharm\venv\Scripts\python.exe" "D:/_____Impacta_____/Python/Projetos Pycharm/MaiorValorNoVetor.py" 1 - Digite um valor: 34 2 - Digite um valor: 54 3 - Digite um valor: 65 4 - Digite um valor: 76 5 - Digite um valor: 87 6 - Digite um valor: 34 7 - Digite um valor: 54 8 - Digite um valor: 23 9 - Digite um valor: 54 10 - Digite um valor: 45 Maior valor na lista esta é 87, e esta na posicao [4] Menor valor na lista esta é 34, e esta na posicao [0] Process finished with exit code 0  
       
    • By Bruno Goedert Dalmolin
      Não consigo apresentar as palavras equivalentes conseguem me ajudar???
      O código é o seguinte: 
       
      #include <stdio.h>
      char equivale(int ddd){
          switch(ddd){
              case 61:
                  return "Brasilia";
                  break;
              case 71:
                  return "Salvador";
                  break;
              case 11:
                  return "Sao Palo";
                  break;
              case 21:
                  return "Rio de Janeiro";
                  break;
              case 32:
                  return "Juiz de Fora";
                  break;
              case 19:
                  return "Campinas";
                  break;
              case 27:
                  return "Vitoria";
                  break;
              case 31:
                  return "Belo Horizonte";
                  break;
          }
      }
      int main(){
          int ddd;
          scanf("%d",&ddd);
          equivale(ddd);
          printf("%d",equivale(ddd));
      }
    • By anderx
      Prezados, boa tarde.
       
      Eu estou fazendo um programa em C que o usuário digite uma sequencia de caracteres e imprima somente valores numéricos e também mostrar os seus respectivos valores correspondentes a tabela ASC. Eu utilizei dois vetores , um para receber os caracteres e um outro para copiar apenas os valores numéricos, mas eu não estou conseguindo transferir somente os valor numéricos para o outro vetor. Alguém tem alguma dica de como posso transferir somete os números ? O código abaixo: 
       
      #include <stdio.h>
      #include <string.h>
      int main () {
      char str1[30] ={0};
       int str2[30];
      int i=0;
      scanf ("%s",str1);
      for(i=0; i<strlen(str1);i++) {
        str1*=1;
      str2=str1;

      printf("%c : : %d\n",str2,str2);
      }
          return 0;
      }
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.