Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
Leonardo Pimenta

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

Pergunta

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).

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

3 respostas a esta questão

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por paulopoxoreo1234@gmail.com
      Dado o trecho de código em C listado abaixo responda as perguntas a seguir.
      Cont = result = 1;
      For ( i=0; i<5; i= i+0.1){
            Cont = cont+i;
            Result  *= cont;
            Printf(“%f", result);
      }
      a)      O que será impresso depois da primeira iteração deste código?
      b)      Quantas vezes este laço precisará ser executado para que encontre a condição de término ?
      c)      Faça um trecho de código em C para quebrar esse laço na decima quinta iteração.
    • Por ednan
      estou precisando de ajuda neste trabalho se alguem souber e puder ajudar agradeço de coraçao
       
    • Por Hokage1
      Boa Tarde estou quebrando a cabeça com um trabalho, podem me ajudar ?:
       
      ara execução do projeto final siga as instruções: 
       
      (Tarefa 1) Elaborar um programa em Linguagem de Programação C com 2 interfaces (telas); uma para o cadastro dos 10 estudantes e outra para os dados analíticos. (Tarefa 2) Somente após finalizar a Tarefa 1, faça uma investigação para identificar quais recursos (não abordados nesta disciplina), em Linguagem de Programação C, que poderiam tornar a construção desta aplicação mais sofisticada e, até mesmo, mais fácil de implementar? Explique (não há necessidade de implementar o novo recurso). Enviar a resposta da Tarefa 1 (código-fonte escrito em Linguagem de Programação C) e da Tarefa 2 para avaliação em um arquivo no formato MS-Word com nome no seguinte padrão: LCC-IA-2020-3-Mod3-Projeto-Seu_Nome.docx (Arquivos nomeados fora deste padrão serão descartados). Use o fórum do Módulo 03 para postar suas dúvidas e/ou colaborar com os colegas.  
      TAREFA 1 – Programa de cadastro e análise de dados de 10 Estudantes:
      1.Tela: Criar a tela a seguir que permita a entrada de dados de 10 estudantes diferentes. Assim que o usuário digitar os dados do último estudante, o programa deverá ir para a 2.tela.
      Tela 1 – Interface (Tela) para cadastro de 10 estudantes
      2.Tela: Criar a tela a seguir que apresente os dados analíticos, a partir dos dados digitados na Tela 1. Na sequência, encerrar o programa.
       
      tela 2 – Interface (Tela) do quadro analítico
      OBSERVAÇÕES:
      Todos indicadores do Quadro Analítico deverão ser calculados (nenhum digitado pelo usuário);
       
      A “Maior Nota Individual” deverá ser a maior nota obtida por um estudante em qualquer uma das 2 avaliações; A “Menor Nota Individual” deverá ser a menor nota obtida por um estudante em qualquer uma das 2 avaliações; A “Média da Sala” deverá ser a média das médias dos 10 estudantes; A “Melhor Média da Sala” deverá ser a maior média obtida por 1 estudante; A “Pior Média da Sala” deverá ser a menor média obtida por 1 estudante.
    • Por janir.matheus
      Bom dia, não tenho muita prática com JavaScript (tive contato apenas durante um período no CEDERJ). Ocorre que agora preciso do bendito, e não estou conseguindo sair de uma situação. Vou postar o código:
      <script language="JavaScript"> coordenadas = ""; //Defini essa variável segundo meus conhecimentos, por ter omitido a palavra 'var' ela é global function sucesso(posicao) { coordenadas = posicao.coords.latitude; //document.write(coordenadas); //Aqui dentro ela escreve o valor da latitude } if('geolocation' in navigator) { navigator.geolocation.getCurrentPosition(sucesso); } else { alert("Navegador incompatível com esse recurso"); } document.write(coordenadas); //Aqui eu NÃO consigo pegar o valor </script> Basicamente eu quero salvar os valores de Latitude, Longitude e Timestamp em variáveis para poder usa-las posteriormente. Conto com a vossa ajuda. 
      Obrigado.
    • Por Millena Oliveira
      Oiii gente, boa noite. Estou estudando ainda e me deram um desafio para desenvolver um programa que imprimisse na tela somente os números primos segundo o valor que o usuário colocasse na execução. Utilizei o readLine para isso. Usei um objeto para que repetisse a execução e salvei todos os números numa array. O problema é, quando faço o teste colocando um número qualquer, retorna uma array vazia. Poderia me dar uma ajuda? Segue abaixo todo o código.
      Obrigada :)
       
      var readline = require("readline"); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function desafioPrimos() { var primos = []; rl.question("Digite um número: ", function (num) { console.log(primos); numero = parseInt(num); numerosPrimos: for (var x = 2; x <= num; x++) { for (var y = 2; y < x; y++) { if (x % y === 0) continue numerosPrimos; }; primos.push(x); rl.close(); }; }); }; desafioPrimos();  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.