O que posso melhorar nesse código e não consigo descobrir porque a porcentagem está dando negativo.

phk1

Membro
O que posso melhorar nesse código e não consigo descobrir porque a porcentagem está dando negativo.

O que posso melhorar nesse código e não consigo descobrir porque a porcentagem está dando negativo.
Descobrir a altura média das mulheres.
A menor e maior altura no grupo.
Quantos homens há no grupo.
#include <iostream>
#include <cstdlib>
#include <locale.h>

using namespace std;

int main(void)
{
setlocale(LC_ALL, "Portuguese");
float porcentagem,contador,acumulador,altura,menor,maior,media,altura_t;
int resposta,resp,i,homem,pessoas;
porcentagem, contador, acumulador, altura,menor,maior,media,altura_t=0;

contador = 0;
resp = 0;
resposta = 0;
homem = 0;

int contm = 0;
cout << "Entre com a altura, digite -1 para sair: ";
cin >> altura_t;
maior = altura_t;
menor = altura_t;

while (altura_t != -1)
{

if (altura_t == 0)
{
maior = altura_t;
menor = altura_t;
altura_t++;
}

if (altura_t > maior)
maior = altura_t;
else if (altura_t < menor)
menor = altura_t;
cout << "Entre com a altura, digite -1 para sair: ";
altura_t++;
cin >> altura_t;
}

cout << "Entre com 1 para mulheres e 2 para homens. ";
cin >> resposta;
if (resposta == 1)
{
cout << "Entre com a altura da mulher: ";
cin >> altura;
}
else if (resposta == 2)
homem++;

while (resposta != -1)
{
if (resposta != -1)
if (resposta == 1)
{
acumulador = acumulador + altura;
//altura++;
cout << "Entre com a altura da mulher, digite -1 para sair: ";
contm++;
cin >> altura;
}
else if (resposta == 2)
{
homem++;
}
cout << "Para sair digite -1, dê enter para continuar. \\n";
cout << "Escolha, 1 para mulher, 2 para homens: \\n";
cin >> resposta;
}
porcentagem = contm * altura_t / 100;
//porcentagem = (acumulador * contm ) / 100;
//z = (x / y) * 100;
media = acumulador / contm;
cout << "A maior altura é: " << maior << " e a menor altura é: " << menor << "\\n";
cout << "O número de homens é de:" << homem << "\\n";
cout << "A porcentagem de mulheres em relação ao total de pessoas é de: " << porcentagem << "\\n";
cout << "A média de altura das mulheres é de: " << media << endl;

}
Obrigado
 
Boas,
Não olhei para o código todo mas acho que tens um problema muito comum na linha:
porcentagem = contm * altura_t / 100;
porcentagem é do tipo float
contm e altura_t são do tipo int;

Tenta isto:
porcentagem = (contm * (float)altura_t) / 100;
 
Tens que mudar o algoritmo. Quando corres a linha
porcentagem = contm * altura_t / 100;
O valor da variável altura_t tem o valor -1, introduzido na linha 49 (cin >> altura_t), que é o valor para terminar o programa.
PS: não entendo o porquê de incrementares altura_t antes da linha 49
 
#include <iostream>
#include <cstdlib>
#include <locale.h>

using namespace std;

int main(void)
{
setlocale(LC_ALL, "Portuguese");
float porcentagem,m,media,homens,mulheres,altura,maior,menor;
int resposta,resp,i,homem,pessoas,opcao;
porcentagem,altura,menor,maior,media,homens,mulheres,opcao=0;

cout << "Entre com opção 0 para iniciar -1 para encerrar: ";
cin >> opcao;
cout << "Entre com a altura da pessoa: ";
cin >> altura;
maior = altura;
menor = altura;
//ler nvezes;
//while (cont != nvezes)
//instruçao
//cont++;
while (opcao != -1)
{

if (altura > maior)
maior = altura;
else if (altura < menor)
menor = altura;
if (altura == -1)
{
cout << "Entre com -1 para encerrar ";
cin >> opcao;
cout << "Entre com a altura: ";
altura++;
cin >> altura;
}


cout << "Entre com 1 para mulheres ou 2 para homens: ";
cin >> opcao;
if (opcao == 1)
{
mulheres++;
cout << "Entre novamente com a altura da mulher, digite -1 para sair: ";
cin >> altura;
m = m + altura;
}
else if (opcao == 2)
{
homens++;
cout << "Entre novamente com qunatidade de homens: ";
cin >> homens;
}
cout << "Entre com -1 para encerrar: ";
cin >> opcao;
}

porcentagem = mulheres * 100 / (homens + mulheres);
media = m / mulheres;

cout << "A maior altura é: " << maior << " e a menor altura é: " << menor << "\n";
//cout << "O número de homens é de:" << homem << "\n";
//cout << "A porcentagem de mulheres em relação ao total de pessoas é de: " << porcentagem << "\n";
//cout << "A média de altura das mulheres é de: " << media << endl;

}

Tentei melhorar o código, porém não está fazendo a interação do início do programa para verificar a altura, lê a altura, porém pula logo para verifica a escolha se 1 para mulheres ou 2 para homens. Talvez tenha de separar em dois whiles, mas eu quero só um.
 
Back
Topo