Ir para conteúdo

POWERED BY:

Arquivado

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

abraaoduarte

exercicio c++

Recommended Posts

estou com dificuldade em resolver o seguinte exercicio!

 

Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados os dados de idade, sexo (M/F) e salário. Faça um algoritmo que informe:

a) a média de salário do grupo;

B) maior e menor idade do grupo;

c) quantidade de mulheres com salário até R$100,00.

Encerre a entrada de dados quando for digitada uma idade negativa. (Use o comando enquanto-faça e não use vetores ou matrizes)

o codigo abaixo que eu fiz ta ruim

 

obs: Eu uso o dev c++

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   char sexo;
   float maidg=0,meidg=0;
   int sal=0,id,medsal=0,qms100=0,i,msal100=0,totslg=0,qsal=0;
   system("cls");
   while (id>0)
   {
  cout<<"\n Digite a Idade :";
  cin>>id;
  i++;
   if (id>=0)
   {

   system("cls");
        sexo='x';
        while ((sexo!='F')&&(sexo!='M'))    
        {
            cout<<"\n M -> para masculino";
	   	 cout<<"\n F -> para feminino\n";
	 	 cin>>sexo;
	 	 sexo = toupper(sexo);    
            if ((sexo!='M')&&(sexo!='F'))
            {
             cout<<"\n Sexo invalido\n";
             system("pause");
            }                             
          }  
          cout<<"\n Entre com o Salario R$ ";
          cin>>sal;
          }
          }
          if (id>0)
          {
            totslg=totslg+sal;
            qsal++;
          }
          if (qsal>0)
          {
                     medsal=totslg+qsal;
          }
          if ((sexo=='F')&&(sal<=100))
          {
                                      msal100++;
          }

          if (meidg==0)
          {
                       meidg=id;
          if (id>maidg)
          {
                      maidg=id;
          }
          if (id<meidg)
          {
                      meidg=id;
          }

        cout<<"\n Media de Salario do Grupo R$ "<<medsal;
        cout<<"\n Maior Idade do Grupo :"<<maidg;
        cout<<"\n Menor Idade do Grupo :"<<meidg;
        cout<<"\n Quantidade de Mulheres que Ganham ate R$ 100,00 :"<<msal100;
        }
        cout<<"\n";

   system("PAUSE");
   return EXIT_SUCCESS;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom não compilei + me diga, o problema da erro? exibe algo errado? você soh busca otimização??

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom não compilei + me diga, o problema da erro? exibe algo errado? você soh busca otimização??

 

[]s

da alguns erros de saida

tipo a media do salario n sai

a menor idade vai ser a q você usa pra encerra o programa

e a maior idade tb n sai

Compartilhar este post


Link para o post
Compartilhar em outros sites
a menor idade vai ser a q você usa pra encerra o programa

 

Você tem -25 anos? A idade negativa é usada p/ encerrar o loop e não deve ser contada como idade real.

 

Veja se isso funciona (estou sem compilador):

 

#include <iostream>

using namespace std;

int main(void) {

int idade = 0;

char sexo = ' ';
bool firstSexo = true;

int menorIdade, maiorIdade;
bool firstIdade = true;

float salario;
int qtdeMSalario = 0; // Quantidade de mulheres com salario até 100,00.
int qtdePessoas = 0;
float somaSalarios = 0F;


while (idade > -1) {
	cout << "Digite a Idade :";
	cin >> idade;

	if (idade > 0) {

		if (firstIdade) {
			menorIdade = maiorIdade = idade;
			firstIdade = false;
		} else {
			menorIdade = (idade < menorIdade)? idade : menorIdade;
			maiorIdade = (idade > maiorIdade)? idade : maiorIdade;
		}

		while (sexo != 'F' && sexo != 'M') {
			if (!firstSexo)
				cout << "Sexo inválido!" << endl;

			cout << "Informe o sexo (M = masculino, F = Feminino): ";
			cin >> sexo;
			sexo = toupper(sexo);
			firstSexo = false;
		}

		cout << "Digite o salário: ";
		cin >> salario;

		if (sexo == 'M' && salario <= 100.00)
			qtdeMSalario++;

		somaSalarios += (float) salario;
		qtdePessoas++;
	}
}

cout << "Média salarial: " << salario/qtdePessoas << endl;
cout << "Qtde mulheres salario <= 100.00: " << qtdeMSalario << endl;
cout << "Menor idade: " << menorIdade << endl;
cout << "Maior idade: " << maiorIdade << endl;

return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Erros do meu compilador:

 

Variável id sendo usada sem ser inicializada.

Variável i sendo usada sem ser inicializada.

 

Sugestões ao seu programa:

 

Tente adicionar comentários ao seu código, não fazem mal a ninguém, não alteram na compilação do seu código e deixam ele muito mais legível. C++ não é modificada por espaços ou enters. O fim da expressão não precisa ser na mesma linha em que ela começou. Ele é demarcado somente e só pelo ; . Torne o texto tão legível quanto puder. C++ já é complexo, se você não escreve ele de um jeito legível, aí fica impossível.

 

Dê nomes completos para as varíavels (exemplo: int ex; Ex tem muitos significados. Exemplo, Exemplos, Experiência, entre vários outros. Se você colocar int experiencia_ganha; sabe-se facilmente para que ela serve).

 

Usar por exemplo, maidg e meidg, você mudou uma letra, o que isso muda? Fica fácil de confundir, difícil de entender para os outros etc. Simplifique as coisas, escrevendo nomes inteiros para as variáveis, e bem definidos. Se possível, adicione um comentário após a declaração da variável, para que não deixe dúvidas mesmo.

 

 

 

Sobre o que você escreveu: Inicialize as variáveis 'id' e 'i' antes de usá-las.

 

No primeiro while, como id seria maior que 0, se ele não tem valor? Aí pula para o próximo IF, que também precisa usar o id, e aí seu programa não funciona.

 

Tabule ele direito, está uma confusão. Use <TAB>, ou 4 espaços, não um, 2. Volte o mesmo número de <TABS> ou espaços que avança, senão vira confusão, como está.

 

totslg=totslg+sal;

 

Isso para mim é grego. Imagine se estivesse assim, como seria melhor e mais fácil de entender:

 

totslg = totslg + sal;

 

Ou ainda, se preferir:

 

totslg = (totslg + sal);

 

 

Outro exemplo:

 

while ((sexo!='F')&&(sexo!='M'))

 

Olha como fica mais fácil de entender:

 

while( (sexo != 'F') && (sexo != 'M') )

 

 

Ainda que eu não seja a favor de usar o operador ? para criar exemplos para iniciantes, o exemplo da _Isis_ está certinho, apenas falta um .0 entre o 0 e o F, para identificar um float.

 

float somaSalarios = 0.0F;

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evil, eu li em algum livro (talvez do Walter Savitch) que o ponto-flutuante padrão é double e se você quer mesmo declarar um float é necessário especificar a letra F. Não lembro de nenhuma menção ao ponto decimal ser necessária nesse caso. Fui ver no draft do último C++ e a árvore de derivação é essa:

 

 

floating-literal:

fractional-constant exponent-partopt floating-suffixopt

digit-sequence exponent-part floating-suffixopt

 

 

fractional-constant:

digit-sequenceopt . digit-sequence

digit-sequence .

 

 

exponent-part:

e signopt digit-sequence

E signopt digit-sequence

 

 

sign: one of

+ -

 

 

digit-sequence:

digit

digit-sequence digit

 

 

floating-suffix: one of

f l F L

 

 

O que é estranho é você considerar que dá p/ escrever "7." a partir de floating-literal. E ali também diz que o sufixo é opcional. Interpretações diversas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, se você escrever 7. se não estou enganado dá certo sim, mas é melhor colocar 7.0 para não deixar dúvidas...

 

O que eu sei e que li em vários livros é que se você colocar por exemplo "7" ao invés de "7.0", o 7 será considerado como um inteiro, mesmo se armazenado em um double ou float, e se colocar "7.0" será considerado como um número decimal. Adicionando o "F" ou "f" passa a ser um float. O compilador da MICRO$OFT imprime um erro de compilação caso você adicionar o "F" e não tiver parte decimal, por isso eu disse o que disse... e isso até resolve alguns problemas, pois já ouvi falar de erros em que, por exemplo, você divide um double com o valor inteiro (sem a parte decimal) por um com parte decimal (ou o contrário, não lembro) e o resultado acabava ficando diferente, sendo inteiro...

 

É sempre bom garantir para funcionar em todos os compiladores e ter certeza de que é um double...

 

Bom, sobre double ser o padrão, isso eu não sei, mas deve ser sim, igual a int ser o padrão e ter um tipo inteiro menor, o short.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas então se o 7 for considerado inteiro mesmo numa variável float ou double, pra quê precisamos informar o tipo né...O C++0X diz que vai adicionar inferência de tipos (#medo)

Agora que consegui abrir o G++ vi que ele dá o erro que você comentou sobre o número sem parte decimal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Pois é... mas especificamos o tipo para termos controle e sabermos o que está ocorrendo direitinho, sem probleminhas...

 

Aliás, você soube que o C++0x vai sair esse ano sendo o c++11?

 

Mas então, abraaoduarte, conseguiu entender o exemplo da _Isis_?

 

 

Qualquer dúvida é só falar.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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