Ir ao conteúdo

Posts recomendados

Postado

o exercicio é esse 

Faça um algoritmo que leia idade, sexo e salário dos habitantes de uma cidade e escreva:  

a) a média de salário dos habitantes;

b) maior e menor idade entre eles;

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

 

meu algoritmo eu sei que tem uns erros de vetor (apesar de rodar), mas n sei como posso arrumar e no final na quantidade de mulheres c salario ate 1500 ta dando erro 

<>

#include <stdio.h>

#include <stdlib.h>

#define TAM 2

 

int main(void) {

float n, soma, media;

int sal[TAM],id[TAM], posiMaior, maior, posiMenor, i,menor, quantM;

char sexo;

i=0;

quantM=0;

printf("Digite a quantidade de habitantes:\n");

scanf("%f", &n);

 

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

printf("Digite o salário de cada um:\n");

scanf("%d", &sal[i]);

}

//media dos salários

soma=0;

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

soma=soma+sal[i];

}

media = soma/n;

printf("\nA media salarial é %.2f\n", media);

 

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

printf("\nDigite a idade de cada um:\n");

scanf("%i", &id[i]);

}

//maior idade

 

maior=id[0];

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

if (id[i]>maior){

maior = id[i];

}

}

printf("\nMaior idade é %i\n", maior);

 

//menor idade

menor=id[i];

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

if (id[i]<menor){

menor = id[i];

}

}

printf("\nMenor idade é %i\n", menor);

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

printf("\nInforme os sexos - F/M\n");

scanf("%s", &sexo);

if (sexo=='F'&& sal[i]<=1500){

quantM++

}

printf("Quantidades de mulheres com salário até R$1500 %i",quantM);

 

 

return 0;

}

}

Postado

@casa1   o enunciado diz para coletar os dados de um grupo de habitantes , então não precisa pedir para informar essa quantidade , e o usuário vai inserindo o tanto que quiser ,  e pegar as informações separadas até pode dar certo , mas é estranho e depois você não vai saber qual o habitante e a idade e sexo e salario referente a ele , então melhor pegar todos os dados de cada habitante de uma vez só ,  e você poderia usar um typedef para esse exercício , mas se você ainda está estudando vetores ,  também pode ser ,  e pegando seu código como referência , fiz algumas modificações nele , e me desculpe pela bagunça que fiz nele , e você pode deletar essas linhas com comentários , e o código ficou funcionando assim :

#define _CRT_SECURE_NO_WARNINGS  // para usar scanf e outras funcoes no visual studio
/*
Faça um algoritmo que leia idade, sexo e salário dos habitantes de uma cidade e escreva:
a) a média de salário dos habitantes;
b) maior e menor idade entre eles;
c) quantidade de mulheres com salário até R$1.500,00.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <windows.h>
#define TAM 2000
#define cls system("cls");
typedef struct
{
    int   idade  ;
    char  sexo   ;
    float salario;
}habitantes;
int main() 
{
    habitantes      hab[2000];
    float soma        =   0  ,  
          media       =   0  ,
          totaldesalario= 0  ,
          sal [TAM]   = { 0 };
    int   idade[TAM]  = { 0 },
          maioridade  =   0  , 
          contador    =   0  , 
          i           =   0  , 
          menoridade  =   0  , 
          quantdemulheres=0  ;
    char  sexo[TAM] = { '0' },
          op                 ;
	//printf("Digite a quantidade de habitantes:\n");
    do
    {
          printf("a idade ");
          //scanf("%d", &hab[i].idade);
          //scanf("%f", &n);
          //for (i = 0; i < n; i++) 
          //{
          //p rintf("Digite o salário de cada um:\n");
          scanf("%d", &idade[contador]);
          while (char c = fgetc(stdin) != '\n'); // limpar o buffer do teclado
          //}
          //media dos salários
          //soma = 0;
          /*for (i = 0; i < n; i++)
          {
              soma = soma + sal[i];
          }*/
          //media = soma / n;
          //printf("\nA media salarial é %.2f\n", media);
          /*for (i = 0; i < n; i++)
          {
              printf("\nDigite a idade de cada um:\n");
          */
          printf("o Sexo ");
          scanf("%c", &sexo[contador]);
          while (char c = fgetc(stdin) != '\n'); // limpar o buffer do teclado
          printf("o Salario ");
          scanf("%f", &sal[contador]);
          while (char c = fgetc(stdin) != '\n'); // limpar o buffer do teclado
          contador++;
          printf("Outro cadastro S/N ");
          scanf("%c", &op);
          while (char c = fgetc(stdin) != '\n'); // limpar o buffer do teclado
    } while (toupper(op) != 'N');
    printf("cont %d\n", contador);
    for (int j = 0; j < contador; j++)  // Loop para produzir os calculos
    {
        if (!j)
        {
            menoridade = idade[j];   // inicializa a variavel com o valor da primeira idade no vetor
            printf("a primeira idade inserida no Vetor = %d\n", menoridade);// verificando se certo
        }
        if (idade[j] < menoridade)
        {
            menoridade = idade[j];   // pega a menor idade do grupo
        }
        if (idade[j] > maioridade)
        {
            maioridade = idade[j];   // pega a menor idade do grupo
        }
        totaldesalario += sal[j];    // calcula o total acumulado de salario do grupo
        if (toupper(sexo[j]) == 'M') // pode digitar minuscula ou maiusculas
        {
            if (sal[j] <= 1500)
            {
                quantdemulheres++;
            }
        }
    }
    media = (float)totaldesalario / contador;  // hum < cast > para consertar a media , pois divisao de float com int
    printf("\n\nOs Resultados Dos Dados Coletados\n\n");
    printf("a) a media de salário dos habitantes -------------------: %.2f\n" , media          );
    printf("b) a maior idade entre eles; ----------------------------: %d \n" , maioridade     );
    printf("b) o menor idade entre eles; ----------------------------: %d \n" , menoridade     );
    printf("c) quantidade de mulheres com salario até R$1.500, 00. -: %d  \n" , quantdemulheres);
    printf("\n\tTecle . . . !\n\n");
    scanf("%c", & op);
    //}
    //maior idade
    //maior = id[0];
    /*
    for (i = 0; i < n; i++) 
    {
        if (id[i] > maior) 
        {
            maior = id[i];
        } 
    }
    printf("\nMaior idade é %i\n", maior);
    */
    //menor idade
    /*menor = id[i];
    for (i = 0; i < n; i++) 
    {
        if (id[i] < menor) 
        {
            menor = id[i];
        }
    }
    printf("\nMenor idade é %i\n", menor);
    for (i = 0; i < n; i++) 
    {
        printf("\nInforme os sexos - F/M\n");
        scanf("%s", &sexo);
        if (sexo == 'F' && sal[i] <= 1500) 
        {
            quantM++;
        }
        //  printf("Quantidades de mulheres com salário até R$1500 %i", quantM);
        //  return 0;
    }
    */
    //printf("Quantidades de mulheres com salário até R$1500 %i", quantM);
	cls
	printf("\n\n\n\t\tSaindo do programa . . . !\n\n\n");
	return 0;
}

 

  • Curtir 1
Postado

Olá!

 

 

image.png.7ee1fcadc95810d61b05fa4def0d1186.pngVocê  @casa1  decidiu colocar arranjos no problema para manipular esse categoria dados na solução? 

 

 

 

 

Vejamos:

5 horas atrás, casa1 disse:

#include <stdio.h>

#include <stdlib.h>

Inclui a biblioteca   stdlib   mais desistiu de recorrer à mesma. Teve uma intenção de alocar matriz dinamicamente ou apenas foi para adicionar aquela "paradinha" no final do programa com a chamada da   system( "PAUSE" )   ? De qualquer modo quando não é necessária então apague-a.

 

5 horas atrás, casa1 disse:

float n, soma, media;

Defina as variáveis com valor padrão durante a declaração inicializando com valor 0.

 

5 horas atrás, casa1 disse:

int sal[TAM],id[TAM], posiMaior, maior, posiMenor, i,menor, quantM;

Suponho que   sal   é o arranjo de salários, e que foi identificado com três inicias já pensado no trabalho que teria para escrever o nome   salarios   em outras partes do código.;)

 

O mesmo para o arranjo   id   que é identidades, posiMenor e posiMaior não estão tão ruins quanto as outras, mas melhor se fossem:   posicaoMenor, posicaoMaior.

Eu até entendo as distrações que levam aos constantes erros quando os nomes passam de 10 caracteres, mas não concordo.

 

O arranjo   sal  , vulgo salários,  penso que é interessante se de tipos float,  sabendo que seus valores são dinheiros desse modo ficaria mais consistente que de tipo inteiro. E por falar em consistência... por que desistiu ou nem se quer pensou que sexo poderia ser sexos, ou seja, um arranjo e assim teria a trinca da base de cadastro:

float  salarios[TAM];    int  idades[TAM];    char  sexos[TAM];

 

E o porquê dessa variável  i?

 

 

5 horas atrás, casa1 disse:

char sexo;

Sendo consistente, já que é um exercício de arranjos implemente com sexos.

 

 

5 horas atrás, casa1 disse:

printf("Digite a quantidade de habitantes:\n");

scanf("%f", &n);

Como assim... Certo... existe fracões de habitantes? Sim, porém não fariam parte desse senso.

E mais uma vez, uma variável interna contraída em uma letra. A ironia é que na notação húngara Int  é a letra  n  .

nQuantidade, nColuna

*Coluna no singular, o plural reservo as variáveis de arranjo (array).

 

5 horas atrás, casa1 disse:

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

printf("Digite o salário de cada um:\n");

scanf("%d", &sal[i]);

}

Na expressão condicional o valor de i é convertido implicitamente para tipo float. E não precisa acontecer nesse contexto, basta trocar  a categoria de dado de   n    para tipo inteiro.

 

 

5 horas atrás, casa1 disse:

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

printf("\nDigite a idade de cada um:\n");

scanf("%i", &id[i]);

}

 

5 horas atrás, casa1 disse:

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

printf("\nInforme os sexos - F/M\n");

scanf("%s", &sexo);

if (sexo=='F'&& sal[i]<=1500){

quantM++

}

Existe um processo chamado refatoração de código, basicamente é um estudo do código objetivando melhorar sua estrutura interna sem afetar o comportamento externo do programa, porém aqui talvez melhore de 2 maneiras fazendo esse programa ler os dados juntos em único “loop”.

 

Concordando com...

1 hora atrás, devair1010 disse:

o enunciado diz para coletar os dados de um grupo de habitantes , então não precisa pedir para informar essa quantidade , e o usuário vai inserindo o tanto que quiser ,  e pegar as informações separadas até pode dar certo , mas é estranho e depois você não vai saber qual o habitante e a idade e sexo e salario referente a ele , então melhor pegar todos os dados de cada habitante de uma vez só

 

 

 

5 horas atrás, casa1 disse:

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

if (id[i]<menor){

menor = id[i];

}

Entendi que nessa lógica veríamos a utilidade da variável posiMenor no subscrito de arranjo id.

Ainda que seja mais esperto usar uma variável do mesmo tipo que há no arranjo, principalmente se são fundamentais, determinar o menor valor indexando nos dois lados da expressão condicional traria mais utilidade para o vetor. Contudo, desse jeito funciona.

 

for (i = 0 ; i < n ; i++)
...
  
if (id[ i ] < menor)
...

Para alguns, o vácuo entre os operandos e operadores diminui a legibilidade das expressões, eu não concordo.

 

 

5 horas atrás, casa1 disse:

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

printf("\nInforme os sexos - F/M\n");

scanf("%s", &sexo);

if (sexo=='F'&& sal[i]<=1500){

quantM++

}

 

O especificador na função scanf captura no mínimo 2 char (2 caracteres), isso significa que será gravado além da variável sexo que é de tipo char (1 caractere)  Precisamente, gravará 0 na memória da quantidade (quantM), pois ela está em seguida no bloco de memória, mas pode ser que isso mude, em todo caso gravará além da  sexo.

 

[:)]

 

  • Curtir 2
Postado

@casa1 Não precisa de vetor se seu professor não pediu e um loop é o suficiente. Só tem que mostrar maior/menor idade, média e quantidade de mulheres com salário de até 1.500.

 

Declare as variáveis e atribua no loop de acordo o que é pedido.

float media;
float soma = 0;
int qtdm = 0;
int maior;
int menor;

 

E as condições,

...
if(idade > maior){maior = idade;}
if(idade < menor){menor = idade;}
if(sexo == 'F' && salario <= 1500){
    qtdm += 1;
}
soma += salario;
}
...
media = soma/n;
...

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!