Jump to content
Eduardo18

Implementaçao duma aplicação capaz de calcular e informar

Recommended Posts

Eduardo18

Foi efetuado um questionário a um número indeterminado de estudantes numa universidade. A todos os estudantes foi solicitado o género, a idade e se está a gostar ou não do curso que está a frequentar. Implemente uma aplicação capaz de calcular e informar:

•O número de estudantes entrevistados;

•Percentagem de estudantes de género feminino e masculino;

•Quantidade de estudantes de masculino com menos de 23 anos e não gostam do curso que estão a tirar.

Tenho o meu codigo assim,mas acho que está mal,ao compilar insiro um numero ,depois salta para gosta curso e está sempre a pedir o mesmo.

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	
	/*Declarar varoáveis*/
	int idade, intervistados=0, feminino=0, masculino=0, contador, naoGostaCurso=0;
	char genero [1];
	char gostaCurso [1];
	
	while(idade >= 0)
	{
		printf("Insira a idade:\n");
		scanf("%d", &idade);
		
		printf("\nInsira o genero:\n");
		scanf("%c", genero);
		
		printf("\nInsira gosta curso:\n");
		scanf("%c", gostaCurso);
		
		if(intervistados=0){
			intervistados++;
		}
		if(genero == masculino){
			masculino++;
			if(genero == feminino){
				feminino++;
			}
		}
		if( idade <23){
			idade++;
			if(naoGostaCurso =0){
				naoGostaCurso++;
			}
		}
	}
	return 0;
}

 

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Tens o mesmo problema no scanf() que está farto de ser discutido. (eu também empanquei inúmeras vezes nisto)

Quando escrevemos algo com o teclado e pressionamos o Enter, todos os caractéres pressionados ficam guardados num buffer chamado stdin.

A natureza da função scanf() lê este buffer até encontrar o caracter \n que é precisamente o de mudança de linha ou o Enter. ATÉ... Não lê este \n, por isso ele continua no buffer. O que acontece nos scanf() seguintes é que ele vê logo o \n que lá ficou anteriormente e como não o lê, segue o código, daí que apenas o 1º scanf() esteja a funcionar correctamente. A explicação não está completa porque até eu tenho receio de não estar a ser absolutamente preciso e por isso fico-me por aqui. O Happy explica isso melhor que eu!

Solução mais fácil é colocar um espaço antes do %d, assim:

scanf(" %d", &var);

 

Atenção ao uso de operadores em vez de comparadores dentro dos if's.

Não sei como pretendes verificar se o género é masculino ou feminino quando usas duas variáveis que as iniciaste a zero e as comparas com zero para depois incrementares um contador! Pensa lá mais um pouco no código.


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
Eduardo18
33 minutos atrás, PsySc0rpi0n disse:

Tens o mesmo problema no scanf() que está farto de ser discutido. (eu também empanquei inúmeras vezes nisto)

Quando escrevemos algo com o teclado e pressionamos o Enter, todos os caractéres pressionados ficam guardados num buffer chamado stdin.

A natureza da função scanf() lê este buffer até encontrar o caracter \n que é precisamente o de mudança de linha ou o Enter. ATÉ... Não lê este \n, por isso ele continua no buffer. O que acontece nos scanf() seguintes é que ele vê logo o \n que lá ficou anteriormente e como não o lê, segue o código, daí que apenas o 1º scanf() esteja a funcionar correctamente. A explicação não está completa porque até eu tenho receio de não estar a ser absolutamente preciso e por isso fico-me por aqui. O Happy explica isso melhor que eu!

Solução mais fácil é colocar um espaço antes do %d, assim:


scanf(" %d", &var);

 

Atenção ao uso de operadores em vez de comparadores dentro dos if's.

Não sei como pretendes verificar se o género é masculino ou feminino quando usas duas variáveis que as iniciaste a zero e as comparas com zero para depois incrementares um contador! Pensa lá mais um pouco no código.

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	
	/*Declarar varoáveis*/
	int idade, intervistados=0, feminino=0, masculino=0, naoGostaCurso=0;
	char genero [2];
	char gostaCurso [1];
	
	while(idade >= 0)
	{
		printf("\nInsira a idade:\n");
		scanf("%d", &idade);
		
		printf("\nInsira o genero:\n");
		scanf(" %c", genero);
		
		printf("\nInsira gosta curso:\n");
		scanf(" %c", gostaCurso);
	
		if(intervistados=0){
			intervistados++;
		}
		if(genero == "masculino"){
			masculino=0;
			masculino++;
			if(genero == "feminino"){
				feminino=0;
				feminino++;
			}
		}
		if( idade <23){
			idade++;
			if(naoGostaCurso =0){
				naoGostaCurso++;
			}
		}
	}
	return 0;
}

 

Share this post


Link to post
Share on other sites
PsySc0rpi0n

E agora, já funciona? Não? Porquê? O que acontece? E o que devia acontecer?

Tens que executar o código e investigar um pouco. Usa printfs para controlares o valor das várias variáveis!

Eu tenho co código feito e tem um bug que estou a tentar perceber a razão de ele estar a acontecer!

 

Edited:

Pronto. Com um printf, descobri o meu bug.

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
Eduardo18
int main(int argc, char *argv[]) {
	
	/*Declarar varoáveis*/
	int idade, intervistados=0, feminino=0, masculino=0, naoGostaCurso=0;
	char genero [2];
	char gostaCurso [1];
	
	while(idade >= 0)
	{
		printf("\nInsira a idade:\n");
		scanf("%d", &idade);
		
		printf("\nInsira o genero:\n");
		scanf(" %c", genero);
		
		printf("\nInsira gosta curso:\n");
		scanf(" %c", gostaCurso);
	
		if(intervistados=0){
			printf("numero de estudantes:\n", intervistados);
			intervistados++;
		}
		if(genero == "masculino"){
			printf("Percentagem de estudantes de género masculino:\n", masculino);
			masculino=0;
			masculino++;
			if(genero == "feminino"){
				printf("Percentagem de estudantes de género feminino:\n", feminino);
				feminino=0;
				feminino++;
			}
		}
		if( idade <23){
			printf("Percentagem de estudantes de género feminino e masculino:\n", idade);
			idade++;
			if(naoGostaCurso =0){
				printf("não gostam do curso que estão a tirar:\n", naoGostaCurso);
				naoGostaCurso++;
			}
		}
	}
	return 0;
}

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

dois pontos:

- apresentar código é completamente irrelevante quando não se apresenta uma dúvida

- vais fazer este exercício: para cada linha de código, vais comentar à frente o que essa linha de código deveria fazer (nota não é o que faz porque para isso eu sei ler)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Eduardo18
2 horas atrás, HappyHippyHippo disse:

dois pontos:

- apresentar código é completamente irrelevante quando não se apresenta uma dúvida

- vais fazer este exercício: para cada linha de código, vais comentar à frente o que essa linha de código deveria fazer (nota não é o que faz porque para isso eu sei ler)

não entendo porque dá compilar,mas no ecrã dá mal

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	setlocale(LC_ALL,"Portuguese");
	
	/*Declarar varoáveis*/
	int idade, intervistados=0, feminino=0, masculino=0, naoGostaCurso=0;
	char genero [2];
	char gostaCurso [1];
	
	while(idade >= 0)
	{
		//Recolher idade,genero e gosta curso no ecrã
		printf("\nInsira a idade:\n");
		scanf("%d", &idade);
		
		printf("\nInsira o genero:\n");
		scanf(" %c", genero);
		
		printf("\nInsira gosta curso:\n");
		scanf(" %c", gostaCurso);
		
		//implementaçao capaz de calcular e informar
		if(intervistados=0){//numero de estuantes intervistados
			printf("numero de estudantes:\n");
			intervistados++;
		}
		if(genero == "masculino"){//se for masculino
			printf("Percentagem de estudantes de género masculino:\n", genero[2]);
			masculino=0;
			masculino++;
			if(genero == "feminino"){//se for feminino
				printf("Percentagem de estudantes de género feminino:\n", genero[2]);
				feminino=0;
				feminino++;
			}
		}
		if( idade <23){ //se a idade for menor que 23
			printf("Percentagem de estudantes de género feminino e masculino:\n", idade);
			idade++;
			if(naoGostaCurso =0){ //se nao gosta curso
				printf("não gostam do curso que estão a tirar:\n", gostaCurso[1]);
				naoGostaCurso++;
			}
		}
	}
	return 0;
}

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

Pois, mas eu disse cada uma das linhas... 

Para facilitar, podes colocar os comentários inline após o código

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Rui Carlos
2 horas atrás, Eduardo18 disse:

não entendo porque dá compilar, mas no ecrã dá mal

O facto do programa compilar apenas significa que o mesmo está sintaticamente correcto.  Não significa que esteja semanticamente correcto.  Por comparação, a afirmação "O leão é um peixe." está sintaticamente correcta, mas não semanticamente.

Mas se queres ver alguns erros do teu programa, experimenta nas comparações com constantes inverter a ordem dos operadores, e.g. usar 0=intervistados em vez de intervistados=0 (já agora, se calhar o nome mais adequado para a variável era entrevistados).

Adicionalmente o @HappyHippyHippo já te sugeriu comentares o código indicando aquilo que esperas que cada linha faça.  Isto permitiria dizer onde é que o teu raciocínio está a falhar (o objectivo do fórum não é corrigir o código dos outros, mas sim ajudar a perceber por que é que o código não funciona).

Share this post


Link to post
Share on other sites
Eduardo18
4 horas atrás, Rui Carlos disse:

O facto do programa compilar apenas significa que o mesmo está sintaticamente correcto.  Não significa que esteja semanticamente correcto.  Por comparação, a afirmação "O leão é um peixe." está sintaticamente correcta, mas não semanticamente.

Mas se queres ver alguns erros do teu programa, experimenta nas comparações com constantes inverter a ordem dos operadores, e.g. usar 0=intervistados em vez de intervistados=0 (já agora, se calhar o nome mais adequado para a variável era entrevistados).

Adicionalmente o @HappyHippyHippo já te sugeriu comentares o código indicando aquilo que esperas que cada linha faça.  Isto permitiria dizer onde é que o teu raciocínio está a falhar (o objectivo do fórum não é corrigir o código dos outros, mas sim ajudar a perceber por que é que o código não funciona).

obrigado,ja tenho o feito.

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Podes partilhar o código para a gente ver e comparar? Eu pelo menos, gostava de comparar com o meu!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
Eduardo18
17 horas atrás, PsySc0rpi0n disse:

Podes partilhar o código para a gente ver e comparar? Eu pelo menos, gostava de comparar com o meu!

int main(int argc, char *argv[]) {
	setlocale(LC_ALL,"Portuguese");
	
	/*Declarar varoáveis*/
	int idade, intervistados=0, feminino=0, masculino=0, naoGostaCurso=0;
	char genero, gostaCurso;
	//Recolher idade,genero e gosta curso no ecrã
	printf("\nInsira a idade:\n");
	scanf("%d", &idade);
	
	while(idade >= 0)
	{
		//contar estudantes
		intervistados++;
		
		printf("\nInsira o genero: m/f \n");
		scanf(" %c", &genero);
		fflush(stdin);
		
		printf("\nInsira gosta curso: s/n \n");
		scanf(" %c", &gostaCurso);
		
		if(genero == 'm'){//se for masculino
			//conta estudantes do  genero masculino
			masculino++;
			if(idade<23 && gostaCurso == 'n'){
				//conta estudantes que nao gostam do curso e tem menos de 23 anos e sao homens
				naoGostaCurso++;
			}
		}
		else{//se for feminino
		
			//contar estudantes do genero feminino
			feminino++;
		}
		
		//Recolher idade,genero e gosta curso no ecrã
		printf("\nInsira a idade:\n");
		scanf("%d", &idade);
		fflush(stdin);
	}
	
	
		//mostrar resultados
		printf("numero de estudantes: %d \n", intervistados);
		printf("Percentagem de estudantes de género masculino: %d \n", masculino *100/intervistados);
		printf("Percentagem de estudantes de género feminino: %d \n", feminino *100/intervistados);
		printf("quantidade de estudantes de genro masculino que tem menps 23 anos e nao gostam do curso: %d", naoGostaCurso);
		
		
	return 0;
}

 

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Deixaste mesmo a variável "intervistados" no teu code? Opá, em termos de programação tudo bem, mas em termos de português, isso é uma vergonha!

 

Sobre o teu code, levou uma grande reviravolta depois das primeiras versões que aqui apresentaste.

Fica a maneira como eu fiz:

#include <stdio.h>

int main(void){
   int idade = 0, genero = 0, estado;
   int contaEstudantes = 0, contaNaoGostaCursoMen23 = 0;
   int fem = 0, masc = 0;

   do{
      printf("Insira idade ou -1 para terminar:\n");
      scanf(" %d", &idade);
      if(idade < 0)
         break;

      printf("Insira género: [0] - masculino --//--[1] - feminino\n");
      scanf(" %d", &genero);

      printf("Gosta do curso? [0] - Não --//-- [1] - Sim\n");
      scanf(" %d", &estado);

      if(idade > 0)
         contaEstudantes++;

      !genero ? masc++ : fem++;

      if( (!estado) && (idade < 23) && (!genero))
         contaNaoGostaCursoMen23++;
   }while(idade > 0);

   printf("Número de Alunos entrevistados: %d\n", contaEstudantes);
   printf("Percentagem de estudantes masculinos: %.1f%%\n", ((masc + 0.0)/ contaEstudantes) * 100);
   printf("Percentagem de estudantes femininas: %.1f%%\n", ((fem + 0.0)/ contaEstudantes) * 100 + 0.0);
   printf("Quantidade de estudantes masculinos menores de 23 anos que não gostam do curso: %d\n", contaNaoGostaCursoMen23);
  
   return 0;
}

 

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.