Ir ao conteúdo
  • Cadastre-se

Porcentagem não funcionando


Visitante
Ir à solução Resolvido por Midori,

Posts recomendados

Okay, esse é mais um dos casos que a resposta provavelmente estava nas minhas fuças o tempo todo, mas eu já passei tanto tempo encarando esse código que creio não ser mais capaz de ve-la. Estou tentando calcular a porcentagem de homens divorciados em relação ao total de homens e a variável da porcentagem simplesmente não funciona. Eu tenho um código que é basicamente a mesma coisa, do mesmo jeito e este funciona então não entendo porque carvalhos esse resolveu fazer a egípcia comigo, então cá estou novamente, pedindo luzes.

 

Eis o código completo:

#include <stdio.h>#include <stdlib.h>#include <string.h>int i, n = 0;struct Registro {    char sexo[2];    char estcvl[35];    int idade;    float renda;};typedef struct Registro respostas;respostas x[10];int Questionario() {    printf("Quantos questionarios? (max 5): ");    scanf("%d", &n);    for (i = 0; i < n; i++) {    int escolha0 = 0;    printf("Sexo? \n <1> Masculino \n <2> Feminino \n Sua escolha: ");    scanf("%d", &escolha0);    if (escolha0 == 1) {        strcpy(x[i].sexo, "M");    }    else {        strcpy(x[i].sexo, "F");    }    int escolha = 0;    printf("\n Estado Civil \n <0> Solteiro \n <1> Casado \n <2> Viuvo \n <3> Divorciado \n Sua escolha: ");    scanf("%d", &escolha);    switch(escolha) {    case 0:        strcpy(x[i].estcvl, "Solteiro");        break;    case 1:        strcpy(x[i].estcvl, "Casado");        break;    case 2:        strcpy(x[i].estcvl, "Viuvo");        break;    case 3:        strcpy(x[i].estcvl, "Divorciado");        break;    }    printf("\n Idade: ");    scanf("%d", &x[i].idade);    printf("Renda Anual: ");    scanf("%f", &x[i].renda);    printf("\n Sexo: %s \n Estado Civil: %s \n Idade: %d \n Renda Anual: R$ %.2f \n", x[i].sexo, x[i].estcvl, x[i].idade, x[i].renda);}}int nM = 0, nF = 0;int QHM() {    for(i = 0; i < n; i++) {        if(stricmp(x[i].sexo, "M")== 0) {            nM = nM + 1;        }        else {            nF = nF+1;        }    }    printf("\n Numero de Homens entrevistados: %d \n Numero de mulheres entrevistadas: %d \n", nM, nF);}int nS = 0;int Q_Solteiras() {    for(i = 0; i<n; i++) {        if(stricmp(x[i].sexo, "F")== 0) {            if(stricmp(x[i].estcvl, "Solteiro")== 0) {                nS = nS +1;            }        }    }    printf(" O numero de mulheres solteiras e %d \n", nS);}int cH = 0, cD = 0, porc;int P_Divorciado() {    for(i = 0; i<n; i++) {        if(strcmp(x[i].sexo, "M")== 0) {            cH = cH+1;            if(strcmp(x[i].estcvl, "Divorciado")== 0) {                cD= cD+1;            }        }    }    porc = (cD/cH)*100;    printf(" A porcentagem de homens divorciados e %d por cento", porc);}int media_renda = 0, total = 0, media_total;int M_renda() {    for(i=0; i<n; i++) {        if(strcmp(x[i].sexo, "F")== 0) {            if(strcmp(x[i].estcvl, "Casado")== 0) {                if(x[i].idade > 20) {                    if(x[i].idade < 40) {                        media_renda = media_renda + x[i].renda;                        total = total+1;                    }                }            }        }        else {            printf("\n A media da renda das mulheres casadas com idade entre 20 e 40 anos e 0")        }    }    media_total = media_renda/total;    printf("\n A media da renda das mulheres casadas com idade entre 20 e 40 anos e %d", media_total);}int main() {    Questionario();    QHM();    Q_Solteiras();    P_Divorciado();    M_renda();}
Link para o comentário
Compartilhar em outros sites

Olha, lê isso depois, tem seu valor...
Você esta fazendo um calculo onde

int                       int                 int

media_total = media_renda/total;

Você utiliza 3 valores inteiros.. então a sua resposta não será uma fração, será um inteiro também.

Quando quer buscar uma porcentagem exatada.. tem que se trabalhar com float
e é importante que

os valores sejam assim.

float media_total, media_renda;
int total;

 

é importante que quem vá receber a variavel seja um float, para receber parte depois da virgula, se não o valor será TRUNCado 
também tem uma questão do cast implicito, que é quando você tem um float porém faz a divisão entre dois numeros inteiros.

logo quando for tratar valores, se quere receber um valor float.. o calculo tem qser feito como : float = float/int 
ou float = float/float

não tenho certeza do caso de floa= int / float .. pois implicitamente acho que ele sempre mantém a propriedade da variavel mais a esquerda.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...