Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gustavo Malheiro

C Por que o percent está ficando com o valor 0?

Recommended Posts

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

int main(void){

	setlocale(LC_CTYPE,"Portuguese_Brazil");
    int valor[10];
    int i, total, media = 0;
    float percent;
    int j = 0;

    for(i=0; i<10; i++) {
        printf("Digite o %dª número: ", i+1);
        scanf("%d",&valor[i]);

        total = valor[i] + total;
        media = total/10;
    }
    printf("\n Média = %d\n", media);

    for (i=0; i<10; i++) {
        if (valor[i] > media) {
            j++;
        }
    }

    percent = (j/100)*10;
    printf("\n%.2f\n", percent);


    system("pause");
	return 0;
}

Por algum motivo que eu não consigo identificar, minha variável percent está aparecendo como 0 na execução do programa. Sendo que a conta não deveria dar 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tanto no percent quanto na media estão sendo calculadas divisões inteiras, ou seja 60/100 = 0 com 60 de resto, isso acontece pois está dividindo número inteiro por número inteiro, então a linguagem entende que quer fazer a divisão inteira.

 

Então use números de ponto nos números literais para indicar que quer fazer operações com pontos flutuantes.

 

percent = (j/100.0)*10.0;

 

  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 minutos atrás, Gustavo Malheiro disse:

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

int main(void){

	setlocale(LC_CTYPE,"Portuguese_Brazil");
    int valor[10];
    int i, total, media = 0;
    float percent;
    int j = 0;

    for(i=0; i<10; i++) {
        printf("Digite o %dª número: ", i+1);
        scanf("%d",&valor[i]);

        total = valor[i] + total;
        media = total/10;
    }
    printf("\n Média = %d\n", media);

    for (i=0; i<10; i++) {
        if (valor[i] > media) {
            j++;
        }
    }

    percent = (j/100)*10;
    printf("\n%.2f\n", percent);


    system("pause");
	return 0;
}

Por algum motivo que eu não consigo identificar, minha variável percent está aparecendo como 0 na execução do programa. Sendo que a conta não deveria dar 0

Pelo que vi, no seu programa você declarou inicialmente a variável 'j' como inteiro e depois pediu para mostrá-la como sendo float... Dividindo um valor inteiro menor do que 100  por 100, o compilador irá interpretá-lo como 0.

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@Gustavo Malheiro

Sugiro mudar os tipos das variáveis total e media para float para q o cálculo da média seja feito de maneira correta, inicializando ambas com o valor 0

 

Editado: Essa solução foi apresentada sem resolver a questão de inicializar a variável total com o valor 0

Editado por giu_d
Erro na explicação
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d A dica do isrnick deu certo! Creio que o problema era estar tentando fazer operações entre números inteiros e decimais. 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

:thumbsup:

Editado por AnsiC
Falha ao enviar mensagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d A lógica do programa dele estava certa, o valor da média já foi calculado antes desse for, ele só está contando quantos números acima da média foram digitados para calcular a percentagem de números acima da média.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

:thumbsup:

Como ficou o programa?

Editado por AnsiC

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gustavo Malheiro Seu programa calcula a média 10 vezes (calculando errado 9 vezes pois ainda não obteve o valor final do total), coloque o calculo da média depois/fora do ciclo for para calcular apenas 1 vez.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, AnsiC disse:

Como ficou o programa?

 

Também gostaria de saber isso

adicionado 6 minutos depois

Não seria preciso inicializar a variável total com 0?

adicionado 34 minutos depois

@isrnick  mas se não inicializar a variável total com 0 dá uma olhada como fica os resultados aqui:

 

Capturar1.PNG.ff09ab8eafd089dca533466569e0310d.PNG

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

Como ficou o resultado final?

 

adicionado 20 minutos depois

Eu arriscaria uma resposta. Já bem receoso d acabar errando novamente:

 

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

void fflush_stdin() {
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

int main(void) {

    setlocale(LC_CTYPE, "Portuguese_Brazil");

    float valores[10]; // para q sejam aceitos números com casas decimais
    int i, j;
    float media = 0, total = 0;
    float percent;

    for(i = 0; i < 10; i++) {

        printf("Digite o %2dº número: ", i + 1);
        scanf("%f", &valores[i]);
        fflush_stdin();

        total += valores[i];
    }

    media = total / i;

    printf("\nMédia = %.2f\n", media);

    j = 0;
    for (i = 0; i < 10; i++) {
        if (valores[i] > media) {
            j++;
        }
    }

    percent = (j / 100.0) * 10.0;

    printf("\nPorcentagem = %.2f\n\n", percent);

    system("pause");

    return 0;
}

 

Editado por giu_d
Erro no código
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void){

	setlocale(LC_CTYPE,"Portuguese_Brazil");
    int valor[10];
    int i, total, media = 0;
    float percent;
    int j = 0;

    for(i=0; i<10; i++) {
        printf("Digite o %dª número: ", i+1);
        scanf("%d",&valor[i]);

        total = valor[i] + total;
        media = total/10;
    }
    printf("\n Média = %d\n", media);

    for (i=0; i<10; i++) {
        if (valor[i] > media) {
            j++;
        }
    }

    percent = (j*100.0)/10.0;
    printf("\no percentual é de %.1f \n", percent);


    system("pause");
	return 0;
}

O código ficou assim. Aparentemente deu certo

  • Curtir 3

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






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

×